Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 2.3.1 · 2026-07-31 10:05 UTC

state-alchemists / zrb

Your Automation Powerhouse

PythonSin licencia detectada★ 17 estrellas⑂ 1 forkdesde ene 2023Ver en GitHub ↗
TipoServicio de redServidor MCPBibliotecacómo se determina

state-alchemists/zrb tiene un índice de salud de 80 sobre 100, lo que lo sitúa en la banda Excelente. Su puntuación más alta es Vitality (95/100) y la más baja, Community & Adoption (38/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

80
global / 100
Excelente

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala estandarizada de 1 a 100. El resultado global parte de su media ponderada, calibrada contra la distribución del registro público para que las bandas tengan significado percentil; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe un límite «En riesgo» de 34.

80
Excepcional93-100El nivel más alto del registro (≈ el 5% superior); cumple prácticamente todos los criterios evaluados
Excelente80-92Sólido en todos los frentes; carencias menores
Bueno65-79Saludable; carencias limitadas y manejables
Moderado50-64Aceptable con carencias notables; se recomienda revisión
Débil35-49Debilidades sustanciales en varias áreas
En riesgo20-34Debilidades significativas; su adopción exige cautela
Crítico1-19Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

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

El resultado global ponderado 68 se calibra a 80 en la escala publicada del índice (calibración del registro 2026-08-02).

Titularidad

state-alchemistsOrganización
20 seguidores14 repositorios públicosdesde mar 2019

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
PyPIzrb2.51.06736647hace 0 díasautomationtask-runnercode-generatormonorepolow-code

Métricas por categoría

Vitalidad

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

95Excepcional · 21% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
36/36Cadencia de commits — 52/52 semanas con commits
18/18Volumen de commits — 1558 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year1558
human_commit_share1
days_since_last_push0
active_weeks_last_year52
Cómo se puntúa
16.2/27Publica versiones — 90 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 0 días
27/27Cadencia de publicación — una versión cada ~2,3 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count90
latest_release_tag2.51.0
releases_from_tags
days_since_latest_release0
mean_days_between_releases2,3
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

38Débil · 17% del índice global
Cómo se puntúa
19.5/60Estrellas — 17 estrellas
0/25Forks — 1 forks
0/15Observadores — 2 observadores
Datos de entrada utilizados
forks1
stars17
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
0/22.5Licencia — no se detectó ningún archivo de licencia
0/18Guía CONTRIBUTING
0/13.5Código de conducta
7.2/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_licenseno
readme_badges
has_contributingno
has_issue_template
has_code_of_conductno
readme_badge_services
has_pull_request_template
Cómo se puntúa
51/80Descargas mensuales — 6736 descargas/mes en pypi
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packageszrb
dependents
ecosystemspypi
total_downloads
monthly_downloads6736
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

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

59Moderado · 23% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
4.1/13.5Amplitud de contribuyentes — 3 contribuyentes
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Datos de entrada utilizados
bus_factor1
contributors_sampled3
top_contributor_share0,999
Cómo se puntúa
36.8/42Resolución de issues — 88% de issues cerradas
27.4/30Aceptación de PR — 390/427 PR decididos fusionados
0/13Newcomer PR acceptance — ningún PR de un contribuyente primerizo decidido en 30 d
0/15OpenSSF Scorecard: Code-Review — Found 0/11 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs390
open_issues1
closed_issues7
prs_merged_7d
prs_decided_7d
prs_merged_30d
prs_decided_30d
issue_closed_ratio0,875
closed_unmerged_prs37
first_time_authors_30d
first_time_prs_merged_30d
first_time_prs_decided_30d
Excluidos de la puntuación (sin datos o no aplicable): newcomer_pr_acceptance. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
9.5/25Alcance del propietario — 20 seguidores de state-alchemists
20.6/25Trayectoria — 14 repos públicos, cuenta de ~7 años
Datos de entrada utilizados
followers20
owner_typeOrganization
is_verified
owner_loginstate-alchemists
public_repos14
account_age_days2679
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en pypi
35/35Recencia de publicación — última publicación hace 0 días
20/20Historial de versiones — 647 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packageszrb
ecosystemspypi
any_deprecatedno
min_days_since_publish0

Calidad de Ingeniería

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

86Excelente · 19% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 3 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .flake8
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 6 out of 6 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://pypi.org/project/zrb/
10/10Descripción del repositorio
10/10Topics — 4 topics
0/10Wiki
Datos de entrada utilizados
topicscode-generator, task-runner, automation, llm
has_wikino
homepagehttps://pypi.org/project/zrb/
has_readme
has_docs_dir
has_description

Seguridad

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

58Moderado · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 6 out of 6 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/11 approved changesets -- score normalized to 0
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Licencia — license file not detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
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 — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,7
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
0/25Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories2
affected_packages1
assessed_packages207
unassessed_packages0
affected_by_severitycritical 1
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Dependencias indirectas libres de avisos conocidos, Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejaron 207 dependencias resueltas con OSV. Este repositorio no publica ningún paquete que el índice resuelva, por lo que se evaluó en su lugar el grafo de dependencias del repositorio. Ese grafo mezcla fijaciones de desarrollo y prueba con las dependencias distribuidas, de modo que solo se puntúan las dependencias declaradas en tiempo de ejecución; los hallazgos transitivos se informan como contexto y quedan excluidos de la puntuación. No se analiza la alcanzabilidad.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Tiene un peso deliberadamente pequeño (4%): las herramientas para agentes son una señal real de mantenimiento, pero un repositorio sin ninguna puede alcanzar igualmente 100/100.

62Moderado · 4% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
17.6/40Historial de commits legible — 33 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,33
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes15.979
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .flake8
11/11Verificación estática de tipos — pyrightconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilespoetry.lock
has_dockerfile
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configspyrightconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
27/45Código verificable por tipos — Python con configuración de verificación de tipos (pyrightconfig.json)
54.9/55Tamaños de archivo manejables — 1/716 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languagePython
largest_source_bytes3.164.970
source_files_sampled716
oversized_source_files1
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signal
api_schema_files

Datos clave

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

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • deps.dev does not index pypi:zrb@2.51.0; advisories assessed against the repository dependency graph instead

Más detalle

OpenSSF Scorecard 4.7 / 10
4.7agregado

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests6 out of 6 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/11 approved changesets -- score normalized to 0
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging 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
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
Dependencias directas 26
RegistroPaqueteRestricción de versiónManifiesto
PyPIpython-dotenv>=1.1.1,<2.0.0pyproject.toml
PyPIbeautifulsoup4>=4.14.2,<5.0.0pyproject.toml
PyPIpdfplumber>=0.11.7,<0.12.0pyproject.toml
PyPIfastapi>=0.136.3,<0.137.0pyproject.toml
PyPIjinja2>=3.1.0,<4.0.0pyproject.toml
PyPIPyJWT>=2.13.0,<3.0.0pyproject.toml
PyPIulid-py>=1.1.0,<2.0.0pyproject.toml
PyPIpsutil>=7.0.0,<8.0.0pyproject.toml
PyPIpydantic-settings>=2.14.2pyproject.toml
PyPIpydantic-ai-slim>=2.8.0,<2.9.0pyproject.toml
PyPIopenai>=2.29.0pyproject.toml
PyPIprompt-toolkit>=3pyproject.toml
PyPIrich>=13pyproject.toml
PyPImcp>=1.28.1,<2.0pyproject.toml
PyPIrequests>=2.33.0,<3.0.0pyproject.toml
PyPItiktoken>=0.12.0,<0.13.0pyproject.toml
PyPImarkdownify>=1.2.2,<2.0.0pyproject.toml
PyPIpyyaml>=6.0.3,<7.0.0pyproject.toml
PyPIpyperclip>=1.11.0,<2.0.0pyproject.toml
PyPIPillow>=12.3.0pyproject.toml
PyPIpygments>=2.20.0pyproject.toml
PyPIcryptography>=48.0.1pyproject.toml
PyPIpython-multipart>=0.0.30pyproject.toml
PyPIstarlette>=1.3.1pyproject.toml
PyPIurllib3>=2.7.0pyproject.toml
PyPIidna>=3.15pyproject.toml
Todas las dependencias 207

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 26 paquetes directos y 181 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
PyPIbeautifulsoup44.15.0directa
PyPIcryptography49.0.0directa
PyPIfastapi0.136.3directa
PyPIidna3.18directa
PyPIjinja23.1.6directa
PyPImarkdownify1.2.2directa
PyPImcp1.28.1directa
PyPIopenai2.43.0directa
PyPIpdfplumber0.11.10directa
PyPIpillow12.3.0directa
PyPIprompt-toolkit3.0.52directa
PyPIpsutil7.2.2directa
PyPIpydantic-ai-slim2.8.0directa
PyPIpydantic-settings2.14.2directa
PyPIpygments2.20.0directa
PyPIpyjwt2.13.0directa
PyPIpyperclip1.11.0directa
PyPIpython-dotenv1.2.2directa
PyPIpython-multipart0.0.32directa
PyPIpyyaml6.0.3directa
PyPIrequests2.34.2directa
PyPIrich15.0.0directa
PyPIstarlette1.3.1directa
PyPItiktoken0.12.0directa
PyPIulid-py1.1.0directa
PyPIurllib32.7.0directa
PyPIaiofile3.11.1indirecta
PyPIaiohappyeyeballs2.6.2indirecta
PyPIaiohttp3.14.1indirecta
PyPIaiolimiter1.2.1indirecta
PyPIaiosignal1.4.0indirecta
PyPIannotated-doc0.0.4indirecta
PyPIannotated-types0.7.0indirecta
PyPIanthropic0.111.0indirecta
PyPIanyio4.14.0indirecta
PyPIattrs26.1.0indirecta
PyPIauthlib1.7.2indirecta
PyPIautopep82.3.2indirecta
PyPIbackports-tarfile1.2.0indirecta
PyPIbcrypt5.0.0indirecta
PyPIbeartype0.22.9indirecta
PyPIblack26.5.1indirecta
PyPIboto31.43.34indirecta
PyPIbotocore1.43.34indirecta
PyPIbuild1.5.0indirecta
PyPIcachetools7.1.4indirecta
PyPIcaio0.9.25indirecta
PyPIcertifi2026.6.17indirecta
PyPIcffi2.0.0indirecta
PyPIcharset-normalizer3.4.7indirecta
PyPIchromadb1.5.9indirecta
PyPIclick8.4.1indirecta
PyPIcohere7.0.4indirecta
PyPIcolorama0.4.6indirecta
PyPIcoverage7.14.2indirecta
PyPIdetect-installer0.1.0indirecta
PyPIdistro1.9.0indirecta
PyPIdnspython2.8.0indirecta
PyPIdocstring-parser0.18.0indirecta
PyPIdurationpy0.10indirecta
PyPIemail-validator2.3.0indirecta
PyPIeval-type-backport0.4.0indirecta
PyPIexceptiongroup1.3.1indirecta
PyPIfastapi-cli0.0.27indirecta
PyPIfastapi-cloud-cli0.20.0indirecta
PyPIfastar0.11.0indirecta
PyPIfastavro1.12.2indirecta
PyPIfastmcp-slim3.4.2indirecta
PyPIffmpeg-python0.2.0indirecta
PyPIfilelock3.29.4indirecta
PyPIflake87.3.0indirecta
PyPIflatbuffers25.12.19indirecta
PyPIfrozenlist1.8.0indirecta
PyPIfsspec2026.6.0indirecta
PyPIfuture1.0.0indirecta
PyPIgenai-prices0.0.71indirecta
PyPIgoogle-auth2.55.0indirecta
PyPIgoogle-genai2.9.0indirecta
PyPIgoogleapis-common-protos1.75.0indirecta
PyPIgreenlet3.5.2indirecta
PyPIgriffelib2.1.0indirecta
PyPIgroq1.4.0indirecta
PyPIgrpcio1.81.1indirecta
PyPIh110.16.0indirecta
PyPIhf-xet1.5.1indirecta
PyPIhttpcore1.0.9indirecta
PyPIhttpcore22.4.0indirecta
PyPIhttptools0.8.0indirecta
PyPIhttpx0.28.1indirecta
PyPIhttpx-sse0.4.3indirecta
PyPIhttpx22.4.0indirecta
PyPIhuggingface-hub1.20.1indirecta
PyPIimportlib-metadata8.7.1indirecta
PyPIimportlib-resources7.1.0indirecta
PyPIiniconfig2.3.0indirecta
PyPIisort7.0.0indirecta
PyPIjaraco-classes3.4.0indirecta
PyPIjaraco-context6.1.2indirecta
PyPIjaraco-functools4.5.0indirecta
PyPIjeepney0.9.0indirecta
PyPIjiter0.15.0indirecta
PyPIjmespath1.1.0indirecta
PyPIjoserfc1.7.1indirecta
PyPIjsonpatch1.33indirecta
PyPIjsonpath-python1.1.6indirecta
PyPIjsonpointer3.1.1indirecta
PyPIjsonschema4.26.0indirecta
PyPIjsonschema-specifications2025.9.1indirecta
PyPIkeyring25.7.0indirecta
PyPIkubernetes36.0.2indirecta
PyPIlangchain-core1.4.8indirecta
PyPIlangchain-protocol0.0.18indirecta
PyPIlangchain-text-splitters1.1.2indirecta
PyPIlangsmith0.8.18indirecta
PyPIlogfire-api4.37.0indirecta
PyPImarkdown-it-py4.2.0indirecta
PyPImarkupsafe3.0.3indirecta
PyPImccabe0.7.0indirecta
PyPImdurl0.1.2indirecta
PyPImistralai2.6.0indirecta
PyPImmh35.2.1indirecta
PyPImore-itertools11.1.0indirecta
PyPImultidict6.7.1indirecta
PyPImypy-extensions1.1.0indirecta
PyPInodeenv1.10.0indirecta
PyPInumpy2.4.6indirecta
PyPIoauthlib3.3.1indirecta
PyPIonnxruntime1.27.0indirecta
PyPIopentelemetry-api1.39.1indirecta
PyPIopentelemetry-exporter-otlp-proto-common1.39.1indirecta
PyPIopentelemetry-exporter-otlp-proto-grpc1.39.1indirecta
PyPIopentelemetry-proto1.39.1indirecta
PyPIopentelemetry-sdk1.39.1indirecta
PyPIopentelemetry-semantic-conventions0.60b1indirecta
PyPIorjson3.11.9indirecta
PyPIoverrides7.7.0indirecta
PyPIpackaging25.0indirecta
PyPIpathspec1.1.1indirecta
PyPIpdfminer-six20260107indirecta
PyPIplatformdirs4.10.0indirecta
PyPIplaywright1.60.0indirecta
PyPIpluggy1.6.0indirecta
PyPIpropcache0.5.2indirecta
PyPIprotobuf6.33.6indirecta
PyPIpy-key-value-aio0.4.5indirecta
PyPIpyasn10.6.4indirecta
PyPIpyasn1-modules0.4.2indirecta
PyPIpybase641.4.3indirecta
PyPIpycodestyle2.14.0indirecta
PyPIpycparser3.0indirecta
PyPIpydantic2.13.4indirecta
PyPIpydantic-core2.46.4indirecta
PyPIpydantic-extra-types2.11.1indirecta
PyPIpydantic-graph2.8.0indirecta
PyPIpyee13.0.1indirecta
PyPIpyflakes3.4.0indirecta
PyPIpypdfium25.10.1indirecta
PyPIpypika0.51.1indirecta
PyPIpyproject-hooks1.2.0indirecta
PyPIpyright1.1.411indirecta
PyPIpytest9.1.1indirecta
PyPIpytest-asyncio1.4.0indirecta
PyPIpytest-cov6.3.0indirecta
PyPIpython-dateutil2.9.0.post0indirecta
PyPIpytokens0.4.1indirecta
PyPIpywin32312indirecta
PyPIpywin32-ctypes0.2.3indirecta
PyPIreferencing0.37.0indirecta
PyPIregex2026.5.9indirecta
PyPIrequests-oauthlib2.0.0indirecta
PyPIrequests-toolbelt1.0.0indirecta
PyPIrich-toolkit0.20.1indirecta
PyPIrignore0.7.6indirecta
PyPIrpds-py2026.5.1indirecta
PyPIs3transfer0.19.0indirecta
PyPIsecretstorage3.5.0indirecta
PyPIsentry-sdk2.63.0indirecta
PyPIshellingham1.5.4indirecta
PyPIsix1.17.0indirecta
PyPIsniffio1.3.1indirecta
PyPIsounddevice0.5.5indirecta
PyPIsoupsieve2.8.4indirecta
PyPIsrt3.5.3indirecta
PyPIsse-starlette3.4.5indirecta
PyPItenacity9.1.4indirecta
PyPItokenizers0.23.1indirecta
PyPItomlkit0.13.3indirecta
PyPItqdm4.68.3indirecta
PyPItruststore0.10.4indirecta
PyPItyper0.25.1indirecta
PyPItypes-requests2.33.0.20260518indirecta
PyPItyping-extensions4.15.0indirecta
PyPItyping-inspection0.4.2indirecta
PyPIuuid-utils0.16.2indirecta
PyPIuvicorn0.49.0indirecta
PyPIuvloop0.22.1indirecta
PyPIvosk0.3.44indirecta
PyPIvoyageai0.4.1indirecta
PyPIwatchfiles1.2.0indirecta
PyPIwcwidth0.8.1indirecta
PyPIwebsocket-client1.9.0indirecta
PyPIwebsockets16.0indirecta
PyPIxai-sdk1.17.0indirecta
PyPIxxhash3.7.0indirecta
PyPIyarl1.24.2indirecta
PyPIzipp4.1.0indirecta
PyPIzstandard0.25.0indirecta
Avisos de dependencias 1

Este repositorio no publica ningún paquete que el índice resuelva, así que se evaluó su propio grafo de dependencias — 207 paquetes, que incluyen también fijaciones de desarrollo y prueba que nunca se distribuyen: 1 tienen avisos conocidos, de los cuales 0 son directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
chromadb1.5.9indirectacrítica2

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "code-generator",
        "task-runner",
        "automation",
        "llm"
      ],
      "is_fork": false,
      "size_kb": 38577,
      "has_wiki": false,
      "homepage": "https://pypi.org/project/zrb/",
      "languages": {
        "CSS": 13495,
        "HTML": 12456,
        "Shell": 25926,
        "Python": 4293981,
        "Dockerfile": 662,
        "JavaScript": 39577,
        "PowerShell": 14931
      },
      "pushed_at": "2026-07-31T10:03:04Z",
      "created_at": "2023-01-26T02:45:47Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-31T10:00:36Z",
      "description": "Your Automation Powerhouse",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "Python",
      "significant_languages": [
        "Python"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "Organization",
      "login": "state-alchemists",
      "company": null,
      "location": null,
      "followers": 20,
      "avatar_url": "https://avatars.githubusercontent.com/u/49109356?v=4",
      "created_at": "2019-03-31T01:36:58Z",
      "is_verified": null,
      "public_repos": 14,
      "account_age_days": 2679
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "2.51.0",
          "kind": "minor",
          "published_at": "2026-07-31T10:00:16Z"
        },
        {
          "tag": "2.50.9",
          "kind": "patch",
          "published_at": "2026-07-29T16:33:27Z"
        },
        {
          "tag": "2.50.8",
          "kind": "patch",
          "published_at": "2026-07-27T23:17:53Z"
        },
        {
          "tag": "2.50.7",
          "kind": "patch",
          "published_at": "2026-07-27T15:28:50Z"
        },
        {
          "tag": "2.50.6",
          "kind": "patch",
          "published_at": "2026-07-26T23:19:34Z"
        },
        {
          "tag": "2.50.5",
          "kind": "patch",
          "published_at": "2026-07-25T00:12:52Z"
        },
        {
          "tag": "2.50.4",
          "kind": "patch",
          "published_at": "2026-07-23T14:04:56Z"
        },
        {
          "tag": "2.50.3",
          "kind": "patch",
          "published_at": "2026-07-16T23:37:26Z"
        },
        {
          "tag": "2.50.2",
          "kind": "patch",
          "published_at": "2026-07-16T12:37:34Z"
        },
        {
          "tag": "2.50.1",
          "kind": "patch",
          "published_at": "2026-07-10T23:27:12Z"
        },
        {
          "tag": "2.50.0",
          "kind": "minor",
          "published_at": "2026-07-08T22:44:41Z"
        },
        {
          "tag": "2.49.5",
          "kind": "patch",
          "published_at": "2026-07-08T05:18:03Z"
        },
        {
          "tag": "2.49.4",
          "kind": "patch",
          "published_at": "2026-07-08T01:07:12Z"
        },
        {
          "tag": "2.49.3",
          "kind": "patch",
          "published_at": "2026-07-07T17:52:00Z"
        },
        {
          "tag": "2.49.2",
          "kind": "patch",
          "published_at": "2026-07-06T00:26:03Z"
        },
        {
          "tag": "2.49.1",
          "kind": "patch",
          "published_at": "2026-07-05T00:17:39Z"
        },
        {
          "tag": "2.49.0",
          "kind": "minor",
          "published_at": "2026-07-04T13:56:24Z"
        },
        {
          "tag": "2.48.4",
          "kind": "patch",
          "published_at": "2026-07-04T02:00:23Z"
        },
        {
          "tag": "2.48.3",
          "kind": "patch",
          "published_at": "2026-07-02T12:38:57Z"
        },
        {
          "tag": "2.48.2",
          "kind": "patch",
          "published_at": "2026-07-02T08:32:22Z"
        },
        {
          "tag": "2.48.1",
          "kind": "patch",
          "published_at": "2026-07-01T15:21:25Z"
        },
        {
          "tag": "2.48.0",
          "kind": "minor",
          "published_at": "2026-07-01T05:01:17Z"
        },
        {
          "tag": "2.47.0",
          "kind": "minor",
          "published_at": "2026-07-01T00:23:17Z"
        },
        {
          "tag": "2.46.0",
          "kind": "minor",
          "published_at": "2026-06-30T14:41:01Z"
        },
        {
          "tag": "2.45.0",
          "kind": "minor",
          "published_at": "2026-06-28T09:43:22Z"
        },
        {
          "tag": "2.44.0",
          "kind": "minor",
          "published_at": "2026-06-27T22:47:19Z"
        },
        {
          "tag": "2.43.1",
          "kind": "patch",
          "published_at": "2026-06-27T09:57:41Z"
        },
        {
          "tag": "2.43.0",
          "kind": "minor",
          "published_at": "2026-06-25T16:30:06Z"
        },
        {
          "tag": "2.42.1",
          "kind": "patch",
          "published_at": "2026-06-24T22:50:18Z"
        },
        {
          "tag": "2.42.0",
          "kind": "minor",
          "published_at": "2026-06-24T14:57:36Z"
        },
        {
          "tag": "2.41.0",
          "kind": "minor",
          "published_at": "2026-06-24T08:07:21Z"
        },
        {
          "tag": "2.40.1",
          "kind": "patch",
          "published_at": "2026-06-23T05:16:40Z"
        },
        {
          "tag": "2.40.0",
          "kind": "minor",
          "published_at": "2026-06-21T11:21:07Z"
        },
        {
          "tag": "2.39.0",
          "kind": "minor",
          "published_at": "2026-06-21T05:04:55Z"
        },
        {
          "tag": "2.38.0",
          "kind": "minor",
          "published_at": "2026-06-20T17:25:14Z"
        },
        {
          "tag": "2.37.0",
          "kind": "minor",
          "published_at": "2026-06-18T23:20:35Z"
        },
        {
          "tag": "2.36.0",
          "kind": "minor",
          "published_at": "2026-06-18T11:21:29Z"
        },
        {
          "tag": "2.35.3",
          "kind": "patch",
          "published_at": "2026-06-18T03:12:14Z"
        },
        {
          "tag": "2.35.2",
          "kind": "patch",
          "published_at": "2026-06-17T05:52:31Z"
        },
        {
          "tag": "2.35.1",
          "kind": "patch",
          "published_at": "2026-06-16T06:47:11Z"
        },
        {
          "tag": "2.35.0",
          "kind": "minor",
          "published_at": "2026-06-15T02:03:49Z"
        },
        {
          "tag": "2.34.3",
          "kind": "patch",
          "published_at": "2026-06-12T03:08:11Z"
        },
        {
          "tag": "2.34.2",
          "kind": "patch",
          "published_at": "2026-06-11T14:32:30Z"
        },
        {
          "tag": "2.34.1",
          "kind": "patch",
          "published_at": "2026-06-11T10:38:26Z"
        },
        {
          "tag": "2.34.0",
          "kind": "minor",
          "published_at": "2026-06-10T13:57:01Z"
        },
        {
          "tag": "2.33.4",
          "kind": "patch",
          "published_at": "2026-06-10T09:44:20Z"
        },
        {
          "tag": "2.33.3",
          "kind": "patch",
          "published_at": "2026-06-08T10:24:35Z"
        },
        {
          "tag": "2.33.2",
          "kind": "patch",
          "published_at": "2026-06-07T09:50:23Z"
        },
        {
          "tag": "2.33.1",
          "kind": "patch",
          "published_at": "2026-06-07T01:25:59Z"
        },
        {
          "tag": "2.33.0",
          "kind": "minor",
          "published_at": "2026-06-06T05:10:59Z"
        },
        {
          "tag": "2.32.2",
          "kind": "patch",
          "published_at": "2026-06-05T23:12:37Z"
        },
        {
          "tag": "2.32.1",
          "kind": "patch",
          "published_at": "2026-06-05T15:49:16Z"
        },
        {
          "tag": "2.32.0",
          "kind": "minor",
          "published_at": "2026-06-05T11:05:41Z"
        },
        {
          "tag": "2.31.0",
          "kind": "minor",
          "published_at": "2026-05-29T14:34:03Z"
        },
        {
          "tag": "2.30.1",
          "kind": "patch",
          "published_at": "2026-05-25T05:58:58Z"
        },
        {
          "tag": "2.30.0",
          "kind": "minor",
          "published_at": "2026-05-24T04:05:10Z"
        },
        {
          "tag": "2.29.0",
          "kind": "minor",
          "published_at": "2026-05-22T15:39:10Z"
        },
        {
          "tag": "2.28.6",
          "kind": "patch",
          "published_at": "2026-05-22T00:04:51Z"
        },
        {
          "tag": "2.28.5",
          "kind": "patch",
          "published_at": "2026-05-21T07:09:28Z"
        },
        {
          "tag": "2.28.4",
          "kind": "patch",
          "published_at": "2026-05-21T02:42:08Z"
        },
        {
          "tag": "2.28.3",
          "kind": "patch",
          "published_at": "2026-05-18T03:37:09Z"
        },
        {
          "tag": "2.28.2",
          "kind": "patch",
          "published_at": "2026-05-17T15:28:19Z"
        },
        {
          "tag": "2.28.1",
          "kind": "patch",
          "published_at": "2026-05-15T11:35:20Z"
        },
        {
          "tag": "2.28.0",
          "kind": "minor",
          "published_at": "2026-05-15T10:41:00Z"
        },
        {
          "tag": "2.27.1",
          "kind": "patch",
          "published_at": "2026-05-14T13:31:53Z"
        },
        {
          "tag": "2.27.0",
          "kind": "minor",
          "published_at": "2026-05-14T06:05:58Z"
        },
        {
          "tag": "2.26.9",
          "kind": "patch",
          "published_at": "2026-05-13T11:23:50Z"
        },
        {
          "tag": "2.26.8",
          "kind": "patch",
          "published_at": "2026-05-12T21:36:14Z"
        },
        {
          "tag": "2.26.7",
          "kind": "patch",
          "published_at": "2026-05-12T11:57:33Z"
        },
        {
          "tag": "2.26.5",
          "kind": "patch",
          "published_at": "2026-05-12T07:30:31Z"
        },
        {
          "tag": "2.26.4",
          "kind": "patch",
          "published_at": "2026-05-12T01:18:56Z"
        },
        {
          "tag": "2.26.3",
          "kind": "patch",
          "published_at": "2026-05-11T16:55:53Z"
        },
        {
          "tag": "2.26.2",
          "kind": "patch",
          "published_at": "2026-05-11T09:38:17Z"
        },
        {
          "tag": "2.26.1",
          "kind": "patch",
          "published_at": "2026-05-10T10:04:51Z"
        },
        {
          "tag": "2.26.0",
          "kind": "minor",
          "published_at": "2026-05-10T02:30:12Z"
        },
        {
          "tag": "2.25.3",
          "kind": "patch",
          "published_at": "2026-05-08T00:46:06Z"
        },
        {
          "tag": "2.25.2",
          "kind": "patch",
          "published_at": "2026-05-06T17:05:18Z"
        },
        {
          "tag": "2.25.1",
          "kind": "patch",
          "published_at": "2026-05-06T01:04:56Z"
        },
        {
          "tag": "2.25.0",
          "kind": "minor",
          "published_at": "2026-05-05T16:17:34Z"
        },
        {
          "tag": "2.24.4",
          "kind": "patch",
          "published_at": "2026-05-03T13:47:04Z"
        },
        {
          "tag": "2.24.3",
          "kind": "patch",
          "published_at": "2026-05-03T12:58:15Z"
        },
        {
          "tag": "2.24.2",
          "kind": "patch",
          "published_at": "2026-05-03T11:49:06Z"
        },
        {
          "tag": "2.24.1",
          "kind": "patch",
          "published_at": "2026-05-03T08:19:20Z"
        },
        {
          "tag": "2.24.0",
          "kind": "minor",
          "published_at": "2026-05-01T10:18:35Z"
        },
        {
          "tag": "2.23.1",
          "kind": "patch",
          "published_at": "2026-04-28T07:41:58Z"
        },
        {
          "tag": "2.23.0",
          "kind": "minor",
          "published_at": "2026-04-27T11:37:06Z"
        },
        {
          "tag": "2.22.8",
          "kind": "patch",
          "published_at": "2026-04-26T10:07:56Z"
        },
        {
          "tag": "2.22.7",
          "kind": "patch",
          "published_at": "2026-04-26T05:42:50Z"
        },
        {
          "tag": "2.22.6",
          "kind": "patch",
          "published_at": "2026-04-25T00:34:25Z"
        },
        {
          "tag": "2.22.5",
          "kind": "patch",
          "published_at": "2026-04-24T01:42:29Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "7b7b7248beffe873277decd3894991308d8ad478",
          "body": "Update prompt",
          "is_bot": false,
          "headline": "Merge pull request #437 from state-alchemists/feat/update-prompt",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-31T10:00:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f43ea189c7aca60ddb6e7e44f416100a0e04fa79",
          "body": null,
          "is_bot": false,
          "headline": "Update nick name",
          "author_name": "Go Frendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-31T09:51:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bc4ef1ba35076d06a629467d3ae639b90b3f3a8",
          "body": null,
          "is_bot": false,
          "headline": "Bump new version",
          "author_name": "Go Frendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-31T09:26:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22d7e400c4a408d4dee049fd53c9a92af5f677e1",
          "body": null,
          "is_bot": false,
          "headline": "Update prompt",
          "author_name": "Go Frendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-31T08:07:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95578388889fc45983f0f74fcc1a2ae85fb29523",
          "body": "Better tool feedback",
          "is_bot": false,
          "headline": "Merge pull request #436 from state-alchemists/feat/better-tool-feedback",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-29T16:33:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a99b69c840e264c829bb5d2080b473f879fa844",
          "body": null,
          "is_bot": false,
          "headline": "Better tool feedback",
          "author_name": "Go Frendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-29T16:23:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78febd56cdc7d08f80415b16dc753040ed421a2a",
          "body": "Refactor",
          "is_bot": false,
          "headline": "Merge pull request #435 from state-alchemists/chore/refactor",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T23:23:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45c6ce401a529c36d601e11940d7dc783edf8ba0",
          "body": null,
          "is_bot": false,
          "headline": "Refactor",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T23:17:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a920661ba4f24b007bf6ff99c853c58620c1e127",
          "body": null,
          "is_bot": false,
          "headline": "Refactor",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T22:15:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bbaea9084ccf86e25db9f913e1ebeabbc8b6c5ca",
          "body": null,
          "is_bot": false,
          "headline": "Contructor refactor",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T20:11:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2bd4649e07840bf6fe5d9d4e15102d3300997426",
          "body": null,
          "is_bot": false,
          "headline": "Resolve conflict",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T15:28:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e69a6138d94a744583b722e525dc16752e501a37",
          "body": "Refactor + fix various bugs",
          "is_bot": false,
          "headline": "Merge pull request #434 from state-alchemists/fix/several-bugs",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T15:24:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fbabe689fcefb816160f6d6962f3373c3bfe6ddd",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T15:20:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ff7317abc85d28c0e0436a74b8003aa81c768c5",
          "body": null,
          "is_bot": false,
          "headline": "Fix docs",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T15:11:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8943b6ea4b482e5df5e89938bd113126b08c7eab",
          "body": null,
          "is_bot": false,
          "headline": "Fix regression",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T14:44:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64214bfefec716077e228b4d09f84c1e78e39a1d",
          "body": null,
          "is_bot": false,
          "headline": "Fix some bugs",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T14:21:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9027b8f9c5d515234634e44b0d1cd57787c97279",
          "body": null,
          "is_bot": false,
          "headline": "Add changelog",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T13:34:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e42e73de997dcc3fb4f09045dd9cd2f7786d247",
          "body": null,
          "is_bot": false,
          "headline": "Faster test",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T13:13:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0243439d3eab0cc289e432c67a096d562203d0c3",
          "body": null,
          "is_bot": false,
          "headline": "More bug fix",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T12:31:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a6b359fbbf35970ec5a380d5514f55233029722",
          "body": null,
          "is_bot": false,
          "headline": "Refactor + fix various bugs",
          "author_name": "Go Frendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T11:16:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9bf88e92e4313c7438ecdb4501fa8888896a8360",
          "body": null,
          "is_bot": false,
          "headline": "Ensure ps exists before performing autocomplete in project.sh",
          "author_name": "Go Frendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-27T04:08:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8392826e15057f72b411aa287628b9c4a7d35c58",
          "body": null,
          "is_bot": false,
          "headline": "Bump 2.50.6",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-26T23:19:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d68271cffb75487749e6a42885145c64f669b153",
          "body": "Fix clipboard on termux problem",
          "is_bot": false,
          "headline": "Merge pull request #433 from state-alchemists/fix/clipboard-on-termux",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-26T11:33:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38860191f58c99a1590344563f1acc315a32d64d",
          "body": null,
          "is_bot": false,
          "headline": "Fix clipboard on termux problem",
          "author_name": "goFrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-26T11:28:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8d819d5ed7285b95031f4f230a9cdd110b71bea",
          "body": null,
          "is_bot": false,
          "headline": "Remove stalled references",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-25T11:58:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5417ac1ffc588b57ed1d4cb29aed76e9b75ace37",
          "body": "Update default prompt",
          "is_bot": false,
          "headline": "Merge pull request #432 from state-alchemists/fix/defaultprompt",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-25T00:12:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5df5881bca6e9f4f38d3519a53d15eaa32244c36",
          "body": null,
          "is_bot": false,
          "headline": "Release new version",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-25T00:08:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42566ed5e3efb3f38c19f1fdfc16fa7d63c23f05",
          "body": null,
          "is_bot": false,
          "headline": "Update mandate",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-24T23:59:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9419f3e3acaa108aa449bf1f726e5b147189319",
          "body": null,
          "is_bot": false,
          "headline": "Update prompt",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-24T23:51:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94b5ede917039a3cadab8283e8edc02fbddf9ad9",
          "body": null,
          "is_bot": false,
          "headline": "Fix sloppy wording",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-24T23:12:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f4209ba3d77e25061fee63441980aae17154718",
          "body": null,
          "is_bot": false,
          "headline": "Update default prompt",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-24T14:43:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e76ab82c0ece85ab229019f6cf91e7b05d820969",
          "body": "Refactor",
          "is_bot": false,
          "headline": "Merge pull request #431 from state-alchemists/feat/refactor",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-23T14:10:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ac8027ce267b7d45f547bd0b54f56e2a3d09aad",
          "body": null,
          "is_bot": false,
          "headline": "Bump new version",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-23T14:04:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6377752fce08973adde4f614ba61d8f0e6607de0",
          "body": null,
          "is_bot": false,
          "headline": "Update dependency",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-23T13:37:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a64438078f52c4d21204333e00253ca67f21b89c",
          "body": null,
          "is_bot": false,
          "headline": "Fix benchmark",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-23T13:29:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31a2851ccecd005daa2e4b4fe591ba7b9130a32a",
          "body": null,
          "is_bot": false,
          "headline": "Bump 2.50.3",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-16T23:37:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cca4b4c9d45f5032ae21185a79925e5e2128de28",
          "body": null,
          "is_bot": false,
          "headline": "Fix context double calculation",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-16T23:12:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "400552d529c64798ac4f2ab400d83cbcc0c3bd48",
          "body": "…responsiveness\n\nFix markdown width and responsiveness",
          "is_bot": false,
          "headline": "Merge pull request #430 from state-alchemists/fix/markdown-width-and-…",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-16T22:50:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "804ffcd0b8fbf9768e346807333818f4d9bf765f",
          "body": null,
          "is_bot": false,
          "headline": "Improve performance",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-16T22:42:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62a8141aa1bf095994e51bafbc185bce12912320",
          "body": null,
          "is_bot": false,
          "headline": "Fix markdown width and responsiveness",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-16T14:00:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dedacc0999230d873302cfac382561ed7a6c29a3",
          "body": null,
          "is_bot": false,
          "headline": "Bump 2.50.2",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-16T12:37:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19f4dd0e2c479538faee06b844b24a58ec3c602b",
          "body": "Fix large pdf web fetching",
          "is_bot": false,
          "headline": "Merge pull request #429 from state-alchemists/fix/pdf-fetch-from-web",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-16T12:14:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "717b3887986249b5a247114ebb79b815416eb1ea",
          "body": null,
          "is_bot": false,
          "headline": "Add more info",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-16T12:04:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fbba4726966bdbca5cb6bca9fd10410985dad11",
          "body": null,
          "is_bot": false,
          "headline": "Fix test and MCP regression",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-16T00:29:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "accceac037211279725f01239565bebd384f5dee",
          "body": null,
          "is_bot": false,
          "headline": "Also add cap for MCP",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-15T23:58:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f5c2550ec8aec826718e7e502c8ef5dc5725616",
          "body": null,
          "is_bot": false,
          "headline": "Fix large pdf web fetching",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-15T23:31:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e18ec6e1f2d65240148a13a27aeeac2d9ea25209",
          "body": null,
          "is_bot": false,
          "headline": "Update pyproject.toml",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-11T00:03:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7eb5725852a5fdc86908c27108aa73959377563a",
          "body": null,
          "is_bot": false,
          "headline": "Add changelog, better typing, update docs",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-10T23:27:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7397c6ac3b115eda84bcbc31b0a9cbd655ccafb",
          "body": null,
          "is_bot": false,
          "headline": "add empty string as Env default value",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-10T23:18:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9cec40108b4318493e4ec9df4a58e4306e938100",
          "body": null,
          "is_bot": false,
          "headline": "Add usage",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-10T14:11:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64359c4544546679dae5903d8a171ba669a0fd75",
          "body": null,
          "is_bot": false,
          "headline": "Update docs",
          "author_name": "Go Frendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-09T14:50:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ee7b5c6ae1ae31340c1532ec93b6407f4595aa6",
          "body": null,
          "is_bot": false,
          "headline": "update test",
          "author_name": "Go Frendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-09T02:47:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d96e06e8e831d36646eb6748d7492e70aded21d",
          "body": "Add themes",
          "is_bot": false,
          "headline": "Merge pull request #426 from state-alchemists/feat/introduce-theme",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T22:44:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7aa41d4739e306be242d7a928dd9cc99e0f1a83d",
          "body": null,
          "is_bot": false,
          "headline": "Increase test coverage + fix test warning on github action",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T22:39:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "244bb3696e38123688f09aebc0027dd4f4e90858",
          "body": null,
          "is_bot": false,
          "headline": "Add chat image",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T21:54:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44b2d4dfe532807e26517c224610b0ce48a1e3a2",
          "body": null,
          "is_bot": false,
          "headline": "Add monokai",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T21:40:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d444617edce1a83cdf1e17bade34ef0d6dd8a64a",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T21:07:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "886c01c701113839af9a5bbc92291d116be503c9",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into feat/introduce-theme",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T21:05:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f6b1fe8023c92465f711e16f31b14b5aea31698",
          "body": "…andling\n\nSoften local venv handling",
          "is_bot": false,
          "headline": "Merge pull request #427 from state-alchemists/fix/soften-local-venv-h…",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T21:05:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8bea1723f6761ee89edb5d17c4ce81d002008fc9",
          "body": null,
          "is_bot": false,
          "headline": "Update docs",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T21:04:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eec475c01ae9a214203c645c2beb9a04bb237dbe",
          "body": null,
          "is_bot": false,
          "headline": "Update installation script",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T20:39:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8540894790e36c90739d1099f04b8265b90e5fb6",
          "body": null,
          "is_bot": false,
          "headline": "Soften local venv hsndling",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T14:28:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59f4ccbf180b48b241d50bd9f8cecce2cee2e1ab",
          "body": null,
          "is_bot": false,
          "headline": "Add themes",
          "author_name": "Go Frendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T13:20:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1078afa196e6245cdf600e4a4bf4ef5915274271",
          "body": "Update pipx",
          "is_bot": false,
          "headline": "Merge pull request #425 from state-alchemists/feat/update-pipx",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T05:18:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6de2e96e357fc2fb506bb43a367d1a5077d50247",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog",
          "author_name": "Go Frendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T05:16:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e88fca43c434a1e2b936df0c18450f2ac38387c",
          "body": null,
          "is_bot": false,
          "headline": "Update pipx",
          "author_name": "Go Frendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T04:33:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "623b58eef32d9f0cc3091556745a9fe5fd65eeae",
          "body": "Re-add mistral",
          "is_bot": false,
          "headline": "Merge pull request #424 from state-alchemists/feat/re-add-mistral",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T01:07:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5bac98e80ea1f9ebe73a0bec5c9564d2aec28db",
          "body": null,
          "is_bot": false,
          "headline": "Re-add mistral",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-08T00:59:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b125913c311e660cde418a593988abde54f3179",
          "body": null,
          "is_bot": false,
          "headline": "Update installation script",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T23:57:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "742a35d566e1227559a80d39ac2df157e451efa1",
          "body": null,
          "is_bot": false,
          "headline": "Fix installation script",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T23:48:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e53b54177690fb41cda709c9c2ebe7b4fce14ad1",
          "body": "Update installation script to use pipx",
          "is_bot": false,
          "headline": "Merge pull request #423 from state-alchemists/feat/use-pipx",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T17:52:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c41c3a182c00da826103269b03520da5e66dce9a",
          "body": null,
          "is_bot": false,
          "headline": "Update poetry lock",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T17:48:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe6035e74befe3e0d3f2c6e4823f5582bdc06368",
          "body": null,
          "is_bot": false,
          "headline": "Bump new version",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T17:46:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9cfeeefa805d802d4b043c34db563123b1b50672",
          "body": null,
          "is_bot": false,
          "headline": "Update error message",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T17:45:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5afa8c85e1bbf58ea0c3089629a734aaccd60d3",
          "body": null,
          "is_bot": false,
          "headline": "Make black and isort optional",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T17:40:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32e81d111b2eba5cde853319c298ef149714a695",
          "body": "Convert format-code task from CmdTask to make_task with a Python\nfunction that checks if black and isort are on PATH before running\nthem. If either is missing, prints a [SYSTEM SUGGESTION] telling the\nuser how to install zrb[format] via pipx inject",
          "is_bot": false,
          "headline": "feat: check for black/isort before formatting, show install hint",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T17:21:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "273a897f3f0a008793d90263dc50954b05a7d97b",
          "body": "Neither black nor isort are imported as Python libraries in zrb's\ncodebase — they are only invoked as CLI subprocesses in the builtin\nformat task. Moving them to an optional [format] dependency group\nreduces the core install footprint by ~30MB.\n\nzrb task format users: pip install \"zrb[format]\" or\npipx install \"zrb[format]\" / pipx inject zrb \"zrb[format]\"",
          "is_bot": false,
          "headline": "refactor: move black and isort to optional [format] extra",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T17:13:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f903086cec0f1460ca5f540e4336bb6dcd6f0e2b",
          "body": "- Quick Start: pipx install zrb (with pipx install instructions)\n- Standard install: pipx as default, installation scripts already use pipx\n- Upgrade: pipx upgrade zrb\n- Uninstall: pipx uninstall zrb\n- Troubleshooting: pipx-focused solutions\n- llm-config: extras table updated to pipx install/inject commands\n- Android/Termux: adds pipx to apt install, uses pipx for zrb\n- Windows: manual section uses pipx instead of local-venv\n- macOS: brew install pipx + pipx ensurepath",
          "is_bot": false,
          "headline": "docs: switch primary recommendation from pip to pipx",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T17:05:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "403ada4014a35a856056ecf1b938f5a6e8041ba9",
          "body": "pipx warns that --python is ignored when --force is passed. Since we\nalready ran pipx uninstall, the venv is gone, so a plain pipx install\nwith --python creates a fresh venv with the correct interpreter.",
          "is_bot": false,
          "headline": "fix(install): remove --force flag on pipx install, uninstall already ran",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T16:48:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "992e44cde3c65a9348ac49d448059a3ea91908a2",
          "body": "- Change one-liner from WebClient.DownloadString to\n  DownloadData+UTF8.GetString to properly decode UTF-8 on\n  Windows PowerShell 5.1 (which otherwise decodes as Win-1252)\n- Restore emoji icons: > -> 🤖, [OK] -> ✅, [!] -> ⚠️\n- Restore box-drawing banner: +--+ -> ╔═╗ with em-dash\n- Update installation.md one-liner to match",
          "is_bot": false,
          "headline": "feat(install): make PS1 installer icons match SH installer",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T16:44:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "094eb4a4ba478e31aebd3784c7d0e67bd0d77d79",
          "body": "…xpression\n\n& zrb shell autocomplete powershell returns System.Object[] (array of\nstrings), but Invoke-Expression expects a single string. Wrap with\n-join \"`n\" to concatenate into one string before passing it.\n\nAlso auto-fixes existing profiles by replacing the broken line with the\ncorrect one on re-run.",
          "is_bot": false,
          "headline": "fix(install): join array output from zrb autocomplete before Invoke-E…",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T16:30:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2dbb01c4fe96fc2448c5cc37ee8feddced464aa",
          "body": "…e template\n\ncommand_exists is a helper defined inside the install script and not\navailable in the user's shell rc context. Use portable command -v\ninstead so the autocomplete block works in any shell without requiring\na pre-defined function.",
          "is_bot": false,
          "headline": "fix(install): use command -v instead of command_exists in autocomplet…",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T16:29:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c4f432a3ca0d917384ab749e8df07e445450825",
          "body": "…m PATH\n\nWhen pipx lives inside .local-venv/Scripts (common on Windows), the\nCleanup-LocalVenv step deletes both the directory and its PATH entry,\nmaking pipx unavailable for the subsequent LSP inject step.\n\nExtract Find-PipxPath helper that locates pipx.exe in the Python user\nScripts folder and add\n[…]\nt to the session PATH. Call it:\n- In Ensure-Pipx (after pip install --user pipx)\n- In Ensure-PipxPath (fallback when pipx is not on PATH)\n- After Cleanup-LocalVenv so pipx is available for pipx inject",
          "is_bot": false,
          "headline": "fix(install): re-discover pipx after Cleanup-LocalVenv removes it fro…",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T16:16:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d986e68dd5e995adce3d4fbd528253fce60c2736",
          "body": "pipx --force reuses the existing venv (--python is silently ignored).\npipx environment command may not exist on older pipx versions or output\nunexpected format, making the manual rm -rf unreliable.\n\nUse pipx uninstall zrb which cleanly removes the stale venv regardless\nof where pipx stores it, then pipx install creates a fresh venv with\n--python .",
          "is_bot": false,
          "headline": "fix(install): use pipx uninstall instead of manual rm -rf for stale venv",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T15:55:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5531c3ec5bad58cf449939631794104264bbcbaf",
          "body": "… effect\n\npipx --force reuses the existing venv (does not recreate it), so passing\n--python has no effect on an already-existing venv. The stale venv from\nPython 3.10 persists and zrb 1.x (the last version supporting 3.10) gets\ninstalled instead of 2.x.\n\nDelete /venvs/zrb before calling pipx install so a fresh venv\nis created with the correct Python version from --python.",
          "is_bot": false,
          "headline": "fix(install): delete stale pipx venv before install so --python takes…",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T15:51:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b38eff09bbe624bd34872168149ccfa1da8a9f6",
          "body": "…python\n\nOn Windows, /home/gofrendi/zrbY_CMD may be 'py' (the Python launcher), which is\nnot a real Python interpreter and cannot be passed to pipx --python.\nResolve it via 'import sys; print(sys.executable)' at the end of\nEnsure-Python so the path is available for Pipx-Install-Zrb.",
          "is_bot": false,
          "headline": "fix(install): resolve 'py' launcher to actual Python path for pipx --…",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T15:47:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdd43107ef0095dfe6e85c6af814202a57f2e152",
          "body": "…thon version\n\npipx uses its own default Python to create package venvs, which may be\nPython 3.10 even when the script detected Python 3.14. zrb 2.x requires\nPython 3.11+ — installing with Python 3.10 pulls the old 1.x series.\n\nExtract pipx_install_zrb() helper that passes --python \"$PY_CMD\" to\npipx install, ensuring the venv is created with the verified Python.\nUpgrade path falls back to this helper on failure.",
          "is_bot": false,
          "headline": "fix(install): pass --python to pipx to avoid installing with wrong Py…",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T15:46:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17860c0d000c96dc19e9bdc11de12789d406de7d",
          "body": "PowerShell 5.1's 2> does not suppress native-command stderr when the\noutput is captured in a variable — the ErrorRecord bleeds through as an ugly\nerror message and (when =Stop was set) terminated the\nscript. The same issue persists with default Continue because the error is\nstill displayed to the us\n[…]\n Test-ZrbInPipx() helper that uses pipx list --json (which\noutputs nothing on stderr when no packages are installed) and parses the\nJSON for a 'zrb' venv entry. No stderr, no messages, no termination.",
          "is_bot": false,
          "headline": "fix(install): replace pipx list --short with pipx list --json in PS5.1",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T15:39:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "760db21f4643b825b1ad04dfa10f4394c2340f68",
          "body": "In PowerShell 5.1, =Stop treats native command stderr\nas a terminating error. pipx writes progress and warnings ('nothing has been\ninstalled with pipx') to stderr, so the script would terminate at the first\npipx command (pipx list --short) before installing anything.\n\nRemoving it restores default Co\n[…]\nedirects\nproperly suppress expected stderr, and no cmdlet in the script critically\ndepends on Stop to catch failures (Set-Content/New-Item/Remove-Item all\nuse -Force or -ErrorAction SilentlyContinue).",
          "is_bot": false,
          "headline": "fix(install): remove =Stop from install.ps1",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T15:36:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf73c65419dfe802b628c0d5e86ad915accdd19a",
          "body": "Three issues found by testing the real install.sh:\n\n1. Stale pipx venv dir blocks reinstall: a previous failed pipx install\n   leaves ~/.local/pipx/venvs/zrb/ with no metadata. pipx list skips it,\n   but pipx install refuses ('already seems to be installed'). Fix:\n   always use --force on pipx insta\n[…]\n --user\n   when set. Also skip adding ~/.local/bin to PATH (already in venv PATH).\n\n4. pipx inject abort: LSP server install is optional but had no error\n   guard. Fix: || warn on failure (non-fatal).",
          "is_bot": false,
          "headline": "fix(install): handle stale pipx venv and virtualenv edge cases",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T15:31:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "303df1d89fc39000b3326f1e6af68aacdcc46e51",
          "body": "PowerShell -match defaults to single-line mode where ^ matches only\nstart-of-string. pipx list --short outputs one package per line, so\nzrb may not be on the first line. (?m) enables multiline mode so ^\nmatches after each newline, matching the bash grep behavior.",
          "is_bot": false,
          "headline": "fix(install): use multiline regex for pipx list check in install.ps1",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T15:27:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be888083e572fd0b96e15b6e8e8854786c09262d",
          "body": "…ebClient.DownloadString\n\n- WebClient.DownloadString on Windows PowerShell decodes UTF-8 as Windows-1252,\n  corrupting multi-byte characters. Any corrupted character spanning a newline\n  can eat the line break before '\"@', making here-string closers not at column 0.\n- Replace emoji (>, [OK], [!]), em dash (--), and box-drawing (ASCII art)\n- Already pure ASCII content cannot be mangled regardless of encoding mismatch",
          "is_bot": false,
          "headline": "Strip all non-ASCII from install.ps1 to fix encoding corruption via W…",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T15:25:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fdf4e8800dafa987cf908a3544f72736bdb97ed",
          "body": null,
          "is_bot": false,
          "headline": "Remove -q from pipx inject (not a pipx flag)",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T15:21:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "686111ed745663a8b489b16d367a889357073876",
          "body": "- PIP_PRE=1 avoids pipx argparse issues with values starting with '--'\n- Simplify install.ps1 last line to avoid quoting issues on Windows PowerShell",
          "is_bot": false,
          "headline": "Use PIP_PRE env var instead of --pip-args for pipx compatibility",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T15:18:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a09261cd2cb72c86072995b888aa1db99ec99b55",
          "body": null,
          "is_bot": false,
          "headline": "Update script",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T15:09:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e74911aa842461d693093109b681711cfd470572",
          "body": null,
          "is_bot": false,
          "headline": "Add local-venv removal",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T14:59:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2bd5e53177e6f5e74e3aaa494f3c6c5fb1f51e71",
          "body": null,
          "is_bot": false,
          "headline": "Upgrade installation script",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-07T14:35:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2008ce85ae46ce44b2ec84081d612673d636f92e",
          "body": "Defer Pydantic AI import",
          "is_bot": false,
          "headline": "Merge pull request #422 from state-alchemists/fix/defer-pydantic-ai",
          "author_name": "Go Frendi Gunawan",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-06T00:26:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45d113a3479823fdbcd2aed87d980de89362a350",
          "body": null,
          "is_bot": false,
          "headline": "Update docs and changelog",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-06T00:23:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4fbf3c4aa00916b17bf4567723bc8760d384ca5",
          "body": null,
          "is_bot": false,
          "headline": "Defer pydantic AI import",
          "author_name": "gofrendi",
          "author_login": "goFrendiAsgard",
          "committed_at": "2026-07-06T00:11:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 90,
      "commits_last_year": 1558,
      "latest_release_at": "2026-07-31T10:00:16Z",
      "latest_release_tag": "2.51.0",
      "releases_from_tags": true,
      "days_since_last_push": 0,
      "active_weeks_last_year": 52,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 2.3
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 37,
      "has_issue_template": true,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "zrb",
          "exists": true,
          "license": "AGPL-3.0-or-later",
          "keywords": [
            "Automation",
            "Task Runner",
            "Code Generator",
            "Monorepo",
            "Low Code",
            "Programming Language :: Python :: 3",
            "Programming Language :: Python :: 3.11",
            "Programming Language :: Python :: 3.12",
            "Programming Language :: Python :: 3.13",
            "Programming Language :: Python :: 3.14"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/zrb/",
          "is_deprecated": false,
          "latest_version": "2.51.0",
          "repository_url": "https://github.com/state-alchemists/zrb",
          "versions_count": 647,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 6736,
          "first_published_at": "2023-01-26T02:22:38.196461Z",
          "latest_published_at": "2026-07-31T10:03:27.962109Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 17,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2026-02-02",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 2
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "pyrightconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 3164970,
      "source_files_sampled": 716,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 15979
    },
    "dependencies": {
      "manifests": [
        "pyproject.toml"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "chromadb",
            "direct": false,
            "version": "1.5.9",
            "severity": "critical",
            "ecosystem": "pypi",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-f4j7-r4q5-qw2c",
              "PYSEC-2026-311"
            ],
            "fixed_version": null,
            "advisory_count": 2,
            "oldest_advisory_days": 73
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "critical": 1
        },
        "advisory_count": 2,
        "affected_count": 1,
        "assessed_count": 207,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [
        {
          "name": "python-dotenv",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.1.1,<2.0.0"
        },
        {
          "name": "beautifulsoup4",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.14.2,<5.0.0"
        },
        {
          "name": "pdfplumber",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.11.7,<0.12.0"
        },
        {
          "name": "fastapi",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.136.3,<0.137.0"
        },
        {
          "name": "jinja2",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.1.0,<4.0.0"
        },
        {
          "name": "PyJWT",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.13.0,<3.0.0"
        },
        {
          "name": "ulid-py",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.1.0,<2.0.0"
        },
        {
          "name": "psutil",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=7.0.0,<8.0.0"
        },
        {
          "name": "pydantic-settings",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.14.2"
        },
        {
          "name": "pydantic-ai-slim",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.8.0,<2.9.0"
        },
        {
          "name": "openai",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.29.0"
        },
        {
          "name": "prompt-toolkit",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3"
        },
        {
          "name": "rich",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=13"
        },
        {
          "name": "mcp",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.28.1,<2.0"
        },
        {
          "name": "requests",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.33.0,<3.0.0"
        },
        {
          "name": "tiktoken",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.12.0,<0.13.0"
        },
        {
          "name": "markdownify",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.2.2,<2.0.0"
        },
        {
          "name": "pyyaml",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=6.0.3,<7.0.0"
        },
        {
          "name": "pyperclip",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.11.0,<2.0.0"
        },
        {
          "name": "Pillow",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=12.3.0"
        },
        {
          "name": "pygments",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.20.0"
        },
        {
          "name": "cryptography",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=48.0.1"
        },
        {
          "name": "python-multipart",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.0.30"
        },
        {
          "name": "starlette",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.3.1"
        },
        {
          "name": "urllib3",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.7.0"
        },
        {
          "name": "idna",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.15"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "beautifulsoup4",
            "direct": true,
            "version": "4.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cryptography",
            "direct": true,
            "version": "49.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fastapi",
            "direct": true,
            "version": "0.136.3",
            "ecosystem": "pypi"
          },
          {
            "name": "idna",
            "direct": true,
            "version": "3.18",
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": true,
            "version": "3.1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "markdownify",
            "direct": true,
            "version": "1.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "mcp",
            "direct": true,
            "version": "1.28.1",
            "ecosystem": "pypi"
          },
          {
            "name": "openai",
            "direct": true,
            "version": "2.43.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pdfplumber",
            "direct": true,
            "version": "0.11.10",
            "ecosystem": "pypi"
          },
          {
            "name": "pillow",
            "direct": true,
            "version": "12.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "prompt-toolkit",
            "direct": true,
            "version": "3.0.52",
            "ecosystem": "pypi"
          },
          {
            "name": "psutil",
            "direct": true,
            "version": "7.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-ai-slim",
            "direct": true,
            "version": "2.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-settings",
            "direct": true,
            "version": "2.14.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pygments",
            "direct": true,
            "version": "2.20.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyjwt",
            "direct": true,
            "version": "2.13.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyperclip",
            "direct": true,
            "version": "1.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dotenv",
            "direct": true,
            "version": "1.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "python-multipart",
            "direct": true,
            "version": "0.0.32",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml",
            "direct": true,
            "version": "6.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": true,
            "version": "2.34.2",
            "ecosystem": "pypi"
          },
          {
            "name": "rich",
            "direct": true,
            "version": "15.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "starlette",
            "direct": true,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tiktoken",
            "direct": true,
            "version": "0.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ulid-py",
            "direct": true,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": true,
            "version": "2.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "aiofile",
            "direct": false,
            "version": "3.11.1",
            "ecosystem": "pypi"
          },
          {
            "name": "aiohappyeyeballs",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "pypi"
          },
          {
            "name": "aiohttp",
            "direct": false,
            "version": "3.14.1",
            "ecosystem": "pypi"
          },
          {
            "name": "aiolimiter",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "aiosignal",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-doc",
            "direct": false,
            "version": "0.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "annotated-types",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "anthropic",
            "direct": false,
            "version": "0.111.0",
            "ecosystem": "pypi"
          },
          {
            "name": "anyio",
            "direct": false,
            "version": "4.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "attrs",
            "direct": false,
            "version": "26.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "authlib",
            "direct": false,
            "version": "1.7.2",
            "ecosystem": "pypi"
          },
          {
            "name": "autopep8",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "pypi"
          },
          {
            "name": "backports-tarfile",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "bcrypt",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "beartype",
            "direct": false,
            "version": "0.22.9",
            "ecosystem": "pypi"
          },
          {
            "name": "black",
            "direct": false,
            "version": "26.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "boto3",
            "direct": false,
            "version": "1.43.34",
            "ecosystem": "pypi"
          },
          {
            "name": "botocore",
            "direct": false,
            "version": "1.43.34",
            "ecosystem": "pypi"
          },
          {
            "name": "build",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cachetools",
            "direct": false,
            "version": "7.1.4",
            "ecosystem": "pypi"
          },
          {
            "name": "caio",
            "direct": false,
            "version": "0.9.25",
            "ecosystem": "pypi"
          },
          {
            "name": "certifi",
            "direct": false,
            "version": "2026.6.17",
            "ecosystem": "pypi"
          },
          {
            "name": "cffi",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "charset-normalizer",
            "direct": false,
            "version": "3.4.7",
            "ecosystem": "pypi"
          },
          {
            "name": "chromadb",
            "direct": false,
            "version": "1.5.9",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "cohere",
            "direct": false,
            "version": "7.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "colorama",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "coverage",
            "direct": false,
            "version": "7.14.2",
            "ecosystem": "pypi"
          },
          {
            "name": "detect-installer",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "distro",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "dnspython",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "docstring-parser",
            "direct": false,
            "version": "0.18.0",
            "ecosystem": "pypi"
          },
          {
            "name": "durationpy",
            "direct": false,
            "version": "0.10",
            "ecosystem": "pypi"
          },
          {
            "name": "email-validator",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "eval-type-backport",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "exceptiongroup",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "fastapi-cli",
            "direct": false,
            "version": "0.0.27",
            "ecosystem": "pypi"
          },
          {
            "name": "fastapi-cloud-cli",
            "direct": false,
            "version": "0.20.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fastar",
            "direct": false,
            "version": "0.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fastavro",
            "direct": false,
            "version": "1.12.2",
            "ecosystem": "pypi"
          },
          {
            "name": "fastmcp-slim",
            "direct": false,
            "version": "3.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "ffmpeg-python",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "filelock",
            "direct": false,
            "version": "3.29.4",
            "ecosystem": "pypi"
          },
          {
            "name": "flake8",
            "direct": false,
            "version": "7.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "flatbuffers",
            "direct": false,
            "version": "25.12.19",
            "ecosystem": "pypi"
          },
          {
            "name": "frozenlist",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "fsspec",
            "direct": false,
            "version": "2026.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "future",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "genai-prices",
            "direct": false,
            "version": "0.0.71",
            "ecosystem": "pypi"
          },
          {
            "name": "google-auth",
            "direct": false,
            "version": "2.55.0",
            "ecosystem": "pypi"
          },
          {
            "name": "google-genai",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "googleapis-common-protos",
            "direct": false,
            "version": "1.75.0",
            "ecosystem": "pypi"
          },
          {
            "name": "greenlet",
            "direct": false,
            "version": "3.5.2",
            "ecosystem": "pypi"
          },
          {
            "name": "griffelib",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "groq",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "grpcio",
            "direct": false,
            "version": "1.81.1",
            "ecosystem": "pypi"
          },
          {
            "name": "h11",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "hf-xet",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "httpcore",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "pypi"
          },
          {
            "name": "httpcore2",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "httptools",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "httpx",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "pypi"
          },
          {
            "name": "httpx-sse",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "httpx2",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "huggingface-hub",
            "direct": false,
            "version": "1.20.1",
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-metadata",
            "direct": false,
            "version": "8.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "importlib-resources",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "iniconfig",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "isort",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-classes",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-context",
            "direct": false,
            "version": "6.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "jaraco-functools",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jeepney",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jiter",
            "direct": false,
            "version": "0.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jmespath",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "joserfc",
            "direct": false,
            "version": "1.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonpatch",
            "direct": false,
            "version": "1.33",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonpath-python",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonpointer",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema",
            "direct": false,
            "version": "4.26.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jsonschema-specifications",
            "direct": false,
            "version": "2025.9.1",
            "ecosystem": "pypi"
          },
          {
            "name": "keyring",
            "direct": false,
            "version": "25.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "kubernetes",
            "direct": false,
            "version": "36.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-core",
            "direct": false,
            "version": "1.4.8",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-protocol",
            "direct": false,
            "version": "0.0.18",
            "ecosystem": "pypi"
          },
          {
            "name": "langchain-text-splitters",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "langsmith",
            "direct": false,
            "version": "0.8.18",
            "ecosystem": "pypi"
          },
          {
            "name": "logfire-api",
            "direct": false,
            "version": "4.37.0",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown-it-py",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "markupsafe",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "mccabe",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mdurl",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "pypi"
          },
          {
            "name": "mistralai",
            "direct": false,
            "version": "2.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mmh3",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "more-itertools",
            "direct": false,
            "version": "11.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "multidict",
            "direct": false,
            "version": "6.7.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mypy-extensions",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "nodeenv",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "numpy",
            "direct": false,
            "version": "2.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "oauthlib",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "onnxruntime",
            "direct": false,
            "version": "1.27.0",
            "ecosystem": "pypi"
          },
          {
            "name": "opentelemetry-api",
            "direct": false,
            "version": "1.39.1",
            "ecosystem": "pypi"
          },
          {
            "name": "opentelemetry-exporter-otlp-proto-common",
            "direct": false,
            "version": "1.39.1",
            "ecosystem": "pypi"
          },
          {
            "name": "opentelemetry-exporter-otlp-proto-grpc",
            "direct": false,
            "version": "1.39.1",
            "ecosystem": "pypi"
          },
          {
            "name": "opentelemetry-proto",
            "direct": false,
            "version": "1.39.1",
            "ecosystem": "pypi"
          },
          {
            "name": "opentelemetry-sdk",
            "direct": false,
            "version": "1.39.1",
            "ecosystem": "pypi"
          },
          {
            "name": "opentelemetry-semantic-conventions",
            "direct": false,
            "version": "0.60b1",
            "ecosystem": "pypi"
          },
          {
            "name": "orjson",
            "direct": false,
            "version": "3.11.9",
            "ecosystem": "pypi"
          },
          {
            "name": "overrides",
            "direct": false,
            "version": "7.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "packaging",
            "direct": false,
            "version": "25.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pathspec",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pdfminer-six",
            "direct": false,
            "version": "20260107",
            "ecosystem": "pypi"
          },
          {
            "name": "platformdirs",
            "direct": false,
            "version": "4.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "playwright",
            "direct": false,
            "version": "1.60.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pluggy",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "propcache",
            "direct": false,
            "version": "0.5.2",
            "ecosystem": "pypi"
          },
          {
            "name": "protobuf",
            "direct": false,
            "version": "6.33.6",
            "ecosystem": "pypi"
          },
          {
            "name": "py-key-value-aio",
            "direct": false,
            "version": "0.4.5",
            "ecosystem": "pypi"
          },
          {
            "name": "pyasn1",
            "direct": false,
            "version": "0.6.4",
            "ecosystem": "pypi"
          },
          {
            "name": "pyasn1-modules",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pybase64",
            "direct": false,
            "version": "1.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pycodestyle",
            "direct": false,
            "version": "2.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pycparser",
            "direct": false,
            "version": "3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic",
            "direct": false,
            "version": "2.13.4",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-core",
            "direct": false,
            "version": "2.46.4",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-extra-types",
            "direct": false,
            "version": "2.11.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pydantic-graph",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyee",
            "direct": false,
            "version": "13.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pyflakes",
            "direct": false,
            "version": "3.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pypdfium2",
            "direct": false,
            "version": "5.10.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pypika",
            "direct": false,
            "version": "0.51.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pyproject-hooks",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyright",
            "direct": false,
            "version": "1.1.411",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "9.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-asyncio",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-cov",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dateutil",
            "direct": false,
            "version": "2.9.0.post0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytokens",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pywin32",
            "direct": false,
            "version": "312",
            "ecosystem": "pypi"
          },
          {
            "name": "pywin32-ctypes",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "referencing",
            "direct": false,
            "version": "0.37.0",
            "ecosystem": "pypi"
          },
          {
            "name": "regex",
            "direct": false,
            "version": "2026.5.9",
            "ecosystem": "pypi"
          },
          {
            "name": "requests-oauthlib",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "requests-toolbelt",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "rich-toolkit",
            "direct": false,
            "version": "0.20.1",
            "ecosystem": "pypi"
          },
          {
            "name": "rignore",
            "direct": false,
            "version": "0.7.6",
            "ecosystem": "pypi"
          },
          {
            "name": "rpds-py",
            "direct": false,
            "version": "2026.5.1",
            "ecosystem": "pypi"
          },
          {
            "name": "s3transfer",
            "direct": false,
            "version": "0.19.0",
            "ecosystem": "pypi"
          },
          {
            "name": "secretstorage",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sentry-sdk",
            "direct": false,
            "version": "2.63.0",
            "ecosystem": "pypi"
          },
          {
            "name": "shellingham",
            "direct": false,
            "version": "1.5.4",
            "ecosystem": "pypi"
          },
          {
            "name": "six",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sniffio",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "sounddevice",
            "direct": false,
            "version": "0.5.5",
            "ecosystem": "pypi"
          },
          {
            "name": "soupsieve",
            "direct": false,
            "version": "2.8.4",
            "ecosystem": "pypi"
          },
          {
            "name": "srt",
            "direct": false,
            "version": "3.5.3",
            "ecosystem": "pypi"
          },
          {
            "name": "sse-starlette",
            "direct": false,
            "version": "3.4.5",
            "ecosystem": "pypi"
          },
          {
            "name": "tenacity",
            "direct": false,
            "version": "9.1.4",
            "ecosystem": "pypi"
          },
          {
            "name": "tokenizers",
            "direct": false,
            "version": "0.23.1",
            "ecosystem": "pypi"
          },
          {
            "name": "tomlkit",
            "direct": false,
            "version": "0.13.3",
            "ecosystem": "pypi"
          },
          {
            "name": "tqdm",
            "direct": false,
            "version": "4.68.3",
            "ecosystem": "pypi"
          },
          {
            "name": "truststore",
            "direct": false,
            "version": "0.10.4",
            "ecosystem": "pypi"
          },
          {
            "name": "typer",
            "direct": false,
            "version": "0.25.1",
            "ecosystem": "pypi"
          },
          {
            "name": "types-requests",
            "direct": false,
            "version": "2.33.0.20260518",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-extensions",
            "direct": false,
            "version": "4.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-inspection",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "uuid-utils",
            "direct": false,
            "version": "0.16.2",
            "ecosystem": "pypi"
          },
          {
            "name": "uvicorn",
            "direct": false,
            "version": "0.49.0",
            "ecosystem": "pypi"
          },
          {
            "name": "uvloop",
            "direct": false,
            "version": "0.22.1",
            "ecosystem": "pypi"
          },
          {
            "name": "vosk",
            "direct": false,
            "version": "0.3.44",
            "ecosystem": "pypi"
          },
          {
            "name": "voyageai",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "watchfiles",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "wcwidth",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "pypi"
          },
          {
            "name": "websocket-client",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "websockets",
            "direct": false,
            "version": "16.0",
            "ecosystem": "pypi"
          },
          {
            "name": "xai-sdk",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "xxhash",
            "direct": false,
            "version": "3.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "yarl",
            "direct": false,
            "version": "1.24.2",
            "ecosystem": "pypi"
          },
          {
            "name": "zipp",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "zstandard",
            "direct": false,
            "version": "0.25.0",
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 207,
        "direct_count": 26,
        "indirect_count": 181
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 390,
        "open_issues": 1,
        "closed_ratio": 0.875,
        "closed_issues": 7,
        "closed_unmerged_prs": 37
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "goFrendiAsgard",
          "commits": 3255,
          "avatar_url": "https://avatars.githubusercontent.com/u/883662?v=4"
        },
        {
          "type": "User",
          "login": "za",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/409455?v=4"
        },
        {
          "type": "User",
          "login": "adherwp",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/42859242?v=4"
        }
      ],
      "contributors_sampled": 3,
      "top_contributor_share": 0.999
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "_zrb.yml",
        "hello.yml",
        "test.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".flake8"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "poetry.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": 10,
            "reason": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/11 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 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": "7b7b7248beffe873277decd3894991308d8ad478",
        "ran_at": "2026-07-31T10:05:34Z",
        "aggregate_score": 4.7,
        "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-31T10:03:38Z",
      "oldest_open_prs": [
        {
          "number": 290,
          "created_at": "2026-02-02T04:27:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-31T10:00:17Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 428,
          "created_at": "2026-07-15T08:22:06Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/state-alchemists/zrb",
    "host": "github.com",
    "name": "zrb",
    "owner": "state-alchemists"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "excellent",
      "name": "Overall health",
      "note": "The weighted overall 68 is calibrated to 80 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 68,
            "calibrated": 80,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 80,
      "inputs": {
        "security": 58,
        "vitality": 95,
        "community": 38,
        "governance": 59,
        "calibration": "2026-08-02",
        "engineering": 86,
        "ai_readiness": 62,
        "weighted_overall_raw": 68
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "exceptional",
        "name": "Vitality",
        "value": 95,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "exceptional",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "commits_last_year": 1558,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 52
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "52/52 weeks with commits",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 52
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1558 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1558
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "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": 88,
            "inputs": {
              "releases_count": 90,
              "latest_release_tag": "2.51.0",
              "releases_from_tags": true,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 2.3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "90 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 90
                    }
                  }
                ],
                "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 ~2.3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2.3
                    }
                  }
                ],
                "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": "exceptional",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 2,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 2 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "weak",
        "name": "Community & Adoption",
        "value": 38,
        "weight": 0.17,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "forks": 1,
              "stars": 17,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "17 stars",
                "points": 19.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 17
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "weak",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "readme_badges": null,
              "has_contributing": false,
              "has_issue_template": true,
              "has_code_of_conduct": false,
              "readme_badge_services": [],
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "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": 7.2,
                "status": "met",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 64,
            "inputs": {
              "packages": [
                "zrb"
              ],
              "dependents": null,
              "ecosystems": "pypi",
              "total_downloads": null,
              "monthly_downloads": 6736
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "6,736 downloads/month across pypi",
                "points": 51,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 6736,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 59,
        "weight": 0.23,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 19,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 3,
              "top_contributor_share": 0.999
            },
            "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": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "3 contributors",
                "points": 4.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "newcomer_pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 74,
            "inputs": {
              "merged_prs": 390,
              "open_issues": 1,
              "closed_issues": 7,
              "prs_merged_7d": null,
              "prs_decided_7d": null,
              "prs_merged_30d": null,
              "prs_decided_30d": null,
              "issue_closed_ratio": 0.875,
              "closed_unmerged_prs": 37,
              "first_time_authors_30d": null,
              "first_time_prs_merged_30d": null,
              "first_time_prs_decided_30d": null
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "88% of issues closed",
                "points": 36.8,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 88
                    }
                  }
                ],
                "max_points": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "390/427 decided PRs merged",
                "points": 27.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 390,
                      "decided": 427
                    }
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "no first-time contributor's PR decided in 30d",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_newcomer_prs",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/11 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": 60,
            "inputs": {
              "followers": 20,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "state-alchemists",
              "public_repos": 14,
              "account_age_days": 2679
            },
            "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": "20 followers of state-alchemists",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 20,
                      "login": "state-alchemists"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "14 public repos, account ~7 yr old",
                "points": 20.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 14
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 7
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "exceptional",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "zrb"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "647 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 647
                    }
                  }
                ],
                "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": "excellent",
        "name": "Engineering Quality",
        "value": 86,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": ".flake8",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".flake8"
                    }
                  }
                ],
                "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": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "code-generator",
                "task-runner",
                "automation",
                "llm"
              ],
              "has_wiki": false,
              "homepage": "https://pypi.org/project/zrb/",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://pypi.org/project/zrb/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "4 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 58,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "weak",
            "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": 47,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.7
            },
            "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": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/11 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "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": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow 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": "exceptional",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 207 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 207
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 2,
              "affected_packages": 1,
              "assessed_packages": 207,
              "unassessed_packages": 0,
              "affected_by_severity": "critical 1",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "exceptional",
            "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": 207,
              "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": "exceptional",
            "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"
              ],
              "commit_weight_rule": {
                "min_commits": 50,
                "min_commit_share": 0.1
              },
              "review_only_matches": 0,
              "below_threshold_exposures": [],
              "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": "moderate",
        "name": "AI Readiness",
        "value": 62,
        "weight": 0.04,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "moderate",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.33,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 15979
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, 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": "33 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 17.6,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 33,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "poetry.lock"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "pyrightconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".flake8",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".flake8"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "pyrightconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "pyrightconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, 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": 82,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 3164970,
              "source_files_sampled": 716,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python with type-check config (pyrightconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "pyrightconfig.json",
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/716 source files over 60KB",
                "points": 54.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 716,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "moderate",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": true,
              "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": 20,
                "status": "met",
                "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? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
      }
    ],
    "classification": {
      "labels": [
        "network-service",
        "mcp-server",
        "library"
      ],
      "scores": {
        "library": 6,
        "mcp-server": 7,
        "network-service": 8
      },
      "primary": "network-service",
      "evidence": [
        {
          "tier": "distribution",
          "label": "library",
          "source": "registry:pypi",
          "weight": 6
        },
        {
          "tier": "dependencies",
          "label": "mcp-server",
          "source": "dep:mcp",
          "weight": 4
        },
        {
          "tier": "dependencies",
          "label": "network-service",
          "source": "dep:fastapi",
          "weight": 4
        },
        {
          "tier": "dependencies",
          "label": "network-service",
          "source": "dep:starlette",
          "weight": 4
        },
        {
          "tier": "structure",
          "label": "mcp-server",
          "source": "mcp_signal",
          "weight": 3
        }
      ],
      "artifacts": [],
      "confidence": "medium",
      "host_extension": false,
      "runs_as_process": true,
      "consumed_by_code": true
    },
    "metrics_version": "2.3.1"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "deps.dev does not index pypi:zrb@2.51.0; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-31T10:05:49.728696Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/state-alchemists/zrb.svg",
  "full_name": "state-alchemists/zrb",
  "license_state": "absent",
  "license_spdx": null
}

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

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

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