Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-25 17:18 UTC

imazen / zenpixels

RustApache-2.0★ 1 Stern⑂ 0 Forksseit März 2026Auf GitHub ansehen ↗

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

58
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.

58
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

ImazenOrganisation
47 Follower220 öffentliche Reposseit Mai 2012

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
crates.iozenpixels0.2.1610.29515vor 0 Tagencodecdescriptorformatimagepixel
crates.iozenpixels-convert0.2.165.36216vor 0 Tagencodecconversionimagepixelsrgb

Metriken nach Kategorie

Vitalität

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

87Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
13.8/36Commit-Rhythmus — 20/52 Wochen mit Commits
18/18Commit-Volumen — 446 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 23 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year446
human_commit_share0,99
days_since_last_push0
active_weeks_last_year20

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 21 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 0 Tagen
27/27Release-Rhythmus — ein Release etwa alle 10,6 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count21
latest_release_tagzenpixels-convert-v0.2.16
releases_from_tagsnein
days_since_latest_release0
mean_days_between_releases10,6
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

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

35Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 1 Stars
0/25Forks — 0 Forks
0/15Watcher — 1 Watcher
Verwendete Eingangsdaten
forks0
stars1
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.0)
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
55.9/80Downloads pro Monat — 15.657 Downloads/Monat über crates
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packageszenpixels, zenpixels-convert
dependents
ecosystemscrates
total_downloads60.457
monthly_downloads15.657
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?

57Mittel · 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
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
32.7/46.8Issue-Lösungsquote — 70 % der Issues geschlossen
31.4/38.3PR-Annahme — 32/39 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/17 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs32
open_issues9
closed_issues21
issue_closed_ratio0,7
closed_unmerged_prs7
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
12.1/25Reichweite des Inhabers — 47 Follower von imazen
25/25Kontohistorie — 220 öffentliche Repos, Kontoalter ca. 14 Jahre
Verwendete Eingangsdaten
followers47
owner_typeOrganization
is_verified
owner_loginimazen
public_repos220
account_age_days5.177

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 2 Paket(e) auf crates
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 0 Tagen
20/20Versionshistorie — 16 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packageszenpixels, zenpixels-convert
ecosystemscrates
any_deprecatednein
min_days_since_publish0

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

55Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
0/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionnein

Sicherheit

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

50Mittel · 16 % des Gesamtindex

Sicherheitslage

38Gefä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 — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/17 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
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 23 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3,8
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages9
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von crates:zenpixels@0.2.16 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 9 Paketen. Erreichbarkeit wird nicht analysiert.

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.

70Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 99 von 99 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes7.162
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — justfile
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Rust (statisch typisiert)
10/10Reproduzierbare Umgebung — lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
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
lockfilesCargo.lock
has_dockerfilenein
typed_languageja
bootstrap_filesjustfile
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifestsCargo.toml, apidoc/Cargo.toml, benchmarks/transpose-shootout/Cargo.toml, scripts/icc-gen/Cargo.toml, zenpixels-convert/Cargo.toml, zenpixels/Cargo.toml
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Rust (statisch typisiert)
48.9/55Handhabbare Dateigrößen — 12/108 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageRust
largest_source_bytes123.146
source_files_sampled108
oversized_source_files12
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

1GitHub-Sterne
1Mitwirkende
446Commits, letzte 12 Monate
0Tage seit letztem Push
21Releases
1Bus-Faktor
9offene Issues
crates.ioPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch crates package 'zenpixels-apidoc' from its registry

Weitere Details

OpenSSF Scorecard 3.8 / 10
3.8Gesamtwert

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-25 17:18 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
0CI-Tests0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/17 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 23 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
Direkte Abhängigkeiten 18
RegistryPaketVersionsvorgabeManifest
crates.iozenutils-apidocapidoc/Cargo.toml
crates.iozenpixelszenpixels-convert/Cargo.toml
crates.iolinear-srgb0.6.12zenpixels-convert/Cargo.toml
crates.iobytemuck1.21zenpixels-convert/Cargo.toml
crates.iorgb0.8zenpixels-convert/Cargo.toml
crates.iogarb0.2.8zenpixels-convert/Cargo.toml
crates.ioarchmage0.9.26zenpixels-convert/Cargo.toml
crates.iolibm0.2zenpixels-convert/Cargo.toml
crates.iomagetypes0.9.26zenpixels-convert/Cargo.toml
crates.iopaste1.0.15zenpixels-convert/Cargo.toml
crates.ioonce_cell1.21.4zenpixels-convert/Cargo.toml
crates.iolz4_flex0.13.1zenpixels-convert/Cargo.toml
crates.iowhereat0.1.5zenpixels-convert/Cargo.toml
crates.iomoxcms>=0.8.1, <0.10zenpixels-convert/Cargo.toml
crates.iobytemuck1.21zenpixels/Cargo.toml
crates.iorgb0.8zenpixels/Cargo.toml
crates.ioimgref1.12zenpixels/Cargo.toml
crates.iowhereat0.1.5zenpixels/Cargo.toml
Alle Abhängigkeiten 158

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 27 direkte und 131 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
crates.ioarchmagedirekt
crates.ioarchmage0.9.26direkt
crates.iobytemuckdirekt
crates.iobytemuck1.25.0direkt
crates.iogarbdirekt
crates.iogarb0.2.8direkt
crates.ioimgrefdirekt
crates.ioimgref1.12.2direkt
crates.iolibmdirekt
crates.iolibm0.2.16direkt
crates.iolinear-srgbdirekt
crates.iolinear-srgb0.6.12direkt
crates.iolz4_flexdirekt
crates.iolz4_flex0.13.1direkt
crates.iomagetypesdirekt
crates.iomagetypes0.9.26direkt
crates.iomoxcmsdirekt
crates.iomoxcms0.8.1direkt
crates.iomoxcms0.9.0direkt
crates.ioonce_celldirekt
crates.ioonce_cell1.21.4direkt
crates.iopastedirekt
crates.iopaste1.0.15direkt
crates.iorgbdirekt
crates.iorgb0.8.53direkt
crates.iowhereatdirekt
crates.iowhereat0.1.5direkt
crates.ioanstream1.0.0indirekt
crates.ioanstyle1.0.14indirekt
crates.ioanstyle-parse1.0.0indirekt
crates.ioanstyle-query1.1.5indirekt
crates.ioanstyle-wincon3.0.11indirekt
crates.ioapprox0.5.1indirekt
crates.ioarchmage-macros0.9.26indirekt
crates.ioautocfg1.5.1indirekt
crates.iobitflags2.13.0indirekt
crates.ioblock-buffer0.12.1indirekt
crates.ioby_address1.2.1indirekt
crates.iobytemuck_derive1.10.2indirekt
crates.iocc1.2.64indirekt
crates.iocc1.2.65indirekt
crates.iocfg-if1.0.4indirekt
crates.ioclap4.6.1indirekt
crates.ioclap_builder4.6.0indirekt
crates.ioclap_derive4.6.1indirekt
crates.ioclap_lex1.1.0indirekt
crates.iocmake0.1.58indirekt
crates.iocolorchoice1.0.5indirekt
crates.ioconsole0.15.11indirekt
crates.ioconst-oid0.10.2indirekt
crates.iocpufeatures0.3.0indirekt
crates.iocrunchy0.2.4indirekt
crates.iocrypto-common0.2.2indirekt
crates.iodigest0.11.3indirekt
crates.iodunce1.0.5indirekt
crates.ioencode_unicode1.0.0indirekt
crates.ioerrno0.3.14indirekt
crates.iofast-srgb81.0.0indirekt
crates.iofast_transpose0.2.7indirekt
crates.iofind-msvc-tools0.1.9indirekt
crates.ioforeign-types0.5.0indirekt
crates.ioforeign-types-macros0.2.3indirekt
crates.ioforeign-types-shared0.3.1indirekt
crates.iofs41.1.0indirekt
crates.iogetrandom0.3.4indirekt
crates.iohalfindirekt
crates.iohalf2.7.1indirekt
crates.iohashbag0.1.13indirekt
crates.ioheck0.5.0indirekt
crates.iohybrid-array0.4.12indirekt
crates.iois_terminal_polyfill1.70.2indirekt
crates.ioitoa1.0.18indirekt
crates.iojobserver0.1.34indirekt
crates.iolcms2indirekt
crates.iolcms26.1.1indirekt
crates.iolcms2-sys4.0.6indirekt
crates.iolibc0.2.186indirekt
crates.iolinux-raw-sys0.12.1indirekt
crates.iomemchr2.8.2indirekt
crates.iontapi0.4.3indirekt
crates.ionum-integer0.1.46indirekt
crates.ionum-traits0.2.19indirekt
crates.ioobjc2-core-foundation0.3.2indirekt
crates.ioobjc2-io-kit0.3.2indirekt
crates.ioonce_cell_polyfill1.70.2indirekt
crates.iopaletteindirekt
crates.iopalette0.7.6indirekt
crates.iopalette_derive0.7.6indirekt
crates.iopkg-config0.3.33indirekt
crates.ioproc-macro21.0.106indirekt
crates.iopublic-api0.52.1indirekt
crates.iopxfm0.1.29indirekt
crates.ioquote1.0.45indirekt
crates.ior-efi5.3.0indirekt
crates.iorustdoc-types0.57.3indirekt
crates.iorustix1.1.4indirekt
crates.iorustup-toolchain0.1.10indirekt
crates.iorustversion1.0.22indirekt
crates.iosafe_unaligned_simd0.2.5indirekt
crates.ioserde1.0.228indirekt
crates.ioserde_core1.0.228indirekt
crates.ioserde_derive1.0.228indirekt
crates.ioserde_json1.0.150indirekt
crates.iosha2indirekt
crates.iosha20.11.0indirekt
crates.ioshlex2.0.1indirekt
crates.iosimilar2.7.0indirekt
crates.iosimilar-asserts1.7.0indirekt
crates.iosnapshot-testing0.1.8indirekt
crates.iostrength_reduce0.2.4indirekt
crates.iostrsim0.11.1indirekt
crates.iosyn2.0.117indirekt
crates.iosyn2.0.118indirekt
crates.iosysinfo0.36.1indirekt
crates.ioterminal_size0.4.4indirekt
crates.iothiserror2.0.18indirekt
crates.iothiserror-impl2.0.18indirekt
crates.iotranspose0.2.3indirekt
crates.iotypenum1.20.1indirekt
crates.iounicode-ident1.0.24indirekt
crates.ioutf8parse0.2.2indirekt
crates.iowasip21.0.4+wasi-0.2.12indirekt
crates.iowinapi0.3.9indirekt
crates.iowinapi-i686-pc-windows-gnu0.4.0indirekt
crates.iowinapi-x86_64-pc-windows-gnu0.4.0indirekt
crates.iowinarm-cpufeatures0.1.2indirekt
crates.iowindows0.61.3indirekt
crates.iowindows-collections0.2.0indirekt
crates.iowindows-core0.61.2indirekt
crates.iowindows-future0.2.1indirekt
crates.iowindows-implement0.60.2indirekt
crates.iowindows-interface0.59.3indirekt
crates.iowindows-link0.1.3indirekt
crates.iowindows-link0.2.1indirekt
crates.iowindows-numerics0.2.0indirekt
crates.iowindows-result0.3.4indirekt
crates.iowindows-strings0.4.2indirekt
crates.iowindows-sys0.59.0indirekt
crates.iowindows-sys0.61.2indirekt
crates.iowindows-targets0.52.6indirekt
crates.iowindows-threading0.1.0indirekt
crates.iowindows_aarch64_gnullvm0.52.6indirekt
crates.iowindows_aarch64_msvc0.52.6indirekt
crates.iowindows_i686_gnu0.52.6indirekt
crates.iowindows_i686_gnullvm0.52.6indirekt
crates.iowindows_i686_msvc0.52.6indirekt
crates.iowindows_x86_64_gnu0.52.6indirekt
crates.iowindows_x86_64_gnullvm0.52.6indirekt
crates.iowindows_x86_64_msvc0.52.6indirekt
crates.iowit-bindgen0.57.1indirekt
crates.iozenbenchindirekt
crates.iozenbench0.1.8indirekt
crates.iozerocopy0.8.52indirekt
crates.iozerocopy-derive0.8.52indirekt
crates.iozmij1.0.21indirekt
crates.iozune-core0.5.1indirekt
crates.iozune-image0.5.0indirekt
crates.iozune-imageprocs0.5.1indirekt
Abhängigkeits-Advisories 0

Die Installation von crates:zenpixels@0.2.16 zieht 9 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 3308,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "C++": 46901,
        "Just": 7051,
        "Rust": 2680551,
        "Shell": 483,
        "Python": 4942
      },
      "pushed_at": "2026-07-24T19:02:24Z",
      "created_at": "2026-03-04T08:55:34Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-24T18:47:11Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": "http://imazen.io",
      "name": "Imazen",
      "type": "Organization",
      "login": "imazen",
      "company": null,
      "location": "United States of America",
      "followers": 47,
      "avatar_url": "https://avatars.githubusercontent.com/u/1761920?v=4",
      "created_at": "2012-05-22T01:08:03Z",
      "is_verified": null,
      "public_repos": 220,
      "account_age_days": 5177
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "zenpixels-convert-v0.2.16",
          "kind": "other",
          "published_at": "2026-07-24T19:02:38Z"
        },
        {
          "tag": "zenpixels-v0.2.16",
          "kind": "other",
          "published_at": "2026-07-24T19:02:29Z"
        },
        {
          "tag": "zenpixels-convert-v0.2.14",
          "kind": "other",
          "published_at": "2026-06-18T07:14:49Z"
        },
        {
          "tag": "zenpixels-v0.2.14",
          "kind": "other",
          "published_at": "2026-06-18T07:14:48Z"
        },
        {
          "tag": "zenpixels-convert-v0.2.13",
          "kind": "other",
          "published_at": "2026-06-11T04:59:44Z"
        },
        {
          "tag": "zenpixels-v0.2.13",
          "kind": "other",
          "published_at": "2026-06-11T04:59:43Z"
        },
        {
          "tag": "zenpixels-convert-v0.2.12",
          "kind": "other",
          "published_at": "2026-06-10T04:18:22Z"
        },
        {
          "tag": "zenpixels-convert-v0.2.11",
          "kind": "other",
          "published_at": "2026-04-26T05:36:12Z"
        },
        {
          "tag": "zenpixels-v0.2.11",
          "kind": "other",
          "published_at": "2026-04-26T05:35:54Z"
        },
        {
          "tag": "v0.2.10",
          "kind": "patch",
          "published_at": "2026-04-20T18:30:57Z"
        },
        {
          "tag": "zenpixels-v0.2.9",
          "kind": "other",
          "published_at": "2026-04-17T03:55:47Z"
        },
        {
          "tag": "zenpixels-convert-v0.2.8",
          "kind": "other",
          "published_at": "2026-04-15T07:29:57Z"
        },
        {
          "tag": "zenpixels-v0.2.8",
          "kind": "other",
          "published_at": "2026-04-15T07:29:48Z"
        },
        {
          "tag": "zenpixels-convert-v0.2.7",
          "kind": "other",
          "published_at": "2026-04-14T16:13:10Z"
        },
        {
          "tag": "zenpixels-v0.2.7",
          "kind": "other",
          "published_at": "2026-04-14T16:13:08Z"
        },
        {
          "tag": "zenpixels-v0.2.6",
          "kind": "other",
          "published_at": "2026-04-13T05:21:49Z"
        },
        {
          "tag": "zenpixels-v0.2.3",
          "kind": "other",
          "published_at": "2026-04-10T14:06:33Z"
        },
        {
          "tag": "zenpixels-convert-v0.2.3",
          "kind": "other",
          "published_at": "2026-04-01T20:45:26Z"
        },
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2026-03-31T08:34:33Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-03-29T05:22:19Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-03-25T05:06:52Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "640dcedf1ee3f828c66dd19c0a08f08a68da9685",
          "body": "First release since 0.2.14 for both crates. Consolidates ~2 months of\naccumulated unreleased work: the CHANGELOG's [0.2.15] section documents\nchanges prepared 2026-06-23 that were never actually published (Cargo.toml\nwas pre-bumped but cargo publish never ran), plus everything added since\nunder [Unr\n[…]\ns a dependency of ultrahdr-core,\nwhich needs it for the moxcms 0.9.0 upgrade currently blocked across the\nultrahdr-rs -> ultrahdr-core -> zenpixels-convert chain (zenjpeg commit\n0fc2e143, 2026-07-23).",
          "is_bot": false,
          "headline": "release: zenpixels 0.2.16 + zenpixels-convert 0.2.16",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-24T18:45:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a9bdfe5d32316eef2eeedc24d5cbd363b4065b02",
          "body": "HDR SIMD NaN fix, HdrConfig hardening + review-driven cleanups (semver-compatible, 0.2.x)",
          "is_bot": false,
          "headline": "Merge pull request #65 from imazen/hdr-fixes-2026-07-14",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-23T21:56:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30b2ee15c30aee4d230f9d0d05b6afc7f07e2892",
          "body": "# Conflicts:\n#\tzenpixels-convert/src/cms_moxcms.rs",
          "is_bot": true,
          "headline": "Merge remote-tracking branch 'origin/main' into hdr-fixes-2026-07-14",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-07-23T21:47:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c64c895e5cb138a8d1d9678b6ff87e32e89811e",
          "body": "Also fixes two call sites broken by moxcms 0.9.0's white-point API change\n(WHITE_POINT_D50 const -> white_point_d50() fn, same for D60/D65/DCI_P3):\nscripts/icc-gen's cicp_bundle_gen binary and zenpixels-convert's\n#[cfg(test)] gray_icc_bytes_for_cicp helper. Both now call the function;\nvalue is bit-i\n[…]\nthis workspace.\n\nbenchmarks/transpose-shootout/Cargo.lock left at moxcms 0.8.1: the\nzune-imageprocs 0.5.1 dev-dependency there hard-pins moxcms = \"^0.8.0\"\n(external crate, not fixable from this side).",
          "is_bot": false,
          "headline": "deps: bump moxcms to 0.9.0",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-23T01:22:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "63d5b2a49bcdd5a26c558fd8bd4fe76e64765e49",
          "body": "Replace the transient \"moxcms bound tightened <0.10 -> <0.9\" entry with the net change: version-agnostic D50 reconstruction so the crate builds and tests against both moxcms 0.8.1 and 0.9.0, dep bound unchanged at <0.10.",
          "is_bot": false,
          "headline": "docs(changelog): record moxcms 0.9 build support (db2b0fc)",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-14T17:38:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db2b0fcb27daf1d159cfe3de68e2b633eb778dc6",
          "body": "…agnostic D50)\n\nmoxcms 0.9.0 (unreleased; verified vs master 05c88fb) renames the only symbol this crate touches that changed: the D50 white point, from the const WHITE_POINT_D50 (moxcms <=0.8) to the fn white_point_d50() (moxcms >=0.9). Same value (both are white_point_from_temperature(5003)) but m\n[…]\nay patch); gray_blob_decodes_byte_identical_to_moxcms confirms the reconstruction matches each version own synthesis byte-for-byte. semver-checks 196/196; fmt, clippy -D warnings, and cargo doc clean.",
          "is_bot": false,
          "headline": "feat(zenpixels-convert): build against moxcms 0.8.1 and 0.9 (version-…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-14T17:37:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e8569cb83df47cdac6e76dbdbfd6dfc45033edb7",
          "body": "…builders",
          "is_bot": false,
          "headline": "docs(api): regen public-API snapshots for HdrConfig non_exhaustive + …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-14T10:06:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c03009a7d956c6ad0c922c345f90b84b8ac5831",
          "body": null,
          "is_bot": false,
          "headline": "style: cargo fmt — reflow new test code (NaN/HdrConfig/estimate suites)",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-14T10:05:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e2c79f71a9bd28f72c5806dd8a9b3833a9d6bb2",
          "body": "The HDR pipeline (new_with_hdr_config) carries the source alpha mode\nthrough steps (b)-(e), which include the NONLINEAR BT.2446-A tone-map and\nOKLch soft-compress. Linear ops (gamut matrices) commute with\npremultiplication but the tone-map does not, so a premultiplied source is\ntone-mapped on premul\n[…]\near pipeline is subtle — deferred, not done wrong.\nDocumented as a KNOWN LIMITATION for hdr-experimental stabilization (PQ/HLG\nsources are virtually always straight/opaque; premultiplied HDR is rare).",
          "is_bot": false,
          "headline": "docs(hdr): note the premultiplied-source limitation on the tone-map path",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-14T10:05:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "70aff1e2f245ddbdce82c5fa879d9c0ccc1aee68",
          "body": "Three CI gaps from the 2026-07-14 review:\n\n- Add `cargo test -p zenpixels-convert --features avx512` (x64-gated via\n  runner.arch). The avx512 feature routes f16 + SIMD tiers through the\n  w512 magetypes/archmage kernels; dispatch is at runtime so it runs on any\n  x86-64 host, but it was otherwise o\n[…]\n to that sibling could otherwise break this repo's CI. Removed entirely\n  once zenutils-apidoc reaches crates.io.\n\nBoth new steps verified locally (avx512 suite green on Zen4; no_std+hdr\ncheck clean).",
          "is_bot": false,
          "headline": "ci: add avx512 + no_std-hdr-experimental coverage; pin zenutils sibling",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-14T10:01:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ab49182cad6e1a2edd4204387413df028b190b2f",
          "body": "…-HANDOFF\n\nCHANGELOG.md:\n- Added [Unreleased] entries for every fix in this branch (with commit hashes).\n- Marked the \"[0.2.15] - 2026-06-23\" section as authored-but-NOT-published:\n  crates.io latest is 0.2.14 for both crates, there is no v0.2.15/v0.2.16 tag,\n  and zenpixels goes 0.2.14 -> 0.2.16 (0\n[…]\n docs/color-model.md with a staleness banner (numbers were 0.2.8-era; verify\n  version-specific claims against source). Dropped the transient handoff\n  sections (shipped-list, open-issues-read-first).",
          "is_bot": false,
          "headline": "docs: reconcile changelog + API-delta + estimate docs; retire CONTEXT…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-14T09:58:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "556bf31c6b6751e47e3f06219cc7c627f35233b8",
          "body": "…s <0.9\n\ndep_guard.rs previously scanned only [dependencies] and [dependencies.NAME].\nA dependency added via [build-dependencies] or [target.'cfg(..)'.dependencies]\nwould have slipped past the dependency-lean guard. The parser now covers\nruntime + build dep tables in all their forms (plain, dotted-s\n[…]\nsed 0.9.x that could break the\noptions/transform API we call — a fresh resolution of the published crate\nwould silently pull it. moxcms is 0.8.1 today; widen deliberately after\ntesting when 0.9 ships.",
          "is_bot": false,
          "headline": "test(zenpixels)+deps: dep_guard covers build/target tables; pin moxcm…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-14T09:51:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "614a8e151cbe9e1e95012995ad14ea3a915062df",
          "body": "…/NaN contracts\n\ngamut_compress.rs computed chroma/hue with the f32 inherent .sqrt()/.atan2(),\nwhile its sibling kernels (bt2446a, measure) use libm::* explicitly for the\ncrate no_std path. Those inherents happen to still resolve in a\n--no-default-features --features hdr-experimental build (verified\n[…]\nes NaN/inf; the pipeline scrubs\n  before calling; direct callers own sanitisation).\n- bt2446a scalar tail: removed a no-op 0.1_f32.max(0.0) on a constant,\n  matching the SIMD path (zero_one * cr_pos).",
          "is_bot": false,
          "headline": "refactor(hdr): use libm explicitly in gamut_compress + document panic…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-14T09:48:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "816b9598c46b9526263ff26d70871653c7f5b724",
          "body": "ConvertPlan::estimate(_in) truncated the f64 model time to u64 ms, so\nevery sub-millisecond conversion (thumbnails — the web-focused core\ncase) reported wall_ms = Some(0), indistinguishable from zero work for\na scheduler summing many small conversions. Model times and the\nper-core scaling now round \n[…]\nX2 baseline, but the\nmultiplier table maps Unknown to 1.0 (same as baseline) — the doc now\nsays so plainly instead of describing a model that doesn't exist yet\n(per-tier calibration sweep stays TODO).",
          "is_bot": false,
          "headline": "fix(estimate): round wall-time up so sub-ms plans don't report 0",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-14T09:35:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6013acc24a876cfb56336d37a53337fcf28a97a9",
          "body": "- new_with_hdr_config (and new_with_hdr_peak via delegation) now return\n  HdrSourceRequiresPeak when source_peak_nits or target_peak_nits is\n  non-finite or <= 0 — including HdrConfig::default()'s unset 0.0.\n  Previously a degenerate peak flowed into the BT.2446-A constants\n  (1/ln(1) = inf, powf of\n[…]\ngamut_knee default 0.9 (it is 0.96);\n  the HdrSourceRequiresPeak Display + variant doc now cover the\n  invalid-peak case and point at measure_max (the production default)\n  rather than measure_robust.",
          "is_bot": false,
          "headline": "fix(hdr): reject degenerate HdrConfig peaks; non_exhaustive + builders",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-14T09:33:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eea47c01e3e10fd8242560a436ff7ddebd5a0808",
          "body": "Platform max NaN semantics diverge (x86 maxps returns the second operand;\nNEON/WASM propagate NaN), so the SIMD max-chain fold violated the documented\n'Negative/NaN samples clamp to 0' contract: a single NaN sample zeroed\nMaxFALL (poisoned running sum) and could underreport MaxCLL, with DIFFERENT\nre\n[…]\nods x RGB/RGBA x chunk/tail seam; measured max-scan throughput\n1.8-3.0 Gpix/s post-fix on the 7950X (the >= 1 Gpix/s doc bound holds;\nhistogram path ~330-350 Mpix/s both before and after this change).",
          "is_bot": false,
          "headline": "fix(hdr): tier-consistent NaN/negative fold in the SIMD CLL kernels",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-14T09:28:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7950e02a6f560231be31dac7ab5e2473d4c7f9b5",
          "body": "…g-19)\n\n.github/workflows/ci.yml had no cargo doc step and no apidoc-snapshot\ncheck, which is how 6 new public types and a broken doc link previously\nlanded on main unaudited (this repo already has the apidoc/ CI-free\nrunner package + docs/public-api/ snapshots wired locally, they were\njust never in\n[…]\neatures (RUSTDOCFLAGS=-D\n  warnings): passes clean.\n- ZEN_API_DOC=check cargo test --manifest-path apidoc/Cargo.toml:\n  passes (committed snapshots are current).\nCI-only change; no source/API changes.",
          "is_bot": false,
          "headline": "ci: add cargo-doc link check + Public API snapshot gate (zenpixels#bu…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-06T03:17:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "760a677758ee3accbfe0a1961fc7bd58bf891f64",
          "body": "…e module doc\n\nThe estimate module doc comment claimed the four local estimate types\n(ResourceEstimate, ComputeEnvironment, ImageCharacteristics, SimdTier)\nare 'shape-compatible' with zencodec::estimate::* and wireable via 'a\ntrivial From conversion'. Verified against source: no From impls exist\nin \n[…]\nvert side). Per the additive-\nonly policy for this published crate, this only corrects the doc text\n(no new From impls added, no public API change) — real From impls are\nan API decision for the owner.",
          "is_bot": false,
          "headline": "docs(zenpixels-convert): remove false trivial-From claim from estimat…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-06T03:16:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6f669b2e2723d8158180c8c33355699bdb1b2647",
          "body": "… consumers\n\nFalsification sweep (2026-07-02) before removal, per owner request:\n- Parsed EVERY Cargo.toml under ~/work (direct deps, dev/build deps,\n  target-specific deps, workspace deps, and feature-forwarding items\n  `zenpixels/serde` + `zenpixels?/serde`): zero enable the feature.\n- Grepped CI \n[…]\n tests 1128 ok / 0 fail; doctests 13 ok;\nbenches compile; clippy -D warnings clean; fmt clean.\nTolerated 0.2.x break per repo policy (feature kept, derives removed;\nships in queued unreleased 0.2.16).",
          "is_bot": false,
          "headline": "refactor(zenpixels): soft-remove the serde feature — inert stub, zero…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-02T09:15:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6e6edaa9d4bf261f57516642413b28e3791f4e95",
          "body": "…rustdoc link hygiene\n\nEntries for f70b7406 (HDR kernel per-row allocation hoist), 675ed30b\n(zenpixels tests/dep_guard.rs dependency-lean guard), and e410bba1\n(rustdoc link fixes + docs.rs feature metadata).",
          "is_bot": false,
          "headline": "docs(changelog): record unreleased tone-map perf fix, dep guard, and …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-02T08:23:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "258e9da89ad0fff3a8413d0fe825c77283172a98",
          "body": "zenpixels-convert: convert the 8 links that pointed at feature-gated items\n(ConvertPlan::new_with_hdr_peak / new_with_hdr_config, hdr::measure and its\nCllMeasure / LightLevelHistogram / LightLevelMethod items) into plain code\nspans so the default-features doc build renders link-clean, and add\n[packa\n[…]\nk in planar.rs\n(plane_width robustness note) to Self::with_subsampling.\n\nVerified: cargo doc --no-deps warning-free for both crates under default\nfeatures, the docs.rs feature set, and --all-features.",
          "is_bot": false,
          "headline": "docs: resolve all broken rustdoc links; add docs.rs feature metadata",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-02T08:23:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a1d8114c6f32df6295dc476e322c4808c0d57227",
          "body": "… per-row path\n\nThe hdr-experimental step kernels violated the module's documented\nno-per-row-allocation contract:\n- tone_map_bt2446a_kernel (RGBA carrier) allocated a fresh\n  Vec<[f32; 3]> rgb strip every row;\n- soft_compress_oklch_kernel allocated the strip every row (RGBA) AND\n  rebuilt a SoftCom\n[…]\n code path).\nNo public API change.\n\nVerified: cargo test -p zenpixels-convert --features hdr-experimental\n(511 unit + all integration suites pass, 0 failed); builds clean with\nand without the feature.",
          "is_bot": false,
          "headline": "perf(zenpixels-convert): hoist HDR tone-map kernel scratch out of the…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-02T08:23:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "675ed30ba92b4f17782d8ce52d38fa34c21a6dad",
          "body": "Std-only integration test that string-parses zenpixels/Cargo.toml via\nCARGO_MANIFEST_DIR (no new dev-deps) and asserts every [dependencies]\nname is within the frozen published-0.2.14 set {bytemuck, serde, rgb,\nimgref, whereat}, failing with a message citing the lean-deps rule:\nzenpixels never gains \n[…]\np for archmage/magetypes/intrinsics hits only doc comments); the\nmeasure() deprecation note points at CllMeasure::measure_max and its\nremoval is already queued under CHANGELOG QUEUED BREAKING CHANGES.",
          "is_bot": false,
          "headline": "test(zenpixels): add dependency-lean guard test (tests/dep_guard.rs)",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-02T03:43:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e0297f750cb6c186a6883bc95b9bff3acaa97239",
          "body": "Two pre-existing lints, both in test files, both outside anything the\ndefault CI clippy matrix compiled until now:\n\n- resource_estimate.rs: top-level `ColorPrimaries` import was only used\n  inside the hdr-experimental-gated test, so the default-features\n  `cargo clippy --workspace --all-targets -- -\n[…]\ntal suite is being\n  linted/run.\n\nVerified: cargo clippy --workspace --all-targets -- -D warnings PASS;\ncargo clippy -p zenpixels-convert --all-targets --features\nhdr-experimental -- -D warnings PASS.",
          "is_bot": false,
          "headline": "fix(tests): clear clippy -D warnings reds in feature-gated test suites",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-02T03:22:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "30faa8c3be22efeddf799b38e1161751517e5f5f",
          "body": "The root [workspace.package] version sat at 0.2.11 while the published\ncrates are 0.2.14 (main queuing 0.2.16/0.2.15). Verified no member\ninherits it (no version.workspace = true anywhere: zenpixels and\nzenpixels-convert declare their own versions; scripts/icc-gen is\n0.0.0) — the field was dead and only misleading, so remove it with a\ncomment explaining members version independently.",
          "is_bot": false,
          "headline": "chore: remove dead workspace.package.version = \"0.2.11\"",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-02T03:19:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d97ba322160ee9e3a8d8b2a782c3b3757e8416f",
          "body": null,
          "is_bot": false,
          "headline": "style: cargo fmt reflow of closure in deprecated_measure_parity.rs",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-02T03:19:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4e1fece7ec148e24604acbbd0fba41f3f4aac12",
          "body": "…asure\n\nCHANGELOG.md and docs/public-api/CHANGES_0.2.14_to_main.md narrated the\nmeasure removal as \"shipped in 0.3.0\" and labeled main as zenpixels\n0.3.0 — but no 0.3.0 was ever released; the manifests queue unreleased\n0.2.16 (zenpixels) / 0.2.15 (zenpixels-convert), and 6019aeef restored\nthe workin\n[…]\n the QUEUED BREAKING\nCHANGES entry so the removal is queued again, and fix the API-delta\ndoc title/version table/removals/backwards-compat sections to reflect\ndeprecated-not-removed on the 0.2.x line.",
          "is_bot": false,
          "headline": "docs: correct false 0.3.0 release narrative for ContentLightLevel::me…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-02T03:18:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6019aeef74b6100c02773300ddc0f25112662096",
          "body": "…ove unimplemented!() panic shim\n\nThe unreleased 0.2.16 line replaced the published-and-working 0.2.14\nimplementation of ContentLightLevel::measure with a #[deprecated]\n#[doc(hidden)] shim whose body was unimplemented!() — a runtime panic\nfor any 0.2.x caller, which is a behavior break inside the se\n[…]\ner run in CI) execute.\n\nVerified: cargo test -p zenpixels hdr:: (11 pass) and cargo test -p\nzenpixels-convert --features hdr-experimental --test\ndeprecated_measure_parity --test cll_measure (17 pass).",
          "is_bot": false,
          "headline": "fix(zenpixels): restore working ContentLightLevel::measure body — rem…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-07-02T03:14:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "36896cf044f78b02f518785bfc526dbde4d7b178",
          "body": "…-convert)\n\nBoth crates now ship a generated badge-free README.crates.md (readme =\n\"README.crates.md\"; ../README.crates.md for zenpixels, whose readme is the repo\nroot). GitHub README.md keeps the full badge row + rendered crosslink footer.\n\nzenpixels: add &label=CI + MSRV badge, fix license -> #lic\n[…]\nlready current for the estimate API.\n\nVerified vs origin/main src: ConvertPlanBuilder is unpushed WIP (not documented);\nICC tables = 298 RGB + 69 gray; f16 still descriptor-only. No Rust code changed.",
          "is_bot": false,
          "headline": "docs: README overhaul + split crates.io README (zenpixels + zenpixels…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-28T02:26:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e37f0025d01f4a600e4c272c41ce142a0084ab39",
          "body": "…olyfill SIMD\n\nThe hand-written scalar curve in hdr/bt2446a.rs (483 LOC) duplicated what\nthe magetypes `scalar` polyfill tier on hdr/bt2446a_simd.rs (266 LOC)\nalready auto-generates. Merge both into a single hdr/bt2446a.rs (472 LOC,\n−277 LOC net) where:\n\n- the magetypes-attributed bt2446a_tier is th\n[…]\nd remainder tail byte-identical to prior version\n\nVerified: cargo test --all-features (all pass), cargo semver-checks\n(196/196), just api-doc (empty diff), zentone cargo test --release (274/274\npass).",
          "is_bot": false,
          "headline": "refactor(zenpixels-convert): collapse bt2446a scalar into magetypes-p…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-25T06:28:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "02cc172458ae6c5ec4077d6eba5ef794274105e7",
          "body": "Move accuracy contract, calibration source, threading + memory models, and\nthe foundation-crate / zencodec shape-compatibility rationale out of the\nmodule docstring into a new zenpixels-convert/docs/ESTIMATE.md (127 LOC).\nThe remaining module docstring is 14 lines pointing at the new doc + the\ntwo e\n[…]\nbench-tolerance gates).\n\n- estimate.rs: 895 → 364 LOC\n- new docs/ESTIMATE.md: 127 LOC\n- zero public-API drift (cargo semver-checks pass, apidoc unchanged)\n- behavior preserved (full test suite passes)",
          "is_bot": false,
          "headline": "refactor(zenpixels-convert): trim estimate.rs 895→364 LOC",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-25T06:12:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "193fdb9b774419d6e83ebba469ae4a32a5e25ca0",
          "body": null,
          "is_bot": false,
          "headline": "style: cargo fmt collateral on tests/ext",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-25T06:11:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aac51e6d749478743a6bbcd31dc6033a646d48aa",
          "body": "…n cleaner snapshots\n\nSwitches `apidoc/tests/public_api_doc.rs` to chain the two new opt-in\ngates introduced in `zenutils-apidoc 0.1.2`:\n\n  ApiDoc::new()\n      .workspace_dir(\"..\")\n      .no_file_meta_header()\n      .no_autotraits_summary()\n      .run();\n\n`no_file_meta_header()` drops the `# files: \n[…]\ntest --manifest-path apidoc/Cargo.toml  # passes\n  git diff --stat HEAD docs/public-api/v0.2.14/                   # empty\n  diff against the snapshots shows only the targeted noise lines  # confirmed",
          "is_bot": false,
          "headline": "docs(apidoc): adopt no_file_meta_header + no_autotraits_summary; rege…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-25T02:08:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e5ac694ea3e5d43be4b1e7734359a401264450b0",
          "body": "…release\n\nThe serde feature on zenpixels-convert existed for exactly one thing:\n`#[cfg_attr(feature = \"serde\", derive(serde::Serialize, serde::Deserialize))]`\non hdr::measure::LightLevelMethod (a 2-variant enum: MaxRgb |\nLuminanceBt2020). Callers can trivially wrap this enum themselves\nwithout dragg\n[…]\ngo build --no-default-features clean\n- cargo semver-checks check-release vs v0.2.14: 196/196 PASS\n- All affected tests (resource_estimate / hdr_pipeline / cmyk_cms_roundtrip) pass\n- apidoc regen clean",
          "is_bot": false,
          "headline": "refactor: drop optional serde dep; soft-remove serde feature for one …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-24T08:11:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2200ff8f051e2236a92d7716d58700e9a86c7a53",
          "body": "…anonical HDR regression gate\n\nThe single-sample producer-SDR ΔE2000 test in zenpixels-convert-e2e was\nsubsumed by zentone's audited 76-sample shootout:\n  zentone/examples/hdr_tone_map_shootout_audited.rs\n  + benchmarks/hdr_tone_map_shootout_full_2026-06-22.csv\n  + benchmarks/shootout_2026-06-22_fin\n[…]\nr-experimental,pipeline,cms-moxcms,rgb: clean\n- cargo build --no-default-features: clean\n- cargo semver-checks vs v0.2.14: 196/196 PASS\n- apidoc regen: clean (no zenpixels-convert-e2e in the snapshot)",
          "is_bot": false,
          "headline": "refactor: drop zenpixels-convert-e2e crate; zentone shootout is the c…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-24T07:27:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7a22bbf037913ff28ef2ec9b007c0921855b2959",
          "body": "…_count for paging-pressure schedulers\n\nzenpixels-convert is per-frame: animation frame counts and codec-flavored\nvariance/CPU-vs-wall splits belong on zencodec::estimate::*, not on the\nper-conversion estimate input/output. Trim the local estimate surface\naccordingly and add a buffer-count field sch\n[…]\nwith intermediate_buffer_count_zero_for_identity_plan and\nintermediate_buffer_count_increases_for_multi_step_plan). README +\nconvert.rs docstring + estimate.rs module docs updated. Apidoc regen\nclean.",
          "is_bot": false,
          "headline": "refactor(estimate): ablate codec-only fields; add intermediate_buffer…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-24T07:02:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "598a70243e0bdbd2c9fc0c7720c1aae51f88fc68",
          "body": "…t-e2e crate",
          "is_bot": false,
          "headline": "docs(CHANGELOG): note ThreadingInformation removal + zenpixels-conver…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T23:57:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbe8bb754319123097cde4dc9c7c36907f229572",
          "body": "…onvert-e2e crate\n\nTwo coordinated cleanups in zenpixels-convert.\n\nPart A: Drop ThreadingInformation complexity from src/estimate.rs.\nThe struct + 3 ctors + 5 accessors existed solely to drive\nResourceEstimate::at_cores(); user verdict was that this was an\nunjustified mess. Removed: ThreadingInforma\n[…]\nimate tests pass, e2e crate builds clean,\ncargo semver-checks --baseline-version 0.2.14 PASS 196/196 (this is\nadditive-reduction since ThreadingInformation was just-added in 0.2.15\nand never shipped).",
          "is_bot": false,
          "headline": "refactor: drop ThreadingInformation; factor e2e test into zenpixels-c…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T23:55:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bd8200fa5228f2e64cc266adc939152250bd2092",
          "body": "…oundation-crate layering)",
          "is_bot": false,
          "headline": "refactor(estimate): drop zencodec dep; duplicate the types locally (f…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T22:27:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d4061bf788904ed97bc0c3455e3a63f30c98829",
          "body": "…for compose-with-codecs estimation\n\nReplace zenpixels-convert's local `ResourceEstimate { peak_memory_bytes,\nwall_time_ms }` with re-exports of `zencodec::estimate::{ComputeEnvironment,\nImageCharacteristics, ResourceEstimate, SimdTier, ThreadingInformation}` so\nestimates compose with codec-side enc\n[…]\n    ✅ 7 passed, 22 ignored\n  build --no-default        ✅ (zencodec dep absent on this path)\n  cargo semver-checks       ✅ additive\n  cargo test apidoc/        ✅ snapshots regenerated, regen test green",
          "is_bot": false,
          "headline": "feat(estimate): adopt zencodec ComputeEnvironment + ResourceEstimate …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T22:00:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0a910c8b25827606d1dc6720898f46418b6ab8e7",
          "body": "User feedback: 'don't use a blind tuple, return an extensible struct'.\n\nThe prior commit b466389 collapsed ResourceEstimate to a (u64, f64)\ntuple as a YAGNI cleanup. Tuples lose named-field self-documentation\nat call sites and can't grow new fields without a breaking change.\n\nRe-introduce as a minim\n[…]\nargo semver-checks --baseline-version 0.2.14: 196/196 PASS, no\n  semver update required (the field-named struct is still additive\n  vs v0.2.14 which had no estimate API)\n- apidoc snapshots regenerated",
          "is_bot": false,
          "headline": "feat(estimate): revert tuple to non_exhaustive ResourceEstimate struct",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T21:45:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b466389e0d81f20cd8b913737e55864955bb47cb",
          "body": "…timate (w, h) -> (u64, f64)\n\nPre-publish YAGNI cleanup. The 0.2.15 work branch had elaborated\n`ResourceEstimate` / `StepEstimate` / `EstimateConfidence` + 11\n`estimate_*` shadow methods spread across `PixelBufferConvertExt` /\n`PixelBufferConvertTypedExt` / `PixelBufferHdrConvertExt` — far too\nmuch \n[…]\nax scan-leg cost — only callable from the deleted\nestimate_convert_to_sdr). `variant_name` on ConvertStep / FusedKind kept\nwith #[allow(dead_code)] — still needed when the `__trace_ops` feature\nis on.",
          "is_bot": false,
          "headline": "refactor(estimate): replace ResourceEstimate API with ConvertPlan::es…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T20:35:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e08ac3d64347c262b97acfb6023736b5ed37ae4d",
          "body": "…!() shim — restore 0.2.x\n\nUser directive: don't bump to 0.3.x; keep the measure method as a\ndeprecated shim with an `unimplemented!()` body.\n\nThe prior commit (e5ac4261) removed the deprecated 2-arg\n`ContentLightLevel::measure(...)` entirely and bumped zenpixels to\n0.3.0 because semver-checks rejec\n[…]\n5 lib + 435 integration across 32 test files = 950 total\n\nApidoc snapshots from commit 54a60594 may need regen via `just api-doc`\nto reflect the restored shim signature in the supported-surface table.",
          "is_bot": false,
          "headline": "fix(hdr): keep ContentLightLevel::measure as deprecated unimplemented…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T19:49:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "54a6059470bb1af853b9f88b21f7532ca9c49ea8",
          "body": "Adds a frozen v0.2.14 baseline (docs/public-api/v0.2.14/{zenpixels,\nzenpixels-convert}.{txt,features.txt,internal.txt}) alongside the\nzenutils-apidoc-regenerated current-main snapshots and a delta\nsummary at docs/public-api/CHANGES_0.2.14_to_main.md. The apidoc\nrunner already existed (workspace-excl\n[…]\nct, additive only).\n- zenpixels:         0 fail vs the 0.2.14 -> 0.3.0 major bump (the\n                     only break, ContentLightLevel::measure, is\n                     absorbed by the major bump).",
          "is_bot": false,
          "headline": "docs(apidoc): public-API snapshots for v0.2.14 baseline + main",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T19:45:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e5ac426161a02ef39ce5fe8878ed4b695801a77e",
          "body": "…emove deprecated ContentLightLevel::measure\n\nTask A — zenpixels: 0.2.15 → 0.3.0 (mandatory pre-0.3.0 cleanup)\n\n- Removed `zenpixels::hdr::ContentLightLevel::measure(px, white)` inherent\n  method (deprecated + doc-hidden since 0.2.15). Canonical replacement:\n  `zenpixels_convert::hdr::measure::CllMe\n[…]\nsion can stay\n  0.2.15\" allowance)\n\nResource discipline:\n\n- All cargo builds/tests prefixed with `nice -n 19` per CLAUDE.md.\n- No allocator regressions; in-tree unit + integration tests touch < 64 MB.",
          "is_bot": false,
          "headline": "test+refactor: comprehensive coverage for 0.2.14->0.2.15 additions; r…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T19:38:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8e972d21e71ad9eaeed7ba41ff7961a59694fc6d",
          "body": "Replaces the pre-#44 `assert_not_cmyk` process-aborting guard with a\ngraceful `ConvertError::NeedsCms { from, to }` variant on the typed\n`ConvertError`. The pattern is generic on color model — applies to\nCMYK today, future Lab / XYZ / spot inks plug in via the\n`native_color_model` whitelist (`Gray` \n[…]\nxCms)` escape hatch\nunreachable for CMYK ↔ RGB. Production CMYK encoders/decoders can now\npass a CMYK `PixelDescriptor` through `RowConverter` with a moxcms\nplugin attached and get correct RGB output.",
          "is_bot": false,
          "headline": "feat(cms): NeedsCms path lets moxcms convert CMYK<->RGB end-to-end",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T19:11:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "da81aaa685e91707e5e9c9b10dcf161ebe59aee2",
          "body": "CI Format job failed on commit 03c63b5c (cleanup-opts) — three minor\nfmt-only diffs the agent didn't run `cargo fmt` on after the\nConvertStep::Fused merge:\n- convert.rs:274 — short struct variant body collapsed to single line\n- convert.rs:2257 — short match-arm bodies collapsed\n- converter.rs:81 — l\n[…]\npe was workspace members only\n(`cargo fmt $(cargo metadata --no-deps --format-version 1 | jq -r '.packages[].name' | sed 's/^/-p /')`)\nper CLAUDE.md — would NOT reach into sibling repos via path-deps.",
          "is_bot": false,
          "headline": "style: cargo fmt (single-line struct + match arm wrapping)",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T17:31:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0a4bbf4039ce2864089a17ffb89039f5f9f32c03",
          "body": "The `__hdr-e2e-test` feature's optional zenjpeg dep had\n`path = \"../../zenjpeg/zenjpeg\"` for local-dev convenience (so changes\nto the unpublished zenjpeg main would be picked up by the e2e test\nwithout a publish round-trip). CI runners only clone the zenpixels\nrepo, so the sibling path doesn't exist\n[…]\ne `[patch.crates-io]` block — same shape as the\nexisting `ultrahdr-core` git-patch entry.\n\nVerified: `cargo metadata --no-deps --format-version=1` now succeeds\n(previously exited 101 on every CI job).",
          "is_bot": false,
          "headline": "fix(ci): drop zenjpeg path attribute (sibling missing on CI runners)",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T17:19:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aa55a292d87beb82e99087a24e431b230ce13c16",
          "body": "The ResourceEstimate API was added in 0.2.15 (commits 183af66 +\n4aae8b9e covering ConvertPlan::estimate_resources and the 11\nestimate_* trait methods on PixelBufferConvertExt /\nPixelBufferConvertTypedExt / PixelBufferHdrConvertExt) but the\nREADME never documented it. Added a new 'Resource estimation' section\nwith a code example + a row in the key-types-and-functions table\npointing at the trait and the new doc-link entries.",
          "is_bot": false,
          "headline": "docs(README): add ResourceEstimate section + types-table entry",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T17:17:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03c63b5c2c6bfbfe9688b932482da8ce1ddf7acc",
          "body": "…variant_name + Owned share-on-clone + SIMD gamut\n\nLands the items A.1-A.4 + B.5 from\nzenpixels-convert/AUDIT_DEDUP_2026-06-23.md.\n\n## Summary\n\n- Merged 5 `FusedSrgb*` variants → `ConvertStep::Fused { kind, matrix }`\n- Replaced 93-line hand-rolled `Debug` impl with `#[derive(Debug)]`\n- Single source\n[…]\nrectness fix (the Arc thing)\n- DO NOT remove `#[doc(hidden)]` items — untouched\n- DO NOT add new public API — none added (FusedKind/variant_name are\n  `pub(crate)`; the new regression test is private)",
          "is_bot": false,
          "headline": "cleanup(zenpixels-convert): audit dedup — ConvertStep::Fused merge + …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T16:56:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e1ebf76b45bb6f8a767b0d9d1a281c041dabf0ea",
          "body": "`HdrConfig::default().gamut_knee` bumped from `0.9` → `0.96` based on an\nempirical sweep of 76 imazen-26 gain-mapped HDR samples against 13 knee\nvalues (0.50–1.00) on 2026-06-23.\n\n`0.96` is the largest knee value (i.e. the LEAST chroma compression /\ndesaturation) where the corpus-p90 fraction of pre\n[…]\n or `ConvertPlan::new_with_hdr_peak()`\npick up the new default automatically.\n\nDriver: zentone/examples/softcompress_knee_sweep.rs\nFindings: zentone/benchmarks/softcompress_knee_findings_2026-06-23.md",
          "is_bot": false,
          "headline": "tune(softcompress): empirical knee default — corpus-validated 0.96",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T16:41:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e890b67148ca6e1768594b43f5a6415d160ef81f",
          "body": "Surveyed ~6100 LOC inserted in zenpixels-convert/src/ between v0.2.14\nand current main (10 files; hdr/measure.rs, hdr/gamut_compress.rs,\nhdr/bt2446a*, estimate.rs, ext.rs, plus the convert/adapt/converter\ntrio). Walked the diff for code duplication, missed SIMD/perf,\nand type-system smells. Audit re\n[…]\nspeedups\n(not LOC-measurable) for the perf items.\n\nVerification: cargo build --features hdr-experimental,pipeline,cms-moxcms,rgb\nclean; cargo test --features hdr-experimental --lib reports 513 passed.",
          "is_bot": false,
          "headline": "audit(zenpixels-convert): dedup + missed-opt review since v0.2.14",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T16:13:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5ab70a0e67d717e5666b38b2a25d8dcd84e227e5",
          "body": "…, semver-checks PASS, 43→0 doc warnings\n\nPublish-prep audit for zenpixels-convert 0.2.15 (downstream of the recent\nResourceEstimate / measure_max / Bt2446A work). Findings + fixes:\n\n# API hardening (semver-checks now PASS at 196/196 — was failing 1 major):\n\n- **`PixelBufferConvertExt::estimate_*` f\n[…]\nublish chain unblock:\n\nOnce zenpixels 0.2.15 + zenpixels-convert 0.2.15 are on crates.io,\nultrahdr-core 0.6.0 and ultrahdr-rs 0.4.0 (which depend on the\n0.2.15 hdr-experimental surface) are unblocked.",
          "is_bot": false,
          "headline": "prep(publish): audit zenpixels-convert 0.2.15 — fix serde-feature bug…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T15:45:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4aae8b9ed257f30c32b2587788e6dabd40a06614",
          "body": "…sdr/with_hdr_config\n\nAdds 11 non-allocating estimator companions for the convert extension\ntraits, mirroring the `ConvertPlan::estimate_resources` primitive shipped\nin 183af66. Each returns `ResourceEstimate` with the ±30 % design\ntolerance documented on the underlying plan estimator.\n\nPixelBufferC\n[…]\new methods are required on\nthe traits (breaking change for any external impl; no external impls\nexist in the imazen tree per grep -rn 'impl PixelBufferConvertExt').\nVersion not bumped — author's call.",
          "is_bot": false,
          "headline": "feat(estimate): cover try_*/linearize/delinearize/to_rgb*/convert_to_…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T15:22:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1192d38bd402f39da231a913926e199cf2bb67d2",
          "body": "…rces (accurate to 1-2%)\n\nAdded examples/mem_probe_convert.rs (marginal-WS probe: VmHWM - pre-RSS) +\nbenchmarks/convertplan_estimate_verify_2026-06-23.tsv. Measured the conversion\npeak vs estimate_resources across layout/alpha/gray/depth plans at 1024-4096^2:\nratio meas/est = 1.00-1.07. The memory m\n[…]\ns) matches reality to 1-2% - far tighter than the\ndocumented +-30% (which is the wall-time bench tolerance). Confirms the estimate\nis trustworthy to compose into decode/pipeline peak-memory estimates.",
          "is_bot": false,
          "headline": "test(zenpixels-convert): heaptrack-verify ConvertPlan::estimate_resou…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T14:51:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "183af66179a6b6bb6b1c3dd8266684ae8c52de21",
          "body": "Adds `ConvertPlan::estimate_resources(width, height) -> ResourceEstimate`\nplus a `PixelBufferConvertExt::estimate_convert_to(&target)` shortcut for\npredicting memory + time before running a conversion. Callers integrating\nzenpixels-convert into pipelines (imageflow, zenpipe, ultrahdr-rs, the\nimazen \n[…]\n ms\n\nCHANGELOG entry under zenpixels-convert — added, calibration provenance\nand the ±30 % tolerance documented.\n\nAll 9 new tests pass; 513/513 existing lib tests pass; clippy clean;\ndocs build clean.",
          "is_bot": false,
          "headline": "feat(convert): ResourceEstimate API — predict peak memory + wall-clock",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T14:28:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "69bb400a99d489aac4c62fc82920a6a70272b59c",
          "body": "…onvert::hdr::Bt2446A\n\nThe reinhard_tonemap / reinhard_inverse / exposure_tonemap deprecation\nmessages still pointed at `zentone::Bt2446A` — but Bt2446A was\nextracted from zentone into `zenpixels-convert::hdr` in commit\n52fd949 and is now the audited production default. Updated the\ndeprecation `note\n[…]\n:Bt2446A`\n   location.\n\nNo behaviour change — these fns remain `#[deprecated]` + `#[doc(hidden)]`\nand queued for 0.3.0 removal. Only the warning text and docs are\nupdated to be accurate post-shootout.",
          "is_bot": false,
          "headline": "deprecate(hdr): repoint reinhard/exposure deprecations at zenpixels_c…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T13:58:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e2dfb5a3ec3e988ff2a0de2266c31d1ca5d7990",
          "body": "User directive: max is the only documented production peak-measurement\nAPI in zenpixels-convert. Everything else is implementation detail under\nthe hdr-experimental gate.\n\nAdded `#[doc(hidden)]` to:\n- `CllMeasure::measure_percentile` — secondary explicit-percentile API\n- `CllMeasure::measure_histogr\n[…]\n-features hdr-experimental`.\nInternal call sites (the hidden trait methods + the histogram type +\nDEFAULT_PERCENTILE) still resolve because doc(hidden) doesn't affect\nvisibility — only rustdoc output.",
          "is_bot": false,
          "headline": "feat(hdr): hide everything except measure_max",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T12:07:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "efc0e8403dab7cf008bf5ddd6000e3de6064f568",
          "body": "The 2026-06-22 audited shootout's tail-aware metric set (76 samples ×\n20 curves × 4 peak methods, scored with mean/p95/p99 ΔE2000 + OKLab\nEuclidean ΔE against producer SDR) split 3-3 between `measure_max` and\n`measure_percentile @ 0.99999`:\n\n  | metric          | measure_max | p99999  | winner |\n  |\n[…]\n`default_percentile_constant_is_tail_tightest`.\n\nAll 33 hdr::measure tests pass under `--features hdr-experimental`.\nAPI churn under the `hdr-experimental` gate (no semver break for\nstable consumers).",
          "is_bot": false,
          "headline": "feat(hdr): make measure_max the production default; hide measure_robust",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T12:02:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dc31756c35e9ac4b962a481704b87d30c79d9dd7",
          "body": "…smoothed\n\nThe 2026-06-22 audited HDR→SDR shootout (76 imazen-26 samples × 20 curves\n× 4 peak methods) established two findings that drive this change:\n\n1. `measure_percentile @ 0.99999` (== `measure_robust` with the new\n   default) won every tail-aware metric (`de2000_p95`, `de2000_p99`,\n   `de_ok_\n[…]\n99)\n\nAll 33 hdr::measure tests pass under `--features hdr-experimental`.\n\nNote: this is API churn under the `hdr-experimental` gate, which has\nnot stabilized yet. No semver break for stable consumers.",
          "is_bot": false,
          "headline": "feat(hdr): flip DEFAULT_PERCENTILE 0.9999→0.99999 + hide measure_max_…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-23T10:54:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0897f179db46b5459532b364279a21afee1d8553",
          "body": "HDR→SDR conversion is now a native multi-step in the existing\n`ConvertPlan` infrastructure rather than a parallel struct with its own\nbuffer dispatch — when the plan builder sees an HDR-encoded source\n(PQ/HLG) with an HDR config, it composes the existing transfer-decode +\ngamut-matrix steps with two\n[…]\nΔE2000 = 3.16 on the imazen-26 sample — matches the\n  pre-refactor pipeline.\n- New unit tests pin per-pixel parity between the HDR plan and a\n  manual `apply_strip`-equivalent reference (within 5e-4).",
          "is_bot": false,
          "headline": "refactor(hdr): fold HdrToSdr into ConvertPlan as ToneMap step",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-22T22:51:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e712f84e2573d81513c659e5aee932f263c736d4",
          "body": "…diffuse-white\n\nAdd convert_buffer(&PixelBuffer) -> Result<PixelBuffer> and\nconvert_into(&PixelBuffer, &mut PixelBuffer) -> Result<()> on HdrToSdr,\nwrapping the existing linear-light apply_strip primitive with full\ndescriptor-based byte-format dispatch. The strip-level math is untouched\n— the new bu\n[…]\nargo fmt --check: clean\n\nTests added: 14 in hdr::buffer_dispatch::tests covering one cell per axis\n(transfer, format, alpha, signal range, diffuse-white precedence) plus\nmismatched-primary validation.",
          "is_bot": false,
          "headline": "feat(hdr): HdrToSdr auto-handles transfer / format / alpha / range / …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-22T02:40:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f68b759e63cc779806f5f59f6eb4d713cad90629",
          "body": "Replaces the primitive `ColorPrimaries` source/target params on\n`zenpixels_convert::hdr::HdrToSdr` with `PixelDescriptor`. Descriptors\nare the single source of truth for buffer color metadata (primaries,\ntransfer, format, alpha mode, signal range), so the converter no longer\nneeds to fan its inputs \n[…]\nound-trip.\n\nProducer-SDR e2e (`__hdr-e2e-test` feature, imazen-26 12 MP sample)\nstill passes at mean ΔE2000 = 3.16 — bit-identical to the prior commit\nsince only the API surface changed, not the math.",
          "is_bot": false,
          "headline": "refactor(hdr): HdrToSdr takes PixelDescriptor for source and target",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-21T23:39:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3ed973cc1ae6e9f122d52edf29bca574794ccd78",
          "body": "Removed the [patch.crates-io] zencodec = { path = \"../zencodec\" } entry now\nthat zencodec 0.1.24 is on crates.io. The patch only affected the\n__hdr-e2e-test transitive graph (zencodec is not a default-build dependency\nof any member); that graph now resolves zencodec from the registry, with the\nlock \n[…]\n zenpixels member implements or reads the\nestimate / ResourceEstimate API. cargo test --workspace green; the\n__hdr-e2e-test test (which exercises the zencodec graph) passes on a real\nimazen-26 sample.",
          "is_bot": false,
          "headline": "deps: migrate to published zencodec 0.1.24 + drop git-rev patch",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-21T22:57:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "505d02e8df22b7ae35a78dca1ea2ee6a685d6df9",
          "body": "…mode\n\nExtends HdrToSdr to accept an arbitrary target ColorPrimaries, not just\nBT.709. When target_primaries == ColorPrimaries::Bt2020, the BT.2020 →\ntarget gamut matrix AND the OKLch soft-compress stages are skipped\nentirely — output is \"as lossless as physics allows\", with only the\ninherent BT.244\n[…]\nr_each_target_primaries — extreme-input safety\n    under each target\n  * property_simd_matches_scalar_under_arbitrary_target_primaries —\n    SIMD/scalar parity holds across every (source, target) pair",
          "is_bot": false,
          "headline": "feat(hdr): target_primaries on HdrToSdr — wide-gamut lossless output …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-21T22:06:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "14c7576cf191f6d990ff547f8afee9ddc8a6c25f",
          "body": "The bug\n=======\n`HdrToSdr::apply_strip` applied the BT.2020 -> BT.709 gamut matrix BEFORE\nthe BT.2446 Method A tone-map. That was wrong: ITU-R BT.2446-1 specifies\nthe curve in BT.2020 R'G'B' / Y'Cb'Cr', so its luma weights\n(0.2627 / 0.6780 / 0.0593) and YCbCr<->RGB coefficients are\nBT.2020-specific.\n[…]\nt and\nhdr-experimental feature sets, plus the e2e test under\n__hdr-e2e-test (requires `-p zenpixels-convert@0.2.15` to disambiguate\nthe workspace + transitive registry-zenpixels-convert@0.2.14 graph).",
          "is_bot": false,
          "headline": "fix(hdr): HdrToSdr pipeline order + arbitrary source primaries",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-21T10:32:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "52fd949811b04855e26d2b6b6841c787d493ad66",
          "body": "…mental\n\nPulls ITU-R BT.2446 Method A into the canonical HDR convert home next to\nthe existing CllMeasure primitives:\n\n- src/hdr/bt2446a.rs — concrete Bt2446A struct + scalar map_rgb (verbatim\n  from zentone/src/bt2446a.rs).\n- src/hdr/bt2446a_simd.rs — 16-wide magetypes kernel + POW24 BT.1886 EOTF\n \n[…]\n sensible SDR range,\n  source==target near-identity, knee sensitivity, multi-decade finiteness.\n\nNet: 33 new tests in the hdr submodule; 521 lib tests pass with\nhdr-experimental enabled (455 without).",
          "is_bot": false,
          "headline": "feat(hdr): extract Bt2446A + SoftCompress + HdrToSdr under hdr-experi…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-21T08:12:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "154a901d6828abc0bdd19603bada4aad736f23b3",
          "body": "…:measure (#54)\n\nThe CLL measurement surface lives at zenpixels_convert::hdr::measure now,\ngated behind a new `hdr-experimental` Cargo feature (default-off). Reflects\ntwo corrections to the previous commit:\n\n  1. Path: `measure` is HDR analysis; lives under `hdr::` rather than at\n     crate root. ze\n[…]\n 480 Mpix/s\n    histogram, unchanged from pre-gate measurement.\n\nCHANGELOG zenpixels-convert — added: surface now described as \"gated\nbehind hdr-experimental\". Path references updated to hdr::measure.",
          "is_bot": false,
          "headline": "refactor(hdr): gate measurement behind hdr-experimental, nest at hdr:…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-20T02:27:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b182bba7523afb21f004f32106566037a4a2522d",
          "body": "…trait, #54)\n\nThe measure_* API surface, LightLevelHistogram, LightLevelMethod, and the\nSIMD scan kernel migrate from zenpixels to zenpixels-convert. zenpixels\nbecomes purely structural HDR types (DiffuseWhite / ContentLightLevel\nstruct + new + DEFAULT_PERCENTILE + the deprecated 0.2.14 2-arg measur\n[…]\n_robust → measure for 0.3.0.\n\nThroughput unchanged across the move: 2.5-3.4 Gpix/s measure_max, 1.0-1.3\nGpix/s measure_max_smoothed, 470 Mpix/s measure_histogram (Ryzen 9 7950X,\n-C target-cpu=native).",
          "is_bot": false,
          "headline": "refactor(hdr): move CLL measurement to zenpixels-convert (CllMeasure …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-20T01:04:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c927288a3dbaf8bdd0947738f7ec2e63e90dfe69",
          "body": "…bin (#54)\n\nWalker previously returned the lower edge of the bin where the CDF first\ncrossed `p · total` — up to ~0.02 stops / ~2 % below the true percentile\nat HDR brightness (~13 nits at 1015 cd/m²). Now linearly interpolates in\nlog2 space within that bin:\n\n  fraction = (threshold - count_before) \n[…]\nonfirm the 1 MP dense case lands within ~1\nnit (vs ~13 with the floor walker). Existing percentile and measure_*\ntests pass without bound changes — the readout only ever moved towards\nthe literal max.",
          "is_bot": false,
          "headline": "refine(hdr): LightLevelHistogram::percentile interpolates within the …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-19T23:10:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b99d0645e2b3f415eb65225d92b7a3fc4b782629",
          "body": "…MaxCLL (#54)\n\nThe defect-tolerant entry point production HDR pipelines actually want.\nEquivalent to measure_percentile(p=DEFAULT_PERCENTILE), with DEFAULT_PERCENTILE\n= 0.9999 (the libplacebo / DaVinci Resolve / x265 / HDR10+ industry default).\nDrops the top 0.01% of pixels as the outlier budget, re\n[…]\nercentile across both\nreduction methods), defect rejection on 100k pixels with 1 stuck pixel,\nsparse-bright cliff (1-in-100 dropped), non-linear rejection, zero image,\nDEFAULT_PERCENTILE constant pin.",
          "is_bot": false,
          "headline": "feat(hdr): measure_robust + DEFAULT_PERCENTILE — recommended-default …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-19T23:02:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "76f02183dfe20244946903e7029a5f84471ab015",
          "body": "…(defect-tolerant, #54)\n\n3×1 horizontal box filter on the per-pixel max(R,G,B) (or BT.2020 luma)\nreduction, mirror-padded at row edges. Single stuck pixel at 10 000 cd/m²\nin a 0.005 cd/m² background reads as ~3 333 instead of 10 000; ≥3-pixel\nclusters preserved at full magnitude. Defect-tolerant alt\n[…]\nsuppression at 1/3, 3-cluster preservation at 1.0×,\n2-cluster at 2/3, MaxFALL parity with measure_max, mirror-pad at edges,\ndegenerate widths (w=1, w=2), luma method, zero image, non-linear\nrejection.",
          "is_bot": false,
          "headline": "feat(hdr): measure_max_smoothed — 3×1 horizontal box-filtered MaxCLL …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-19T22:39:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cd9f448471a5c484b163bcdc5cf84e6700a61644",
          "body": "…(#60)\n\nThe spec-conformant CLL reading (CTA-861.3 strict — literal MaxCLL +\narithmetic MaxFALL) is the hot path for HDR-aware encoders: runs on\nevery frame of every encode, no histogram needed. Previously `measure_max`\nbuilt the full 1024-bin log histogram just to call `.max()` and `.mean()`\non it,\n[…]\null results,\n  reproducer, libplacebo comparison.\n- CHANGELOG.md: zenpixels — added entry.\n\nLib tests: 246 → 250 pass (4 new). Clippy `-D warnings` clean under\nboth feature combos. no_std build clean.",
          "is_bot": false,
          "headline": "perf(hdr): SOTA measure_max — 2.5-3.4 Gpix/s, above libplacebo (#54) …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-19T19:28:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5a248ddf604a043df5a1780156ab89d93bc07a3f",
          "body": "…p) (#59)\n\nSIMD acceleration for `ContentLightLevel::measure_histogram` (and the\n`measure_max` / `measure_percentile` convenience methods that route\nthrough it), gated behind a new `simd` cargo feature. The scalar path\nstays the runtime fallback and the no-`simd`-feature build path.\n\nDesign:\n- Tiere\n[…]\n entry.\n\n246 lib tests pass (default features) / 246 with `--features simd`\n(no test-count change — same suite runs under both); clippy\n`-D warnings` clean under `--features simd`; no_std build clean.",
          "is_bot": false,
          "headline": "perf(hdr): SIMD measure_histogram kernel — ~1.7× scalar (#54 follow-u…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-19T19:07:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9cab557bf54dff7fa3badd853538cdcf0389eee9",
          "body": "…percentile (#54) (#58)\n\nReplaces the deprecated literal-max ContentLightLevel::measure with a\nproper histogram primitive. The redesigned issue #54 documented why a\nfixed-percentile API is the wrong answer: defect-driven outliers\n(stuck pixels, sensor noise, specular blowouts) want a percentile;\nnat\n[…]\n bin edges (within 0.5%); empty-input path;\nnon-Linear / non-f32 rejection.\n\n236 → 246 zenpixels lib tests pass (default features); 282 with\nall features. clippy -D warnings clean. no_std build clean.",
          "is_bot": false,
          "headline": "feat(hdr): histogram-based ContentLightLevel — spec-literal + opt-in …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-19T09:38:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a8e5ef7160d8f86d057990f7b203b9e4dd39c711",
          "body": "…(#57)\n\nThree production-readiness bugs from the zenpixels-convert audit, all in\nthe raw-bytes free-function path. The PixelBuffer (ext.rs) path was\nalready correctly guarded.\n\n1. assert_not_cmyk PANICS on caller-supplied CMYK descriptor (adapt.rs:80,\n   reached from adapt_for_encode*, convert_buffe\n[…]\n64-bit)\n- Three pre-existing #[should_panic] CMYK tests updated to assert the\n  typed CmykUnsupported error instead of the abort.\n\n448 → 455 zenpixels-convert lib tests pass. clippy -D warnings clean.",
          "is_bot": false,
          "headline": "fix(convert): typed errors instead of panics on raw-bytes path (#44) …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-19T08:04:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "82ba79db6620897e44d7038e92a3cfb58a20c4d5",
          "body": "… (#43) (#56)\n\nTwo production-readiness bugs from the zenpixels#43 audit, both\nfixable non-breakingly at the use site.\n\n1. PlaneDescriptor::plane_width / plane_height (planar.rs:299-309) used\n   ref_width.div_ceil(self.h_subsample as u32) — but h_subsample /\n   v_subsample are public fields, so a st\n[…]\nows)\n- simd_aligned_stride_saturates_and_does_not_wrap_via_align_up\n  (verifies the align-up step doesn't undo the saturation)\n\n236 → 240 zenpixels lib tests pass. clippy -D warnings clean. fmt clean.",
          "is_bot": false,
          "headline": "fix(planar+descriptor): div-by-zero panic + 32-bit silent under-alloc…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-19T07:48:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "799d4ee0fd867d45eb681937d5d23d815dfb0971",
          "body": "…p/icc",
          "is_bot": false,
          "headline": "feat(zenpixels): buffer-level relabel builders with_diffuse_white/cic…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T22:07:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c06d503a5c56da0de6ada3904aec434e44da9aad",
          "body": "…entone\n\nSame outlier-driven failure mode that got ContentLightLevel::measure\ndeprecated in 0.2.15: these three functions ship a global Reinhard\nv/(1+v) and a bare v · 2^stops clamp, neither display-adaptive (no\ndiffuse-white anchor, no peak luminance, no chroma correction). On a\n1000-nit HDR pixel \n[…]\nNGELOG QUEUED BREAKING\nCHANGES); zenpixels-convert version bumps 0.2.14 → 0.2.15.\n\nzentone's Bt2446A had two algorithm bugs (ρ_H exponent, G' matrix\ncoefficient) — fixed separately in zentone 270f7f5.",
          "is_bot": false,
          "headline": "deprecate(hdr): reinhard / exposure tonemaps in zenpixels-convert → z…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T21:43:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5f036f63027719386231e5ed5ebdceae6f06b53b",
          "body": null,
          "is_bot": false,
          "headline": "style: cargo fmt — wrap the cfg-based prod_label in bench_orient",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T10:50:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5a85e07566125d54c498d9f7fb00da9ed23d7f7",
          "body": "…mark compile/speed/size\n\n- orient module docs: 6 private-fn intra-doc links (transpose_*) -> code spans\n  (were dead links on docs.rs; 'public docs link to private item' warnings gone).\n- Cargo.toml: correct the false 'fast-transpose pulls archmage/magetypes' comment.\n  MEASURED (benchmarks/orient_\n[…]\ne fast-transpose default-on for 0.3.0.\n\nVerified: 32 suites pass, clippy -D warnings clean, no-ft + ft builds warning-free,\norient doc-link warnings gone, staged parity test passes under all-features.",
          "is_bot": false,
          "headline": "cleanup(orient): fix doc-links, correct fast-transpose comment, bench…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T10:47:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "208bded996420b9f360797d0f7c4a6fa9cbcb030",
          "body": "The literal-maximum MaxCLL it computes (absolute max over pixels of max(R,G,B))\nis outlier-sensitive: a single specular/noise pixel inflates MaxCLL and makes\ndisplays over-tone-map (dimming the image). Production HDR metadata uses a\npercentile (~99.99th). #[deprecated] + #[doc(hidden)] now; percenti\n[…]\ncement tracked in #54; literal-max method queued for 0.3.0 removal. MaxFALL\n(the mean) is unaffected, and there were no consumers — nothing breaks. Tests\nkeep exercising it under #[allow(deprecated)].",
          "is_bot": false,
          "headline": "deprecate(hdr)!: doc-hide ContentLightLevel::measure — release 0.2.15",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T08:26:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c2b8b372e3316f4a8b1c002ccd193cddf30abb90",
          "body": "…position",
          "is_bot": false,
          "headline": "docs(changelog): post-0.2.14 cleanup — date, done dedup, registry dis…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T07:48:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d5a8920afe94aca2971c93477dfde3a087eefb5",
          "body": "…y + legacy Plane\n\nPer review, narrow the #[non_exhaustive] set to the genuinely-extensible types\nand stop sealing fixed-spec data bags (the seal there is breakage risk for ~zero\nfuture-proofing — the Rect/Size carve-out).\n\n- Keep sealed: planar::{MultiPlaneImage, PlaneLayout}, buffer::InPlacePixels\n[…]\ne, REGISTRY, find_by_*} (allow(dead_code),\n  no consumers) and legacy planar::Plane (superseded by PlaneLayout + buffers,\n  no consumers). Both queued for 0.3.0 removal.\n\ncargo test green (29 suites).",
          "is_bot": false,
          "headline": "refine(api): trim seals to extensible types; doc(hidden) dead registr…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T06:36:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ee590cfe4cf54ce95971ab74c77e19d5359bc32a",
          "body": "bench_pq_anchor: RGB f32 → PQ16 @203 (anchored) and RGBA f32 → PQ16\n(alpha-preserving) across 256px/4096px/1080p.",
          "is_bot": false,
          "headline": "bench(hdr): zenbench coverage for anchored/alpha quantize_to",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T05:16:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ee13f680b1e1ca6f9a80f7e1667b295be8d4453",
          "body": "… S2)\n\nAnchor threading, alpha preservation, strided src/dst, the precise SIMD exact-ST\n2084 PQ kernel (round-trip ≤1), PixelBuffer output, and the HLG↔PQ refusal.",
          "is_bot": false,
          "headline": "docs(hdr): CHANGELOG for the anchored PQ encode + HLG↔PQ refusal (#45…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T05:07:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba9d964104ae55c31b9f13128f8f1c9eae03b274",
          "body": "…, PixelBuffer output; refuse HLG↔PQ\n\nThe #45 S2 absolute-luminance anchor, threaded through the PQ ConvertSteps and\nthe public quantize_to / pub(crate) quantize_into entries.\n\nKernels (convert_kernels.rs):\n- PQ kernels (u16+f32, encode+decode) use a vendored *precise* SIMD exact-ST 2084\n  transfer \n[…]\n\n  carries the diffuse_white anchor + target CICP onto the output.\n- quantize_into: no-alloc sibling, strided dst, pub(crate).\n\nTests updated for the HLG↔PQ refusal across the suite; full suite green.",
          "is_bot": false,
          "headline": "feat(hdr): anchored PQ encode — precise SIMD kernels, strided convert…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T05:07:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5ce98117dcd2ae49a43ca895939b1cba82f178f4",
          "body": "Move ConvertError out of the 0.3.0 queue into [0.2.14] (cargo-copter-verified\nfree); add the HDR/planar/registry/buffer struct seals; queue ColorAuthority\nfor 0.3.0 (2 measured match victims).",
          "is_bot": false,
          "headline": "docs(changelog): 0.2.14 seal sweep + ConvertError promotion",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T04:40:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ed9c7fe8b27a596ea5b5875a9b29819b1057a87",
          "body": "…iant\n\nPromoted from the 0.3.0 queue on cargo-copter evidence: sealing ConvertError\nproduced 0 E0004 regressions across zpc's published reverse-deps (a\nnon_exhaustive enum only breaks exhaustive matches lacking a '_' arm, and nobody\nmatches ConvertError that way). The seal being free, the Buffer var\n[…]\n, so a StrideTooSmall / InvalidDimensions layout\nerror keeps its real cause instead of being mislabeled AllocationFailed (OOM).\nClassification half of #52 (the trace-preservation half landed earlier).",
          "is_bot": false,
          "headline": "feat(error): ConvertError #[non_exhaustive] + Buffer(BufferError) var…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T04:40:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a0edf95095c13a2befd72c613dc1328a15417438",
          "body": "…tive]\n\nTolerated 0.2.x break — cargo-copter measured 0 victims across all 21 published\nzenpixels reverse-deps (nobody downstream struct-literals these; they use the\nconstructors). Sealed: hdr::{ContentLightLevel, MasteringDisplay},\nregistry::KnownColorSpace, planar::{MultiPlaneImage, PlaneDescripto\n[…]\ngrate;\nthe closure destructures already carry '..'). POD pixel types (Bgrx/Rgbx/\nGrayAlpha*) left open — struct-literal is their interface. ColorAuthority\ndeferred to 0.3.0 (2 measured match victims).",
          "is_bot": false,
          "headline": "feat(api): seal HDR/planar/registry/buffer data types as #[non_exhaus…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T04:40:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13d19b4e407fa595d16f41ca71489eb62e2d1731",
          "body": "…0.9.x)",
          "is_bot": false,
          "headline": "deps: widen moxcms to >=0.8.1,<0.10 (support crates.io 0.8.1 through …",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T03:22:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcbb4dd1dc956f2571e9563b73ff1bb4f82ffdbe",
          "body": "…uffer(BufferError) variant as a 0.3.0 breaking change (fixes the AllocationFailed mislabel) (#53)",
          "is_bot": false,
          "headline": "docs(zenpixels-convert): queue the ConvertError #[non_exhaustive] + B…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-18T02:18:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1a12bae6a3174c2f60a0ab5fce3bf00a6443b4c",
          "body": "…oundaries (map_err_at) (#52)\n\nThe cross-crate buffer constructors (PixelBuffer::{try_new,from_vec},\nPixelSlice::new) return At<BufferError>. Ten sites flattened that traced\nerror away:\n\n- 8 AllocationFailed sites (ext.rs x2, output.rs x5, hdr.rs x1) used\n  .map_err(|_| at!(ConvertError::AllocationF\n[…]\nr_format uses a generic Debug-only\nassociated error type (not an At<_>), so its at!+{e:?} is correct and was\nleft as-is.\n\nbuild/test/clippy/fmt green via run-heavy -p zenpixels-convert --all-features.",
          "is_bot": false,
          "headline": "fix(error): preserve zenpixels At<BufferError> trace across convert b…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-17T16:21:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "98a9a9b415eb4afa62f7ec7074f4e3d53cdcb312",
          "body": "…e (stride unit) + constants' full descriptors + accessors (insulated-dev usability test) (#51)",
          "is_bot": false,
          "headline": "docs(zenpixels): add the from_vec raw-bytes+stride constructor exampl…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-16T09:42:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7be53d635c249214b50407d82e87996623362b2f",
          "body": "zenpixels-convert set `readme = \"../README.md\"` (the combined workspace\nREADME), but that file is outside the package root and so was never packaged\n— crates.io showed no README for the crate. Add a focused, conversion-API\nREADME in the crate dir, point `readme = \"README.md\"`, and add `/README.md`\nt\n[…]\n). All examples/symbols verified against src/ (RowConverter, best_match,\nConvertIntent, ConvertOptions, PluggableCms/MoxCms, gamut/hdr/orient/pipeline\nre-exports). Markdown-only; no public API change.",
          "is_bot": false,
          "headline": "docs(zenpixels-convert): add README (crate had none on crates.io) (#50)",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-16T06:50:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cf4891946aec981382d971b12d1bb2d1eaa42a38",
          "body": "DiffuseWhite wraps f32 (no derived Eq), which had forced ColorContext to drop\nits 0.2.13 Eq — a removed-trait semver break flagged by cargo semver-checks.\nDiffuseWhite is new/unpublished, so give it a bit-exact PartialEq/Eq (a\nluminance anchor is never NaN/-0.0); ColorContext then keeps Eq. semver-checks\ndrops from 2 major failures to 1 (only the tolerated #[non_exhaustive]).",
          "is_bot": false,
          "headline": "fix(hdr): preserve ColorContext Eq via bit-exact DiffuseWhite",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-15T06:52:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c016be2ef645c5bda51212ba6381655fc2142da",
          "body": "…cessors. Closes #49",
          "is_bot": false,
          "headline": "docs(readme): complete the format-conversion example with verified ac…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-15T02:52:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58a1933e7173dfbb198c5c043ebc9f5fcea09b95",
          "body": "The use-case 'book' gating any public anchor-convert surface (per CLAUDE.md\nAPI policy). Classifies every HDR-convert step as auto (data-driven,\nlossless — e.g. anchor application) vs explicit (intent-driven, lossy —\ntone-map, gain-map reconstruct), writes user stories per proposed API/data\nstructure with a pub vs pub(crate) recommendation each, and concludes the\npublic surface is the *buffer-level auto* convert, not the byte-level\nexplicit one (so convert_buffer_with_anchor stays pub(crate)).",
          "is_bot": false,
          "headline": "docs(hdr): anchor & convert API — user stories + auto-convert taxonomy",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-14T22:25:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3d6521841450fee3af0d75b602e483ad9516a2c",
          "body": "…encodec emit model\n\nAnswers two design questions raised on review, after actually sweeping\n~/work for consumers:\n\n- 'should we add anything back when hdr is removed?' — No. A ~/work-wide\n  rip-grep shows HdrMetadata has zero consumers outside zenpixels (and its\n  snapshots); nobody reads OutputMeta\n[…]\n bundle paired with converted pixels via EncodeReady).\n\nDrops the deprecated-API usage from the module example; rewrites the hdr\nfield note and the CHANGELOG queued-break entry accordingly. Docs only.",
          "is_bot": false,
          "headline": "docs(output): ground OutputMetadata's HDR/ColorContext story in the z…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-14T07:36:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c3508b9bfa2e1b7132eaec457fad35b554b9423f",
          "body": "…ar-light contract\n\nmeasure decoded each f32 sample with from_ne_bytes and a hand-rolled\n3-channel max — neither vectorizable nor clean. Cast each row to &[f32]\nonce (sound under the PixelBuffer channel-alignment invariant) and reduce\nover fixed-size [f32; N] chunks via a const-generic helper shared\n[…]\nch the foundational crate doesn't depend\non. Arbitrary-format CLL = linearize first (zenpixels_convert), then\nmeasure. New strided test with a 1e9 padding sentinel proves padding bytes\nare never read.",
          "is_bot": false,
          "headline": "perf(hdr): vectorizable ContentLightLevel::measure; document its line…",
          "author_name": "Lilith River",
          "author_login": "lilith",
          "committed_at": "2026-06-14T07:27:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 21,
      "commits_last_year": 446,
      "latest_release_at": "2026-07-24T19:02:38Z",
      "latest_release_tag": "zenpixels-convert-v0.2.16",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 20,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 10.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 25,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "zenpixels",
          "exists": true,
          "license": "Apache-2.0 OR MIT",
          "keywords": [
            "codec",
            "descriptor",
            "format",
            "image",
            "pixel",
            "multimedia::images"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/zenpixels",
          "is_deprecated": false,
          "latest_version": "0.2.16",
          "repository_url": "https://github.com/imazen/zenpixels",
          "versions_count": 15,
          "total_downloads": 41237,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 10295,
          "first_published_at": "2026-03-06T05:32:40.889278Z",
          "latest_published_at": "2026-07-24T19:02:48.595048Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "zenpixels-convert",
          "exists": true,
          "license": "Apache-2.0 OR MIT",
          "keywords": [
            "codec",
            "conversion",
            "image",
            "pixel",
            "srgb",
            "multimedia::images"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/zenpixels-convert",
          "is_deprecated": false,
          "latest_version": "0.2.16",
          "repository_url": "https://github.com/imazen/zenpixels",
          "versions_count": 16,
          "total_downloads": 19220,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 5362,
          "first_published_at": "2026-03-06T05:32:47.839627Z",
          "latest_published_at": "2026-07-24T19:03:06.516886Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 1,
      "watchers": 1,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 11
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "justfile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "Cargo.toml",
        "apidoc/Cargo.toml",
        "benchmarks/transpose-shootout/Cargo.toml",
        "scripts/icc-gen/Cargo.toml",
        "zenpixels-convert/Cargo.toml",
        "zenpixels/Cargo.toml"
      ],
      "largest_source_bytes": 123146,
      "source_files_sampled": 108,
      "oversized_source_files": 12,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 7162
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "apidoc/Cargo.toml",
        "zenpixels-convert/Cargo.toml",
        "zenpixels/Cargo.toml"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 9,
        "malicious_count": 0,
        "assessed_package": "crates:zenpixels@0.2.16",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates"
      ],
      "dependencies": [
        {
          "name": "zenutils-apidoc",
          "manifest": "apidoc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "zenpixels",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "linear-srgb",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.6.12"
        },
        {
          "name": "bytemuck",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.21"
        },
        {
          "name": "rgb",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.8"
        },
        {
          "name": "garb",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2.8"
        },
        {
          "name": "archmage",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9.26"
        },
        {
          "name": "libm",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.2"
        },
        {
          "name": "magetypes",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9.26"
        },
        {
          "name": "paste",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.0.15"
        },
        {
          "name": "once_cell",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.21.4"
        },
        {
          "name": "lz4_flex",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.13.1"
        },
        {
          "name": "whereat",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.5"
        },
        {
          "name": "moxcms",
          "manifest": "zenpixels-convert/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": ">=0.8.1, <0.10"
        },
        {
          "name": "bytemuck",
          "manifest": "zenpixels/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.21"
        },
        {
          "name": "rgb",
          "manifest": "zenpixels/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.8"
        },
        {
          "name": "imgref",
          "manifest": "zenpixels/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.12"
        },
        {
          "name": "whereat",
          "manifest": "zenpixels/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.5"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "archmage",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "archmage",
            "direct": true,
            "version": "0.9.26",
            "ecosystem": "crates"
          },
          {
            "name": "bytemuck",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "bytemuck",
            "direct": true,
            "version": "1.25.0",
            "ecosystem": "crates"
          },
          {
            "name": "garb",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "garb",
            "direct": true,
            "version": "0.2.8",
            "ecosystem": "crates"
          },
          {
            "name": "imgref",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "imgref",
            "direct": true,
            "version": "1.12.2",
            "ecosystem": "crates"
          },
          {
            "name": "libm",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "libm",
            "direct": true,
            "version": "0.2.16",
            "ecosystem": "crates"
          },
          {
            "name": "linear-srgb",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "linear-srgb",
            "direct": true,
            "version": "0.6.12",
            "ecosystem": "crates"
          },
          {
            "name": "lz4_flex",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "lz4_flex",
            "direct": true,
            "version": "0.13.1",
            "ecosystem": "crates"
          },
          {
            "name": "magetypes",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "magetypes",
            "direct": true,
            "version": "0.9.26",
            "ecosystem": "crates"
          },
          {
            "name": "moxcms",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "moxcms",
            "direct": true,
            "version": "0.8.1",
            "ecosystem": "crates"
          },
          {
            "name": "moxcms",
            "direct": true,
            "version": "0.9.0",
            "ecosystem": "crates"
          },
          {
            "name": "once_cell",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "once_cell",
            "direct": true,
            "version": "1.21.4",
            "ecosystem": "crates"
          },
          {
            "name": "paste",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "paste",
            "direct": true,
            "version": "1.0.15",
            "ecosystem": "crates"
          },
          {
            "name": "rgb",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rgb",
            "direct": true,
            "version": "0.8.53",
            "ecosystem": "crates"
          },
          {
            "name": "whereat",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "whereat",
            "direct": true,
            "version": "0.1.5",
            "ecosystem": "crates"
          },
          {
            "name": "anstream",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "crates"
          },
          {
            "name": "anstyle",
            "direct": false,
            "version": "1.0.14",
            "ecosystem": "crates"
          },
          {
            "name": "anstyle-parse",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "crates"
          },
          {
            "name": "anstyle-query",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "crates"
          },
          {
            "name": "anstyle-wincon",
            "direct": false,
            "version": "3.0.11",
            "ecosystem": "crates"
          },
          {
            "name": "approx",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "crates"
          },
          {
            "name": "archmage-macros",
            "direct": false,
            "version": "0.9.26",
            "ecosystem": "crates"
          },
          {
            "name": "autocfg",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "crates"
          },
          {
            "name": "bitflags",
            "direct": false,
            "version": "2.13.0",
            "ecosystem": "crates"
          },
          {
            "name": "block-buffer",
            "direct": false,
            "version": "0.12.1",
            "ecosystem": "crates"
          },
          {
            "name": "by_address",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "crates"
          },
          {
            "name": "bytemuck_derive",
            "direct": false,
            "version": "1.10.2",
            "ecosystem": "crates"
          },
          {
            "name": "cc",
            "direct": false,
            "version": "1.2.64",
            "ecosystem": "crates"
          },
          {
            "name": "cc",
            "direct": false,
            "version": "1.2.65",
            "ecosystem": "crates"
          },
          {
            "name": "cfg-if",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "crates"
          },
          {
            "name": "clap",
            "direct": false,
            "version": "4.6.1",
            "ecosystem": "crates"
          },
          {
            "name": "clap_builder",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "crates"
          },
          {
            "name": "clap_derive",
            "direct": false,
            "version": "4.6.1",
            "ecosystem": "crates"
          },
          {
            "name": "clap_lex",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "crates"
          },
          {
            "name": "cmake",
            "direct": false,
            "version": "0.1.58",
            "ecosystem": "crates"
          },
          {
            "name": "colorchoice",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "crates"
          },
          {
            "name": "console",
            "direct": false,
            "version": "0.15.11",
            "ecosystem": "crates"
          },
          {
            "name": "const-oid",
            "direct": false,
            "version": "0.10.2",
            "ecosystem": "crates"
          },
          {
            "name": "cpufeatures",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "crates"
          },
          {
            "name": "crunchy",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "crates"
          },
          {
            "name": "crypto-common",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "crates"
          },
          {
            "name": "digest",
            "direct": false,
            "version": "0.11.3",
            "ecosystem": "crates"
          },
          {
            "name": "dunce",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "crates"
          },
          {
            "name": "encode_unicode",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "crates"
          },
          {
            "name": "errno",
            "direct": false,
            "version": "0.3.14",
            "ecosystem": "crates"
          },
          {
            "name": "fast-srgb8",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "crates"
          },
          {
            "name": "fast_transpose",
            "direct": false,
            "version": "0.2.7",
            "ecosystem": "crates"
          },
          {
            "name": "find-msvc-tools",
            "direct": false,
            "version": "0.1.9",
            "ecosystem": "crates"
          },
          {
            "name": "foreign-types",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "crates"
          },
          {
            "name": "foreign-types-macros",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "crates"
          },
          {
            "name": "foreign-types-shared",
            "direct": false,
            "version": "0.3.1",
            "ecosystem": "crates"
          },
          {
            "name": "fs4",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "crates"
          },
          {
            "name": "getrandom",
            "direct": false,
            "version": "0.3.4",
            "ecosystem": "crates"
          },
          {
            "name": "half",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "half",
            "direct": false,
            "version": "2.7.1",
            "ecosystem": "crates"
          },
          {
            "name": "hashbag",
            "direct": false,
            "version": "0.1.13",
            "ecosystem": "crates"
          },
          {
            "name": "heck",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "crates"
          },
          {
            "name": "hybrid-array",
            "direct": false,
            "version": "0.4.12",
            "ecosystem": "crates"
          },
          {
            "name": "is_terminal_polyfill",
            "direct": false,
            "version": "1.70.2",
            "ecosystem": "crates"
          },
          {
            "name": "itoa",
            "direct": false,
            "version": "1.0.18",
            "ecosystem": "crates"
          },
          {
            "name": "jobserver",
            "direct": false,
            "version": "0.1.34",
            "ecosystem": "crates"
          },
          {
            "name": "lcms2",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "lcms2",
            "direct": false,
            "version": "6.1.1",
            "ecosystem": "crates"
          },
          {
            "name": "lcms2-sys",
            "direct": false,
            "version": "4.0.6",
            "ecosystem": "crates"
          },
          {
            "name": "libc",
            "direct": false,
            "version": "0.2.186",
            "ecosystem": "crates"
          },
          {
            "name": "linux-raw-sys",
            "direct": false,
            "version": "0.12.1",
            "ecosystem": "crates"
          },
          {
            "name": "memchr",
            "direct": false,
            "version": "2.8.2",
            "ecosystem": "crates"
          },
          {
            "name": "ntapi",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "crates"
          },
          {
            "name": "num-integer",
            "direct": false,
            "version": "0.1.46",
            "ecosystem": "crates"
          },
          {
            "name": "num-traits",
            "direct": false,
            "version": "0.2.19",
            "ecosystem": "crates"
          },
          {
            "name": "objc2-core-foundation",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "crates"
          },
          {
            "name": "objc2-io-kit",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "crates"
          },
          {
            "name": "once_cell_polyfill",
            "direct": false,
            "version": "1.70.2",
            "ecosystem": "crates"
          },
          {
            "name": "palette",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "palette",
            "direct": false,
            "version": "0.7.6",
            "ecosystem": "crates"
          },
          {
            "name": "palette_derive",
            "direct": false,
            "version": "0.7.6",
            "ecosystem": "crates"
          },
          {
            "name": "pkg-config",
            "direct": false,
            "version": "0.3.33",
            "ecosystem": "crates"
          },
          {
            "name": "proc-macro2",
            "direct": false,
            "version": "1.0.106",
            "ecosystem": "crates"
          },
          {
            "name": "public-api",
            "direct": false,
            "version": "0.52.1",
            "ecosystem": "crates"
          },
          {
            "name": "pxfm",
            "direct": false,
            "version": "0.1.29",
            "ecosystem": "crates"
          },
          {
            "name": "quote",
            "direct": false,
            "version": "1.0.45",
            "ecosystem": "crates"
          },
          {
            "name": "r-efi",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "crates"
          },
          {
            "name": "rustdoc-types",
            "direct": false,
            "version": "0.57.3",
            "ecosystem": "crates"
          },
          {
            "name": "rustix",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "crates"
          },
          {
            "name": "rustup-toolchain",
            "direct": false,
            "version": "0.1.10",
            "ecosystem": "crates"
          },
          {
            "name": "rustversion",
            "direct": false,
            "version": "1.0.22",
            "ecosystem": "crates"
          },
          {
            "name": "safe_unaligned_simd",
            "direct": false,
            "version": "0.2.5",
            "ecosystem": "crates"
          },
          {
            "name": "serde",
            "direct": false,
            "version": "1.0.228",
            "ecosystem": "crates"
          },
          {
            "name": "serde_core",
            "direct": false,
            "version": "1.0.228",
            "ecosystem": "crates"
          },
          {
            "name": "serde_derive",
            "direct": false,
            "version": "1.0.228",
            "ecosystem": "crates"
          },
          {
            "name": "serde_json",
            "direct": false,
            "version": "1.0.150",
            "ecosystem": "crates"
          },
          {
            "name": "sha2",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "sha2",
            "direct": false,
            "version": "0.11.0",
            "ecosystem": "crates"
          },
          {
            "name": "shlex",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "crates"
          },
          {
            "name": "similar",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "crates"
          },
          {
            "name": "similar-asserts",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "crates"
          },
          {
            "name": "snapshot-testing",
            "direct": false,
            "version": "0.1.8",
            "ecosystem": "crates"
          },
          {
            "name": "strength_reduce",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "crates"
          },
          {
            "name": "strsim",
            "direct": false,
            "version": "0.11.1",
            "ecosystem": "crates"
          },
          {
            "name": "syn",
            "direct": false,
            "version": "2.0.117",
            "ecosystem": "crates"
          },
          {
            "name": "syn",
            "direct": false,
            "version": "2.0.118",
            "ecosystem": "crates"
          },
          {
            "name": "sysinfo",
            "direct": false,
            "version": "0.36.1",
            "ecosystem": "crates"
          },
          {
            "name": "terminal_size",
            "direct": false,
            "version": "0.4.4",
            "ecosystem": "crates"
          },
          {
            "name": "thiserror",
            "direct": false,
            "version": "2.0.18",
            "ecosystem": "crates"
          },
          {
            "name": "thiserror-impl",
            "direct": false,
            "version": "2.0.18",
            "ecosystem": "crates"
          },
          {
            "name": "transpose",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "crates"
          },
          {
            "name": "typenum",
            "direct": false,
            "version": "1.20.1",
            "ecosystem": "crates"
          },
          {
            "name": "unicode-ident",
            "direct": false,
            "version": "1.0.24",
            "ecosystem": "crates"
          },
          {
            "name": "utf8parse",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "crates"
          },
          {
            "name": "wasip2",
            "direct": false,
            "version": "1.0.4+wasi-0.2.12",
            "ecosystem": "crates"
          },
          {
            "name": "winapi",
            "direct": false,
            "version": "0.3.9",
            "ecosystem": "crates"
          },
          {
            "name": "winapi-i686-pc-windows-gnu",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "crates"
          },
          {
            "name": "winapi-x86_64-pc-windows-gnu",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "crates"
          },
          {
            "name": "winarm-cpufeatures",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "crates"
          },
          {
            "name": "windows",
            "direct": false,
            "version": "0.61.3",
            "ecosystem": "crates"
          },
          {
            "name": "windows-collections",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "crates"
          },
          {
            "name": "windows-core",
            "direct": false,
            "version": "0.61.2",
            "ecosystem": "crates"
          },
          {
            "name": "windows-future",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "crates"
          },
          {
            "name": "windows-implement",
            "direct": false,
            "version": "0.60.2",
            "ecosystem": "crates"
          },
          {
            "name": "windows-interface",
            "direct": false,
            "version": "0.59.3",
            "ecosystem": "crates"
          },
          {
            "name": "windows-link",
            "direct": false,
            "version": "0.1.3",
            "ecosystem": "crates"
          },
          {
            "name": "windows-link",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "crates"
          },
          {
            "name": "windows-numerics",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "crates"
          },
          {
            "name": "windows-result",
            "direct": false,
            "version": "0.3.4",
            "ecosystem": "crates"
          },
          {
            "name": "windows-strings",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "crates"
          },
          {
            "name": "windows-sys",
            "direct": false,
            "version": "0.59.0",
            "ecosystem": "crates"
          },
          {
            "name": "windows-sys",
            "direct": false,
            "version": "0.61.2",
            "ecosystem": "crates"
          },
          {
            "name": "windows-targets",
            "direct": false,
            "version": "0.52.6",
            "ecosystem": "crates"
          },
          {
            "name": "windows-threading",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "crates"
          },
          {
            "name": "windows_aarch64_gnullvm",
            "direct": false,
            "version": "0.52.6",
            "ecosystem": "crates"
          },
          {
            "name": "windows_aarch64_msvc",
            "direct": false,
            "version": "0.52.6",
            "ecosystem": "crates"
          },
          {
            "name": "windows_i686_gnu",
            "direct": false,
            "version": "0.52.6",
            "ecosystem": "crates"
          },
          {
            "name": "windows_i686_gnullvm",
            "direct": false,
            "version": "0.52.6",
            "ecosystem": "crates"
          },
          {
            "name": "windows_i686_msvc",
            "direct": false,
            "version": "0.52.6",
            "ecosystem": "crates"
          },
          {
            "name": "windows_x86_64_gnu",
            "direct": false,
            "version": "0.52.6",
            "ecosystem": "crates"
          },
          {
            "name": "windows_x86_64_gnullvm",
            "direct": false,
            "version": "0.52.6",
            "ecosystem": "crates"
          },
          {
            "name": "windows_x86_64_msvc",
            "direct": false,
            "version": "0.52.6",
            "ecosystem": "crates"
          },
          {
            "name": "wit-bindgen",
            "direct": false,
            "version": "0.57.1",
            "ecosystem": "crates"
          },
          {
            "name": "zenbench",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "zenbench",
            "direct": false,
            "version": "0.1.8",
            "ecosystem": "crates"
          },
          {
            "name": "zerocopy",
            "direct": false,
            "version": "0.8.52",
            "ecosystem": "crates"
          },
          {
            "name": "zerocopy-derive",
            "direct": false,
            "version": "0.8.52",
            "ecosystem": "crates"
          },
          {
            "name": "zmij",
            "direct": false,
            "version": "1.0.21",
            "ecosystem": "crates"
          },
          {
            "name": "zune-core",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "crates"
          },
          {
            "name": "zune-image",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "crates"
          },
          {
            "name": "zune-imageprocs",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "crates"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 158,
        "direct_count": 27,
        "indirect_count": 131
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 32,
        "open_issues": 9,
        "closed_ratio": 0.7,
        "closed_issues": 21,
        "closed_unmerged_prs": 7
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "lilith",
          "commits": 445,
          "avatar_url": "https://avatars.githubusercontent.com/u/107935?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "icc-profiles.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 0,
            "reason": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/17 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "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 23 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": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "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": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "640dcedf1ee3f828c66dd19c0a08f08a68da9685",
        "ran_at": "2026-07-25T17:18:46Z",
        "aggregate_score": 3.8,
        "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-24T19:01:40Z",
      "oldest_open_prs": [
        {
          "number": 55,
          "created_at": "2026-06-19T00:54:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 62,
          "created_at": "2026-06-28T03:23:53Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-24T10:19:02Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 23,
          "created_at": "2026-04-22T23:00:24Z",
          "last_comment_at": "2026-04-26T06:10:29Z",
          "last_comment_author": "lilith"
        },
        {
          "number": 36,
          "created_at": "2026-06-04T20:43:30Z",
          "last_comment_at": "2026-06-11T06:37:48Z",
          "last_comment_author": "lilith"
        },
        {
          "number": 39,
          "created_at": "2026-06-11T05:41:53Z",
          "last_comment_at": "2026-06-17T16:00:28Z",
          "last_comment_author": "lilith"
        },
        {
          "number": 40,
          "created_at": "2026-06-11T09:49:44Z",
          "last_comment_at": "2026-06-14T06:57:04Z",
          "last_comment_author": "lilith"
        },
        {
          "number": 42,
          "created_at": "2026-06-13T22:53:08Z",
          "last_comment_at": "2026-06-17T16:00:26Z",
          "last_comment_author": "lilith"
        },
        {
          "number": 45,
          "created_at": "2026-06-14T00:19:39Z",
          "last_comment_at": "2026-06-17T16:00:27Z",
          "last_comment_author": "lilith"
        },
        {
          "number": 64,
          "created_at": "2026-07-15T20:53:16Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 69,
          "created_at": "2026-07-15T22:59:27Z",
          "last_comment_at": "2026-07-24T10:21:17Z",
          "last_comment_author": "lilith"
        },
        {
          "number": 71,
          "created_at": "2026-07-24T09:14:44Z",
          "last_comment_at": "2026-07-24T10:21:24Z",
          "last_comment_author": "lilith"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/imazen/zenpixels",
    "host": "github.com",
    "name": "zenpixels",
    "owner": "imazen"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 58,
      "inputs": {
        "security": 50,
        "vitality": 87,
        "community": 35,
        "governance": 57,
        "engineering": 55
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 87,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "commits_last_year": 446,
              "human_commit_share": 0.99,
              "days_since_last_push": 0,
              "active_weeks_last_year": 20
            },
            "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": "20/52 weeks with commits",
                "points": 13.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 20
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "446 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 446
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 23 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": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 21,
              "latest_release_tag": "zenpixels-convert-v0.2.16",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 10.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "21 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "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 ~10.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 10.6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "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": 35,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 1,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "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": "good",
            "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": 70,
            "inputs": {
              "packages": [
                "zenpixels",
                "zenpixels-convert"
              ],
              "dependents": null,
              "ecosystems": "crates",
              "total_downloads": 60457,
              "monthly_downloads": 15657
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "15,657 downloads/month across crates",
                "points": 55.9,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 15657,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "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": 57,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "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 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "merged_prs": 32,
              "open_issues": 9,
              "closed_issues": 21,
              "issue_closed_ratio": 0.7,
              "closed_unmerged_prs": 7
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "70% of issues closed",
                "points": 32.7,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 70
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "32/39 decided PRs merged",
                "points": 31.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 32,
                      "decided": 39
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/17 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 67,
            "inputs": {
              "followers": 47,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "imazen",
              "public_repos": 220,
              "account_age_days": 5177
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "47 followers of imazen",
                "points": 12.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 47,
                      "login": "imazen"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "220 public repos, account ~14 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 220
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 14
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "zenpixels",
                "zenpixels-convert"
              ],
              "ecosystems": "crates",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "2 package(s) on crates",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 2,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "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": "16 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 16
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 55,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "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": 25,
                "status": "met",
                "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": "moderate",
        "name": "Security",
        "value": 50,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 38,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3.8
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/17 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "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 23 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 not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the crates:zenpixels@0.2.16 runtime dependency closure — what installing the published package pulls in — 9 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "crates:zenpixels@0.2.16",
                  "assessed": 9
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 9,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 9,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 3
            },
            "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": "good",
        "name": "AI Readiness",
        "value": 70,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 7162
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "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": "99 of 99 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 99,
                      "sampled": 99
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "justfile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "Cargo.toml",
                "apidoc/Cargo.toml",
                "benchmarks/transpose-shootout/Cargo.toml",
                "scripts/icc-gen/Cargo.toml",
                "zenpixels-convert/Cargo.toml",
                "zenpixels/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "justfile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "justfile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Rust (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "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": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 94,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 123146,
              "source_files_sampled": 108,
              "oversized_source_files": 12
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "12/108 source files over 60KB",
                "points": 48.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 108,
                      "oversized": 12
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch crates package 'zenpixels-apidoc' from its registry"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T17:18:56.750683Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/i/imazen/zenpixels.svg",
  "full_name": "imazen/zenpixels",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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 Statistikencrates.io.