Registro público
Informe de salud del softwareesquema 0.26.0 · métricas 1.13.0 · 2026-07-22 18:38 UTC

LayeredCraft / alexa-vox-craft

C#Apache-2.0★ 2 estrellas⑂ 0 forksdesde mar 2024Ver en GitHub ↗

LayeredCraft/alexa-vox-craft tiene un índice de salud de 64 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (84/100) y la más baja, Sustainability & Governance (48/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

64
global / 100
Moderado

Índice de salud del software

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

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

Perfil de puntuación

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

Titularidad

LayeredCraftOrganización
1 seguidor17 repositorios públicosdesde may 2025

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

Ecosistemas de paquetes

Métricas por categoría

Vitalidad

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

84Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
15.9/36Cadencia de commits — 23/52 semanas con commits
16.2/18Volumen de commits — 63 commits en el último año
5/10OpenSSF Scorecard: Maintained — 7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
Datos de entrada utilizados
commits_last_year63
human_commit_share0,97
days_since_last_push0
active_weeks_last_year23
Cómo se puntúa
27/27Publica versiones — 97 versiones publicadas
36/36Recencia de las versiones — última versión hace 26 días
27/27Cadencia de publicación — una versión cada ~11 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count97
latest_release_tagv7.3.6
releases_from_tagsno
days_since_latest_release26
mean_days_between_releases11
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?

49En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 2 estrellas
0/25Forks — 0 forks
0/15Observadores — 1 observadores
Datos de entrada utilizados
forks0
stars2
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (Apache-2.0)
18/18Guía CONTRIBUTING
13.5/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conduct
has_pull_request_template
Cómo se puntúa
53.5/80Descargas totales — 139.577 descargas históricas en nuget
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesAlexaVoxCraft.Http, AlexaVoxCraft.Model, AlexaVoxCraft.Smapi, AlexaVoxCraft.Lambda, AlexaVoxCraft.MediatR, AlexaVoxCraft.Model.Apl, AlexaVoxCraft.MinimalLambda, AlexaVoxCraft.Observability
dependents
ecosystemsnuget
total_downloads139.577
monthly_downloads
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?

48En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
31.2/46.8Resolución de issues — 67% de issues cerradas
22.9/38.3Aceptación de PR — 98/164 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/28 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs98
open_issues2
closed_issues4
issue_closed_ratio0,667
closed_unmerged_prs66
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
2.2/25Alcance del propietario — 1 seguidores de LayeredCraft
11.5/25Trayectoria — 17 repos públicos, cuenta de ~1 años
Datos de entrada utilizados
followers1
owner_typeOrganization
is_verified
owner_loginLayeredCraft
public_repos17
account_age_days427
Cómo se puntúa
25/25Publicado y resoluble — 8 paquete(s) en nuget
35/35Recencia de publicación — última publicación hace 26 días
20/20Historial de versiones — 48 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesAlexaVoxCraft.Http, AlexaVoxCraft.Model, AlexaVoxCraft.Smapi, AlexaVoxCraft.Lambda, AlexaVoxCraft.MediatR, AlexaVoxCraft.Model.Apl, AlexaVoxCraft.MinimalLambda, AlexaVoxCraft.Observability
ecosystemsnuget
any_deprecatedno
min_days_since_publish26

Calidad de Ingeniería

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

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

Documentación

65Moderado
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
10/10Topics — 5 topics
0/10Wiki
Datos de entrada utilizados
topicsaws, dotnet, layeredcraft, open-source, serverless
has_wikino
homepage
has_readme
has_docs_dir
has_descriptionno

Seguridad

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

70Bueno · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
6/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 24 out of 24 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/28 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
3.8/7.5Maintained — 7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
4/5SAST — SAST tool is not run on all commits -- score normalized to 8
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate6,2
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
advisories0
affected_packages0
assessed_packages34
unassessed_packages32
affected_by_severitynone
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 34 dependencias resueltas con OSV. 32 no pudieron evaluarse: sin versión resuelta, ecosistema no admitido o fuera de la lista de paquetes informada. 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? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

76Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 86 de 97 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,887
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes19.495
Cómo se puntúa
12.6/18Arranque con un solo comando — samples/Sample.Apl.Function/Sample.Apl.Function.csproj, samples/Sample.Fact.InSkill.Purchases/Sample.Fact.InSkill.Purchases.csproj, samples/Sample.Generated.Function/Sample.Generated.Function.csproj (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — C# (tipado estático)
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 56 de los últimos 100 commits con autoría o crédito de agente
8/8Mantenimiento automatizado — 3 de los últimos 100 commits son 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
lockfilesuv.lock
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,56
toolchain_manifestssamples/Sample.Apl.Function/Sample.Apl.Function.csproj, samples/Sample.Fact.InSkill.Purchases/Sample.Fact.InSkill.Purchases.csproj, samples/Sample.Generated.Function/Sample.Generated.Function.csproj, samples/Sample.Host.Function/Sample.Host.Function.csproj, samples/Sample.Skill.Function/Sample.Skill.Function.csproj, src/AlexaVoxCraft.Http/AlexaVoxCraft.Http.csproj, src/AlexaVoxCraft.InSkillPurchasing/AlexaVoxCraft.InSkillPurchasing.csproj, src/AlexaVoxCraft.Lambda/AlexaVoxCraft.Lambda.csproj, src/AlexaVoxCraft.MediatR.Generators/AlexaVoxCraft.MediatR.Generators.csproj, src/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj, src/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj, src/AlexaVoxCraft.MinimalLambda/AlexaVoxCraft.MinimalLambda.csproj, src/AlexaVoxCraft.Model.Apl/AlexaVoxCraft.Model.Apl.csproj, src/AlexaVoxCraft.Model.InSkillPurchasing/AlexaVoxCraft.Model.InSkillPurchasing.csproj, src/AlexaVoxCraft.Model/AlexaVoxCraft.Model.csproj, src/AlexaVoxCraft.Observability/AlexaVoxCraft.Observability.csproj, src/AlexaVoxCraft.Smapi/AlexaVoxCraft.Smapi.csproj, test/AlexaVoxCraft.Http.TestKit/AlexaVoxCraft.Http.TestKit.csproj, test/AlexaVoxCraft.InSkillPurchasing.Tests/AlexaVoxCraft.InSkillPurchasing.Tests.csproj, test/AlexaVoxCraft.MediatR.Generator.Tests/AlexaVoxCraft.MediatR.Generator.Tests.csproj, test/AlexaVoxCraft.MediatR.Lambda.Tests/AlexaVoxCraft.MediatR.Lambda.Tests.csproj, test/AlexaVoxCraft.MediatR.Tests/AlexaVoxCraft.MediatR.Tests.csproj, test/AlexaVoxCraft.Model.Apl.Legacy.Tests/AlexaVoxCraft.Model.Apl.Legacy.Tests.csproj, test/AlexaVoxCraft.Model.Apl.Tests/AlexaVoxCraft.Model.Apl.Tests.csproj, test/AlexaVoxCraft.Model.InSkillPurchasing.Tests/AlexaVoxCraft.Model.InSkillPurchasing.Tests.csproj, test/AlexaVoxCraft.Model.Legacy.Tests/AlexaVoxCraft.Model.Legacy.Tests.csproj, test/AlexaVoxCraft.Model.Tests/AlexaVoxCraft.Model.Tests.csproj, test/AlexaVoxCraft.Smapi.Tests/AlexaVoxCraft.Smapi.Tests.csproj, test/AlexaVoxCraft.TestKit/AlexaVoxCraft.TestKit.csproj
dependency_bot_commit_share0,03
Cómo se puntúa
45/45Código verificable por tipos — C# (tipado estático)
55/55Tamaños de archivo manejables — 0/1006 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageC#
largest_source_bytes22.660
source_files_sampled1006
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples, samples
Datos de entrada utilizados
example_dirsexamples, samples
has_mcp_signalno
api_schema_files

Datos clave

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

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch pypi package 'alexa-vox-craft-docs' from its registry

Más detalle

OpenSSF Scorecard 6.2 / 10
6.2agregado

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-22 18:38 UTC

10Binary-Artifactsno binaries found in the repo
8Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests24 out of 24 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/28 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
5Maintained7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
8SASTSAST tool is not run on all commits -- score normalized to 8
10Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Dependencias directas 25
RegistroPaqueteRestricción de versiónManifiesto
PyPImkdocs-material>=9.0.0pyproject.toml
PyPImkdocs-minify-plugin>=0.7.0pyproject.toml
NuGetLayeredCraft.StructuredLoggingsrc/AlexaVoxCraft.Http/AlexaVoxCraft.Http.csproj
NuGetMicrosoft.Extensions.Httpsrc/AlexaVoxCraft.Http/AlexaVoxCraft.Http.csproj
NuGetAmazon.Lambda.Coresrc/AlexaVoxCraft.Lambda/AlexaVoxCraft.Lambda.csproj
NuGetLayeredCraft.StructuredLoggingsrc/AlexaVoxCraft.Lambda/AlexaVoxCraft.Lambda.csproj
NuGetSerilogsrc/AlexaVoxCraft.Lambda/AlexaVoxCraft.Lambda.csproj
NuGetMicrosoft.CodeAnalysis.Analyzerssrc/AlexaVoxCraft.MediatR.Generators/AlexaVoxCraft.MediatR.Generators.csproj
NuGetMicrosoft.CodeAnalysis.CSharpsrc/AlexaVoxCraft.MediatR.Generators/AlexaVoxCraft.MediatR.Generators.csproj
NuGetAmazon.Lambda.RuntimeSupportsrc/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj
NuGetAmazon.Lambda.Serialization.SystemTextJsonsrc/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj
NuGetLayeredCraft.Logging.CompactJsonFormattersrc/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj
NuGetSerilog.AspNetCoresrc/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj
NuGetSerilog.Enrichers.Activitysrc/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj
NuGetMicrosoft.Extensions.Hostingsrc/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj
NuGetLayeredCraft.StructuredLoggingsrc/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj
NuGetMicrosoft.Extensions.Configuration.Bindersrc/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj
NuGetMicrosoft.Extensions.DependencyInjection.Abstractionssrc/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj
NuGetMicrosoft.Extensions.Optionssrc/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj
NuGetOpenTelemetry.Apisrc/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj
NuGetMinimalLambdasrc/AlexaVoxCraft.MinimalLambda/AlexaVoxCraft.MinimalLambda.csproj
NuGetOpenTelemetrysrc/AlexaVoxCraft.Observability/AlexaVoxCraft.Observability.csproj
NuGetMicrosoft.Extensions.Configuration.Bindersrc/AlexaVoxCraft.Smapi/AlexaVoxCraft.Smapi.csproj
NuGetMicrosoft.Extensions.DependencyInjection.Abstractionssrc/AlexaVoxCraft.Smapi/AlexaVoxCraft.Smapi.csproj
NuGetMicrosoft.Extensions.Optionssrc/AlexaVoxCraft.Smapi/AlexaVoxCraft.Smapi.csproj
Todas las dependencias 66

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

RegistroPaqueteVersiónRelación
NuGetAmazon.Lambda.Coredirecta
NuGetAmazon.Lambda.RuntimeSupportdirecta
NuGetAmazon.Lambda.Serialization.SystemTextJsondirecta
NuGetLayeredCraft.Logging.CompactJsonFormatterdirecta
NuGetLayeredCraft.StructuredLoggingdirecta
NuGetMicrosoft.CodeAnalysis.Analyzersdirecta
NuGetMicrosoft.CodeAnalysis.CSharpdirecta
NuGetMicrosoft.Extensions.Configuration.Binderdirecta
NuGetMicrosoft.Extensions.DependencyInjection.Abstractionsdirecta
NuGetMicrosoft.Extensions.Hostingdirecta
NuGetMicrosoft.Extensions.Httpdirecta
NuGetMicrosoft.Extensions.Optionsdirecta
NuGetMinimalLambdadirecta
NuGetOpenTelemetrydirecta
NuGetOpenTelemetry.Apidirecta
NuGetSerilogdirecta
NuGetSerilog.AspNetCoredirecta
NuGetSerilog.Enrichers.Activitydirecta
PyPImkdocs-material9.7.7directa
PyPImkdocs-minify-plugin0.8.0directa
NuGetAutoFixtureindirecta
NuGetAutoFixture.AutoNSubstituteindirecta
NuGetAutoFixture.Xunit3indirecta
NuGetAwesomeAssertionsindirecta
NuGetBasic.Reference.Assemblies.Net100indirecta
NuGetBasic.Reference.Assemblies.Net110indirecta
NuGetBasic.Reference.Assemblies.Net80indirecta
NuGetBasic.Reference.Assemblies.Net90indirecta
NuGetMicrosoft.ICU.ICU4C.Runtimeindirecta
NuGetNSubstituteindirecta
NuGetOpenTelemetry.Exporter.InMemoryindirecta
NuGetSerilog.Sinks.Consoleindirecta
NuGetVerify.SourceGeneratorsindirecta
NuGetVerify.XunitV3indirecta
PyPIalexa-vox-craft-docs0.0.0indirecta
PyPIbabel2.18.0indirecta
PyPIbackrefs7.0indirecta
PyPIcertifi2026.7.22indirecta
PyPIcharset-normalizer3.4.9indirecta
PyPIclick8.4.2indirecta
PyPIcolorama0.4.6indirecta
PyPIcsscompressor0.9.5indirecta
PyPIghp-import2.1.0indirecta
PyPIhtmlmin20.1.13indirecta
PyPIidna3.18indirecta
PyPIjinja23.1.6indirecta
PyPIjsmin3.0.1indirecta
PyPImarkdown3.10.2indirecta
PyPImarkupsafe3.0.3indirecta
PyPImergedeep1.3.4indirecta
PyPImkdocs1.6.1indirecta
PyPImkdocs-get-deps0.2.2indirecta
PyPImkdocs-material-extensions1.3.1indirecta
PyPIpackaging26.2indirecta
PyPIpaginate0.5.7indirecta
PyPIpathspec1.1.1indirecta
PyPIplatformdirs4.11.0indirecta
PyPIpygments2.20.0indirecta
PyPIpymdown-extensions11.0.1indirecta
PyPIpython-dateutil2.9.0.post0indirecta
PyPIpyyaml6.0.3indirecta
PyPIpyyaml-env-tag1.1indirecta
PyPIrequests2.34.2indirecta
PyPIsix1.17.0indirecta
PyPIurllib32.7.0indirecta
PyPIwatchdog6.0.0indirecta
Avisos de dependencias 0

Este repositorio no publica ningún paquete que el índice resuelva, así que se evaluó su propio grafo de dependencias — 34 paquetes, que incluyen también fijaciones de desarrollo y prueba que nunca se distribuyen: 0 tienen avisos conocidos, de los cuales 0 son directas. 32 no pudieron evaluarse: sin versión resuelta, ecosistema no admitido, o fuera de la lista de paquetes informada.

Ningún aviso conocido afecta a las dependencias evaluadas.

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": [
        "aws",
        "dotnet",
        "layeredcraft",
        "open-source",
        "serverless"
      ],
      "is_fork": false,
      "size_kb": 3960,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "C#": 1564411
      },
      "pushed_at": "2026-07-22T16:42:53Z",
      "created_at": "2024-03-21T18:49:55Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-22T16:44:10Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "C#",
      "significant_languages": [
        "C#"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "Organization",
      "login": "LayeredCraft",
      "company": null,
      "location": "United States of America",
      "followers": 1,
      "avatar_url": "https://avatars.githubusercontent.com/u/212735200?v=4",
      "created_at": "2025-05-21T14:02:38Z",
      "is_verified": null,
      "public_repos": 17,
      "account_age_days": 427
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v7.3.6",
          "kind": "patch",
          "published_at": "2026-06-26T12:49:04Z"
        },
        {
          "tag": "v7.3.5",
          "kind": "patch",
          "published_at": "2026-05-22T12:17:07Z"
        },
        {
          "tag": "v7.3.4",
          "kind": "patch",
          "published_at": "2026-05-16T01:46:07Z"
        },
        {
          "tag": "v7.3.3",
          "kind": "patch",
          "published_at": "2026-05-01T00:09:57Z"
        },
        {
          "tag": "v7.3.2",
          "kind": "patch",
          "published_at": "2026-04-20T12:47:47Z"
        },
        {
          "tag": "v7.3.1",
          "kind": "patch",
          "published_at": "2026-04-20T12:14:49Z"
        },
        {
          "tag": "v7.3.0.129",
          "kind": "other",
          "published_at": "2026-04-14T20:24:59Z"
        },
        {
          "tag": "v7.2.1.128",
          "kind": "other",
          "published_at": "2026-04-08T12:07:16Z"
        },
        {
          "tag": "v7.2.0.127",
          "kind": "other",
          "published_at": "2026-03-23T19:53:45Z"
        },
        {
          "tag": "v7.1.0.126",
          "kind": "other",
          "published_at": "2026-03-19T02:46:49Z"
        },
        {
          "tag": "v7.1.0-preview.125",
          "kind": "prerelease",
          "published_at": "2026-03-18T19:17:03Z"
        },
        {
          "tag": "v7.0.5.124",
          "kind": "other",
          "published_at": "2026-03-16T00:51:39Z"
        },
        {
          "tag": "v7.0.4.123",
          "kind": "other",
          "published_at": "2026-03-15T02:07:41Z"
        },
        {
          "tag": "v7.0.3.122",
          "kind": "other",
          "published_at": "2026-03-09T18:41:24Z"
        },
        {
          "tag": "v7.0.3-beta.121",
          "kind": "prerelease",
          "published_at": "2026-03-05T15:27:02Z"
        },
        {
          "tag": "v7.0.2-beta.120",
          "kind": "prerelease",
          "published_at": "2026-03-04T13:44:54Z"
        },
        {
          "tag": "v7.0.1-beta.119",
          "kind": "prerelease",
          "published_at": "2026-03-03T17:40:46Z"
        },
        {
          "tag": "v7.0.0-beta.118",
          "kind": "prerelease",
          "published_at": "2026-03-03T13:43:33Z"
        },
        {
          "tag": "v6.0.2.117",
          "kind": "other",
          "published_at": "2026-02-25T21:35:30Z"
        },
        {
          "tag": "v6.0.2.116",
          "kind": "other",
          "published_at": "2026-02-11T14:49:41Z"
        },
        {
          "tag": "v6.0.1.115",
          "kind": "other",
          "published_at": "2026-02-09T18:28:38Z"
        },
        {
          "tag": "v6.0.1.114",
          "kind": "other",
          "published_at": "2026-01-12T17:22:38Z"
        },
        {
          "tag": "v6.0.1-beta.113",
          "kind": "prerelease",
          "published_at": "2026-01-12T13:44:47Z"
        },
        {
          "tag": "v6.0.0.112",
          "kind": "other",
          "published_at": "2026-01-12T13:01:28Z"
        },
        {
          "tag": "v6.0.0-beta.111",
          "kind": "prerelease",
          "published_at": "2026-01-10T21:32:48Z"
        },
        {
          "tag": "v6.0.0-beta.110",
          "kind": "prerelease",
          "published_at": "2026-01-09T20:59:47Z"
        },
        {
          "tag": "v6.0.0-beta.109",
          "kind": "prerelease",
          "published_at": "2026-01-08T18:39:03Z"
        },
        {
          "tag": "v6.0.0-beta.108",
          "kind": "prerelease",
          "published_at": "2026-01-07T22:05:10Z"
        },
        {
          "tag": "v5.1.1.107",
          "kind": "other",
          "published_at": "2026-01-05T14:51:18Z"
        },
        {
          "tag": "v5.1.0.106",
          "kind": "other",
          "published_at": "2025-12-18T14:41:09Z"
        },
        {
          "tag": "v5.1.0-beta.105",
          "kind": "prerelease",
          "published_at": "2025-12-17T14:52:53Z"
        },
        {
          "tag": "v5.1.0-beta.104",
          "kind": "prerelease",
          "published_at": "2025-12-15T21:17:38Z"
        },
        {
          "tag": "v5.1.0-beta.103",
          "kind": "prerelease",
          "published_at": "2025-12-15T17:29:43Z"
        },
        {
          "tag": "v5.1.0-beta.102",
          "kind": "prerelease",
          "published_at": "2025-12-15T16:19:05Z"
        },
        {
          "tag": "v5.1.0-beta.101",
          "kind": "prerelease",
          "published_at": "2025-12-12T17:51:16Z"
        },
        {
          "tag": "v5.0.1.100",
          "kind": "other",
          "published_at": "2025-12-10T16:11:16Z"
        },
        {
          "tag": "v5.0.0.99",
          "kind": "other",
          "published_at": "2025-12-01T22:57:58Z"
        },
        {
          "tag": "v5.0.0.98",
          "kind": "other",
          "published_at": "2025-12-01T22:02:20Z"
        },
        {
          "tag": "v5.0.0-beta.97",
          "kind": "prerelease",
          "published_at": "2025-12-01T18:54:53Z"
        },
        {
          "tag": "v5.0.0-beta.96",
          "kind": "prerelease",
          "published_at": "2025-12-01T17:40:19Z"
        },
        {
          "tag": "v5.0.0-beta.95",
          "kind": "prerelease",
          "published_at": "2025-12-01T16:00:56Z"
        },
        {
          "tag": "v5.0.0-beta.94",
          "kind": "prerelease",
          "published_at": "2025-12-01T14:43:42Z"
        },
        {
          "tag": "v5.0.0-beta.93",
          "kind": "prerelease",
          "published_at": "2025-12-01T12:54:26Z"
        },
        {
          "tag": "v5.0.0-beta.92",
          "kind": "prerelease",
          "published_at": "2025-11-30T15:40:37Z"
        },
        {
          "tag": "v5.0.0-beta.91",
          "kind": "prerelease",
          "published_at": "2025-11-29T04:50:06Z"
        },
        {
          "tag": "v4.3.1.90",
          "kind": "other",
          "published_at": "2025-11-29T04:29:08Z"
        },
        {
          "tag": "v4.3.1.89",
          "kind": "other",
          "published_at": "2025-11-24T01:17:43Z"
        },
        {
          "tag": "v4.3.0.88",
          "kind": "other",
          "published_at": "2025-11-23T03:24:26Z"
        },
        {
          "tag": "v4.2.0.87",
          "kind": "other",
          "published_at": "2025-11-21T20:28:26Z"
        },
        {
          "tag": "v4.1.3.86",
          "kind": "other",
          "published_at": "2025-11-21T19:45:41Z"
        },
        {
          "tag": "v4.1.3.84",
          "kind": "other",
          "published_at": "2025-11-11T21:11:10Z"
        },
        {
          "tag": "v4.1.2.83",
          "kind": "other",
          "published_at": "2025-10-27T12:15:46Z"
        },
        {
          "tag": "v4.1.1.82",
          "kind": "other",
          "published_at": "2025-10-27T02:56:51Z"
        },
        {
          "tag": "v4.1.0.78",
          "kind": "other",
          "published_at": "2025-10-23T00:21:06Z"
        },
        {
          "tag": "v4.1.0-preview.77",
          "kind": "prerelease",
          "published_at": "2025-10-22T23:44:33Z"
        },
        {
          "tag": "v4.1.0-alpha.76",
          "kind": "prerelease",
          "published_at": "2025-10-22T19:23:38Z"
        },
        {
          "tag": "v4.1.0-alpha.75",
          "kind": "prerelease",
          "published_at": "2025-10-22T01:22:02Z"
        },
        {
          "tag": "v4.0.0.73",
          "kind": "other",
          "published_at": "2025-09-11T13:41:39Z"
        },
        {
          "tag": "v4.0.0-preview.72",
          "kind": "prerelease",
          "published_at": "2025-09-10T19:17:55Z"
        },
        {
          "tag": "v3.2.1.71",
          "kind": "other",
          "published_at": "2025-08-30T01:19:05Z"
        },
        {
          "tag": "v3.2.0.70",
          "kind": "other",
          "published_at": "2025-08-29T02:49:03Z"
        },
        {
          "tag": "v3.2.0.69",
          "kind": "other",
          "published_at": "2025-08-29T02:32:17Z"
        },
        {
          "tag": "v3.2.0-preview.68",
          "kind": "prerelease",
          "published_at": "2025-08-28T19:13:14Z"
        },
        {
          "tag": "v3.2.0-preview.67",
          "kind": "prerelease",
          "published_at": "2025-08-28T17:09:06Z"
        },
        {
          "tag": "v3.2.0-preview.66",
          "kind": "prerelease",
          "published_at": "2025-08-28T15:07:16Z"
        },
        {
          "tag": "v3.2.0-preview.65",
          "kind": "prerelease",
          "published_at": "2025-08-28T11:59:36Z"
        },
        {
          "tag": "v3.1.0.64",
          "kind": "other",
          "published_at": "2025-08-25T13:10:15Z"
        },
        {
          "tag": "v3.0.0.63",
          "kind": "other",
          "published_at": "2025-07-15T00:18:04Z"
        },
        {
          "tag": "v2.0.1.62",
          "kind": "other",
          "published_at": "2025-07-11T00:24:18Z"
        },
        {
          "tag": "v2.0.0.61",
          "kind": "other",
          "published_at": "2025-07-02T14:14:42Z"
        },
        {
          "tag": "v2.0.0.59",
          "kind": "other",
          "published_at": "2025-07-01T12:28:57Z"
        },
        {
          "tag": "v2.0.0.58",
          "kind": "other",
          "published_at": "2025-07-01T12:21:46Z"
        },
        {
          "tag": "v2.0.0-beta.57",
          "kind": "prerelease",
          "published_at": "2025-06-30T20:47:11Z"
        },
        {
          "tag": "v2.0.0-beta.56",
          "kind": "prerelease",
          "published_at": "2025-06-23T19:56:23Z"
        },
        {
          "tag": "v2.0.0-beta.55",
          "kind": "prerelease",
          "published_at": "2025-06-23T17:49:13Z"
        },
        {
          "tag": "v1.0.1.54",
          "kind": "other",
          "published_at": "2025-05-21T15:19:53Z"
        },
        {
          "tag": "v1.0.1.53",
          "kind": "other",
          "published_at": "2025-05-19T13:06:22Z"
        },
        {
          "tag": "v1.0.1-beta.52",
          "kind": "prerelease",
          "published_at": "2025-05-19T12:56:36Z"
        },
        {
          "tag": "v1.0.1.50",
          "kind": "other",
          "published_at": "2025-05-13T19:16:31Z"
        },
        {
          "tag": "v1.0.1.49",
          "kind": "other",
          "published_at": "2025-05-13T19:01:57Z"
        },
        {
          "tag": "v1.0.1-beta.48",
          "kind": "prerelease",
          "published_at": "2025-05-13T18:37:18Z"
        },
        {
          "tag": "v1.0.1-beta.47",
          "kind": "prerelease",
          "published_at": "2025-05-13T17:56:33Z"
        },
        {
          "tag": "v1.0.1-beta.46",
          "kind": "prerelease",
          "published_at": "2025-05-13T17:42:54Z"
        },
        {
          "tag": "v1.0.1-beta.45",
          "kind": "prerelease",
          "published_at": "2025-05-13T17:25:10Z"
        },
        {
          "tag": "v1.0.1-beta.44",
          "kind": "prerelease",
          "published_at": "2025-05-13T16:23:20Z"
        },
        {
          "tag": "v1.0.0.43",
          "kind": "other",
          "published_at": "2025-05-08T18:04:57Z"
        },
        {
          "tag": "v1.0.0.42",
          "kind": "other",
          "published_at": "2025-05-07T20:29:17Z"
        },
        {
          "tag": "v1.0.0.41",
          "kind": "other",
          "published_at": "2025-04-21T14:23:14Z"
        },
        {
          "tag": "v1.0.0-beta.40",
          "kind": "prerelease",
          "published_at": "2025-04-21T14:18:09Z"
        },
        {
          "tag": "v0.3.0-beta.38",
          "kind": "prerelease",
          "published_at": "2025-04-17T16:59:01Z"
        },
        {
          "tag": "v0.3.0-beta.37",
          "kind": "prerelease",
          "published_at": "2025-04-17T13:32:14Z"
        },
        {
          "tag": "v0.3.0-beta.36",
          "kind": "prerelease",
          "published_at": "2025-04-17T13:02:43Z"
        },
        {
          "tag": "v0.3.0-beta.35",
          "kind": "prerelease",
          "published_at": "2025-04-15T15:36:56Z"
        },
        {
          "tag": "v0.3.0-beta.34",
          "kind": "prerelease",
          "published_at": "2025-04-09T18:50:55Z"
        },
        {
          "tag": "v0.2.0-alpha.28",
          "kind": "prerelease",
          "published_at": "2025-04-09T14:18:52Z"
        },
        {
          "tag": "v0.2.0-alpha.27",
          "kind": "prerelease",
          "published_at": "2025-04-07T14:54:25Z"
        },
        {
          "tag": "v0.2.0-alpha.26",
          "kind": "prerelease",
          "published_at": "2025-04-03T15:34:17Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "c33da5ed07bd2f4b554eea8607531ceb9e6426ef",
          "body": "…tiple ecosystems (#170)\n\nchore(deps): bump the infrastructure group with 6 updates\n\nBumps the infrastructure group with 6 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [actions/checkout](https://github.com/actions/checkout) | `4` | `7.0.0` |\n| [actions/setup-python](https://github.com/act\n[…]\nsion-update:semver-major\n  dependency-group: infrastructure\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): Bump the \"infrastructure\" group with 1 update across mul…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-22T16:42:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "333b6facd0e68494a5e0ec458398fe1077265a54",
          "body": "* ci(github): configure dependabot automation\n\n* ci(github): narrow microsoft extension ranges\n\n* ci(github): align serilog aspnetcore ranges",
          "is_bot": false,
          "headline": "ci(github): configure dependabot automation (#169)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-07-22T16:35:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a53c329b15e3ba2a70d331ca35bcaf649d9273fb",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(github): update devops-templates refs to v10.1",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-06-26T13:14:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "52d57c721a9d34a27f08f0c52b86fb87e561f236",
          "body": "…#166)\n\nSplit publish jobs into build (shared template) and push (composite\naction) so OIDC job_workflow_ref matches the NuGet trusted publisher\npolicy. Version-bump-only for pr-build, pr-title-check, release-drafter.\nIncludes package updates from Directory.Packages.props.\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: upgrade devops-templates to v10.0 with NuGet trusted publishing (…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-06-26T12:44:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bff86e8d3f528682594e84515a08ffaa74f2cde6",
          "body": "* build(deps): update dependency baselines\n\nUpdate AWS Lambda package versions, Verify.XunitV3, and Basic.Reference.Assemblies package baselines.\n\nNormalize the generator test project reference assembly item ordering.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <n\n[…]\ncommit to retrigger CI/CD validation.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(deps): update dependency baselines (#162)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-05-22T12:13:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4cb12f25fff649b6f2aaca459a46cce60b06f5c3",
          "body": "…o v8.2, bump version to 7.3.4 (#161)\n\n- Bump AWS Lambda packages to v3 (Core, RuntimeSupport, Serialization)\n- Update LayeredCraft packages (CompactJsonFormatter 1.1.2, StructuredLogging 1.2.1)\n- Update Microsoft.SourceLink.GitHub to 10.0.300\n- Update Microsoft.Extensions.* for net9 (9.0.16), net10\n[…]\nSdk to 18.5.1\n- Bump MinimalLambda to 2.5.0\n- Pin devops-templates workflow refs from @main to @v8.2\n- Bump VersionPrefix from 7.3.0 to 7.3.4\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(deps,ci): update packages from v7.3.3 baseline, pin workflows t…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-05-16T01:43:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c57f173f7e158d3e3392f8097083ac8d41be4a52",
          "body": "… (#156)\n\n* fix(generator): support accessible internal source types and update dependencies\n\n* fix(generator): exclude nested types in file-local containers",
          "is_bot": false,
          "headline": "fix(generator): support internal source accessibility and update deps…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-05-01T00:06:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac17472604b2123c35355aa17391dc0d01b9edb6",
          "body": "…ollution (#153)\n\n* fix(tests): guard LambdaExecution span lookup against parallel-test pollution\n\nActivitySource.AddActivityListener is process-global — a concurrent test's\nsuccessful LambdaExecution span (Ok status) can appear first in the\nactivities list, causing FirstOrDefault to return the wron\n[…]\n<noreply@anthropic.com>\n\n* ci(github): pin devops-templates workflows to main instead of v8.0\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tests): guard LambdaExecution span lookup against parallel-test p…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-04-20T12:47:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f372f6acf24cd367eb24d400f94e5a009c86658a",
          "body": "…l-test pollution\"\n\nThis reverts commit 5ef3ee041cd92b814e6741f81db4ff95f716b10b.",
          "is_bot": false,
          "headline": "Revert \"fix(tests): guard LambdaExecution span lookup against paralle…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-04-20T12:34:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ef3ee041cd92b814e6741f81db4ff95f716b10b",
          "body": "…ollution\n\nActivitySource.AddActivityListener is global — a concurrent test's successful\nLambdaExecution span (Ok status) can appear first in the activities list,\ncausing FirstOrDefault to return the wrong span.\n\nFilter by Error status so the assertion finds the span produced by this\ntest's throwing handler regardless of other tests running in parallel.\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tests): guard LambdaExecution span lookup against parallel-test p…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-04-20T12:34:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "de657ad8fe2018359acbc3aceab24cfd08871c1e",
          "body": "….0 (#152)\n\n* ci: add release-drafter configuration\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n* build: add net11.0 multi-targeting and upgrade CI to v8.0 templates\n\n- Add net11.0 to all src/test project TargetFrameworks\n- Add net11.0 preview package versions to Directory.Packages.props\n- Upda\n[…]\nps. Generators project excluded via\nMSBuildProjectName condition; sample projects unaffected.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add net11.0 multi-targeting and upgrade CI to devops-templates v8…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-04-20T12:13:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1988f4c0bfdbddebba189f8590168fd2a8f4e992",
          "body": "…150)\n\n* feat(smapi): add HttpClientBuilder customization for SMAPI clients\n\n* fix(source-generators): support referenced assembly discovery across settingsAction forms\n\nUse semantic parameter binding to resolve settingsAction regardless of argument position and add cross-assembly generator coverage\n[…]\nleases in central package management.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(smapi): add HttpClientBuilder customization for SMAPI clients (#…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-04-14T20:22:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "716e27f0ae46ed7096c7ee8390783cca9198dc9f",
          "body": "…rsion (#146)\n\nChanges AddSingleton to AddScoped for IAccessTokenProvider in both\nInSkillPurchasing and Smapi to ensure per-request access token isolation.\nAlso bumps OpenTelemetry packages to 1.15.1 and Verify.XunitV3 to 31.15.0.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: change IAccessTokenProvider lifetime to scoped and bump patch ve…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-04-08T12:05:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "51e17dea0af1f1ecb4415791caf4ea4487b36894",
          "body": "`UpsellDirective` was missing `upsellMessage` as a constructor parameter,\nmeaning callers had to manually override `Payload` to set it. All three\nparameters (`productId`, `upsellMessage`, `token`) are now required and\nnon-nullable. The message is passed directly to `PaymentPayload`.\n\nBREAKING CHANGE\n[…]\ntring token)`.\nCallers must add `upsellMessage` as the second argument.\n\nBumps version to 7.2.0.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(isp)!: require upsellMessage in UpsellDirective constructor (#143)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-03-23T19:51:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d9e51e8bb367ee15e3ee804f5b9e256d11446c5c",
          "body": "Co-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(build): promote version 7.1.0-preview to stable 7.1.0",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-03-19T02:44:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5c11b7703bd44abdc1ee714fa947839339c9b92c",
          "body": "…onse support (#141)\n\nAdds IAlexaSkillInvocationClient and AlexaSkillInvocationClient for invoking\nAlexa skills via the SMAPI Skill Invocation API, with generic SkillInvocationRequest<T>\nand SkillInvocationResponse<T> models, DI registration, and comprehensive unit tests.\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(smapi): add AlexaSkillInvocationClient with generic request/resp…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-03-18T19:14:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d894c2a051125f6b0855882a55d1353643d9a2f8",
          "body": "…nterceptor compatibility (#140)\n\nfix(deps): revert Microsoft.CodeAnalysis.CSharp to 5.0.0 and bump version\n\nMicrosoft.CodeAnalysis.CSharp 5.3.0 broke the InterceptsLocation interceptor\nmechanism in consuming applications. Revert to 5.0.0 which is known to work\ncorrectly with the source generator interception pattern.\n\nVersion bump: 7.0.4 -> 7.0.5\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(deps): revert Microsoft.CodeAnalysis.CSharp to 5.0.0 to restore i…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-03-16T00:49:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f82a1ab4e80994453d856f5bb77756a3e3a02041",
          "body": "…response interceptors (#139)\n\n* fix(source-generators): apply AlexaHandlerAttribute Order to request/response interceptors\n\nThe Order property on AlexaHandlerAttribute was silently ignored for\nIRequestInterceptor and IResponseInterceptor registrations. TypeRegistration\nlacked an Order field, so int\n[…]\ncks out LF). Also reverts the ScrubLinesContaining bandaid\nsince the root cause is now fixed.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(source-generators): apply AlexaHandlerAttribute Order to request/…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-03-15T02:05:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "50b459a05d33871c538c277f15d5eef13c657d14",
          "body": "Removing the beta from the version.",
          "is_bot": false,
          "headline": "Update Directory.Build.props",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-03-09T18:38:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46cf1b34749dc5e5281b9e93618341150475db56",
          "body": "…n (#137)\n\n* feat(core): add APL component trait interfaces and composition pattern\n\nIntroduces IMultiChildComponent, IActionableComponent, and ITouchableComponent\ninterfaces with corresponding sealed trait classes (MultiChildComponentTrait,\nActionableComponentTrait, TouchableComponentTrait) to supp\n[…]\n: Claude <noreply@anthropic.com>\n\n* feat(core): register FlexSequence type info in APLSupport\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(core): add APL component trait interfaces and composition patter…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-03-05T15:24:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9f72489fae57afc010cf3c8ace456a1394afa76d",
          "body": "Adds support for newer APL document specification versions and bumps\nversion to 7.0.2-beta.\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(core): add APL document versions 2023.3, 2024.2, and 2024.3 (#136)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-03-04T13:42:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e79b65d6b7a74081235c6bfcfe131b825c44050d",
          "body": "* feat: add slot sample utterances support to SlotBuilder\n\nAdd WithSample/WithSamples fluent methods to SlotBuilder and a Samples\nproperty to IntentSlot to support per-slot sample utterances in the\nAlexa interaction model JSON.\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n* chore: bump version to 7.0.1-beta\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(core): add slot sample utterances support to SlotBuilder (#135)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-03-03T17:38:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "28ee2cd5038bcd8f60e2c88d91456d988f53b17f",
          "body": "…ages (#134)\n\n* feat: add AlexaVoxCraft.Http and AlexaVoxCraft.InSkillPurchasing packages\n\n- Extract shared HTTP infrastructure (BearerTokenHandler, BaseClient,\n  IAccessTokenProvider) from Smapi into new AlexaVoxCraft.Http package\n- Add AlexaVoxCraft.InSkillPurchasing package with full ISP client,\n\n[…]\nr snapshot files after solution formatting\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>\nCo-authored-by: Claude Code <claude@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add AlexaVoxCraft.Http and AlexaVoxCraft.InSkillPurchasing pack…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-03-03T13:41:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "028838043c4bd6b043f8b5c3b86ab90d92be1580",
          "body": "Bumps AwesomeAssertions from 9.3.0 to 9.4.0\nBumps Microsoft.NET.Test.Sdk from 18.0.1 to 18.3.0\nBumps Serilog.AspNetCore from 9.0.0 to 10.0.0\nBumps Verify.XunitV3 from 31.12.4 to 31.13.2\n\n---\nupdated-dependencies:\n- dependency-name: AwesomeAssertions\n  dependency-version: 9.4.0\n  dependency-type: dir\n[…]\nype: version-update:semver-minor\n  dependency-group: dotnet\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump the dotnet group with 4 updates (#133)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-02-25T21:31:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b84a5b3a9712c89f27a1c6c84f3963aa2c976905",
          "body": "Update package versions for the 6.0.2 release:\n- LayeredCraft.Logging.CompactJsonFormatter 1.0.3.8 → 1.0.4.9\n- LayeredCraft.StructuredLogging 1.1.6.17 → 1.1.7.18\n- Serilog 4.3.0 → 4.3.1\n- Microsoft.SourceLink.GitHub 10.0.102 → 10.0.103\n- Microsoft.Extensions.* (net9.0) 9.0.12 → 9.0.13\n- Microsoft.Extensions.* (net10.0) 10.0.2 → 10.0.3\n- Verify.XunitV3 31.12.3 → 31.12.4\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(deps): update dependencies and bump version to 6.0.2 (#130)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-02-11T14:45:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0431f0fef467dadb82215021f2e037ed8f0a257e",
          "body": "* chore(deps): adopt central package management\n\nIntroduce Directory.Packages.props and remove per-project package version pins to simplify dependency updates.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n* chore(docs): remove converter mig\n[…]\nedCraft.Logging.CompactJsonFormatter.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(deps): adopt central package management (#129)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-02-09T18:24:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eb6dd6721a00051069ecd79010c30637d24cf536",
          "body": "…n 6.0.1 (#124)\n\nUpdate MinimalLambda dependency from beta to stable version 2.2.0 and remove -beta suffix from version prefix.\n\nChanges:\n- MinimalLambda: 2.2.0-beta.1 → 2.2.0 (stable)\n- VersionPrefix: 6.0.1-beta → 6.0.1 (stable)\n\nThis marks the stable release of AlexaVoxCraft 6.0.1 with the latest stable MinimalLambda dependency.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(deps): upgrade to MinimalLambda 2.2.0 stable and release versio…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-01-12T17:18:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8d341523286b3543d8fd0c7d8f29233b7aeae783",
          "body": "…beta (#123)\n\n* chore(build): bump version to 6.0.1-beta for MinimalLambda beta integration\n\nIncrement version to 6.0.1-beta to prepare for integrating the beta version of MinimalLambda into AlexaVoxCraft.\n\nThis prerelease version allows testing of the beta MinimalLambda dependency before stable rel\n[…]\n still in beta.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(deps): bump version to 6.0.1-beta and upgrade MinimalLambda to …",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-01-12T13:41:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "04ef8e287e6e810acfda22aea0aef0bd0c2b0b61",
          "body": "Making version 6 \"live\"",
          "is_bot": false,
          "headline": "Update Directory.Build.props",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-01-12T12:57:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee53af39ecb1ab909aa9d9022fde6aae0b3edd4d",
          "body": "…e pattern (#122)\n\nBREAKING CHANGE: APLValueCollection<T> now implements IList<T> directly, removing the need for .Items property access for mutations.\n\nMajor Changes:\n- APLValueCollection<T> now implements IList<T> and IReadOnlyList<T>\n- Items property changed from IList<T>? to IReadOnlyList<T> (re\n[…]\nr examples\n- Updated docs/components/apl-integration.md with breaking changes summary\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(core): implement IList<T> for APLValueCollection with materializ…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-01-10T21:29:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "58e2b794fad7e72a0d550f9d31f9ce0bafe30162",
          "body": "…121)\n\n* Apply APLCollectionConverterFactory and remove explicit converter registrations\n\n- Add [JsonConverter(typeof(APLCollectionConverterFactory))] attribute to APLCollection<T>\n- Remove explicit APLCollectionConverter registrations from Container.RegisterTypeInfo (keep data property converter)\n-\n[…]\ninfrastructure.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(core): Add C# collection expression support to APL components (#…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-01-09T20:56:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e671f54c04611df06f60aa66e6dccd78a1f899a1",
          "body": "…port (#119)\n\n* feat(core): add APLCollection<T> with C# 12 collection expression support\n\nImplements modern collection syntax for APL component lists using C# 12 CollectionBuilder pattern.\n\n**New Types:**\n- `APLCollection<T>`: Collection wrapper with expression and CollectionBuilder support\n- `APLC\n[…]\nzation.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(core): add APLCollection<T> with C# 12 collection expression sup…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-01-08T18:35:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "02a432f76f6b74467552bce0af3a331a1a5b24f8",
          "body": "* feat(core): add first-class Spacer APL component\n\nAdd strongly-typed Spacer component to replace CustomComponent(\"Spacer\") pattern.\n\n- Add Spacer.cs extending APLComponent with Height/Width support\n- Register Spacer in APLComponentConverter type lookup\n- Add comprehensive serialization tests using\n[…]\n changes\n\n🤖 Generated with [Claude Code](https://claude.ai/claude-code)\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(core): add first-class Spacer APL component (#116)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-01-07T22:01:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3784b871d3f53a5c8a31348522d2eaedde0fdc5d",
          "body": "* Chore/update project references and bump package versions\n\n* Chore/update test project configuration and add xunit.v3.mtp-v2 package",
          "is_bot": false,
          "headline": "Chore/update project references and bump package versions (#113)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2026-01-05T14:47:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aee119725dad69c6056f4177ab28be994cdc0fdb",
          "body": "* chore: bump MinimalLambda to beta.7\n\n* chore: bump MinimalLambda to beta.8\n\n* chore: update parameter attribute in Invoke method\n\n* chore: bump MinimalLambda to beta.9\n\n* chore: update MinimalLambda and Verify.XunitV3 package versions\n\n* chore: upgrade MinimalLambda to stable version 2.0.0 and update version prefix to 5.1.0",
          "is_bot": false,
          "headline": "Chore/minimallambda upgrade (#105)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-12-18T14:37:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc0fec0f5918a369fd2553d6fdd9ad0d572a13ff",
          "body": null,
          "is_bot": false,
          "headline": "Switch to MinimalLambda host and refresh docs (#103)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-12-12T17:47:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e11d47726c91ffa5c82781f289855eec9c259b5",
          "body": "chore: bump dependency patch versions",
          "is_bot": false,
          "headline": "Bump dependency patch versions (#100)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-12-10T16:07:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba7b9d167bf0bdcee88e10d640aa33e5a334fe38",
          "body": "- Remove beta designation from version 5.0.0\n- Update documentation URL to alexavoxcraft.layeredcraft.dev\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release version 5.0.0 (#98)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-12-01T22:54:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6bcf9d5d2de583ac88dae376666d1b6e73d24517",
          "body": "* Simplify Lambda handler registration API\n\nConsolidate handler registration into a single method call and improve naming for better developer experience.\n\n**API Changes:**\n\n1. **Simplified Registration** - Consolidated `AddAlexaSkillHost` to accept handler type parameters:\n   ```csharp\n   // Before\n[…]\nusing expression body syntax.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Simplify Lambda handler registration API (#97)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-12-01T18:50:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0564cb3a2d2e03b87f5d2ca013a6127948298dea",
          "body": "* Add AlexaVoxCraft.Lambda.Host project file\n\nInitial creation of the Lambda Host package project file for AWS Lambda Host integration.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n* Add AWS Lambda Host integration with comprehensiv\n[…]\naude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Code <claude@anthropic.com>\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add AWS Lambda Host integration for version 5.0.0 (#96)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-12-01T17:36:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dbcde3e2c753107d86a6d4d31ac7429788f02150",
          "body": "* Updated w/ Valid Polly Voices for Alexa.\n\n* Mark PollyVoices constants as obsolete with AlexaSupportedVoices migration guidance\n\n- Add [Obsolete] attribute to all constants in PollyVoices.Generative and PollyVoices.LongForm\n- Provide specific migration paths for voices that have Alexa equivalents\n\n[…]\naude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Code <claude@anthropic.com>\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Updated w/ Valid Polly Voices for Alexa. (#93)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-11-24T01:13:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e9181d291f82665944a3f6713ce2e31c5bc4b925",
          "body": "* Add default voice support for ResponseBuilder\n\n- Add DefaultVoiceName property to SkillServiceConfiguration\n- Add PollyVoices constants for Amazon Polly voice IDs (Generative and Long-form)\n- Add ResponseExtensions with WithVoice() extension methods for string, ISsml, and IEnumerable<ISsml>\n- Upda\n[…]\ntVoiceName XML documentation.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add default voice support for ResponseBuilder (#92)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-11-23T03:20:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b71065e4d10a8599a3cb933909ec5269948282d5",
          "body": "- Remove PackageReadmeFile, PackageIcon, PackageLicenseExpression from individual csproj files\n- Remove icon.png and README.md ItemGroup inclusions from csproj files\n- Add Description and PackageTags to AlexaVoxCraft.Smapi.csproj\n- Package metadata now inherited from Directory.Build.props\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Centralize package metadata in Directory.Build.props (#91)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-11-21T20:24:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bb7bdf3cabafd1040ae8e0fa4f69989cfc19d152",
          "body": "* Add AlexaVoxCraft.Smapi package for Alexa Skill Management API integration\n\nThis commit introduces a new package for interacting with the Alexa Skill Management API (SMAPI), enabling programmatic management of Alexa skill interaction models.\n\n## New Package: AlexaVoxCraft.Smapi\n\n### Core Features\n\n[…]\nnt.SendAsync method signature\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add AlexaVoxCraft.Smapi package for Alexa Skill Management API (#90)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-11-21T19:42:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e766e1e0249df18b7b025f05fab5dfd549934bfe",
          "body": "* Refactor test files and update namespaces for legacy tests\n\n* Removed .DS_Store files\n\n* Add APL model tests and supporting infrastructure\n\n* Removed markdown file",
          "is_bot": false,
          "headline": "Feature/verify model tests (#89)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-11-20T14:04:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c36c889332b705c0150d1de4a37ba9e919fe26ed",
          "body": "… (#88)",
          "is_bot": false,
          "headline": "Update package references to latest versions across multiple projects…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-11-11T21:08:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a73ea81aece678edee757948773ca08137612266",
          "body": "Fix missed default lifetime in SymbolDiscovery (#76)\n\nThis commit fixes a missed spot in the ServiceLifetime default value fix.\nIn SymbolDiscovery.cs line 44, the default lifetime was still set to 0\n(Singleton) instead of 2 (Transient).\n\n## The Missing Fix\nIn the previous fix, we updated AlexaVoxCra\n[…]\ns.\n\n## Version Bump\nBumped version to 4.1.2 for this additional bug fix.\n\nRelated to #76\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix missed default lifetime in SymbolDiscovery (#87)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-10-27T12:12:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "80ede69c70b873b89a3dfb8b06f0057a4358f61f",
          "body": null,
          "is_bot": false,
          "headline": "Made sample files not packable",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-10-27T02:53:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f21741e5c5f7511f4cdc5e6e8ea658bbc32d0f0d",
          "body": "* Updated sample projects.\n\n* Fixed slnx file.",
          "is_bot": false,
          "headline": "Updated sample projects. (#86)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-10-27T02:46:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9875514be274dbff3c3cf1b6cf985c91978eafd",
          "body": "Added explicit build configuration mappings for all projects in the solution\nto properly handle different platform configurations (x64, x86, Any CPU).\n\nThis ensures proper build behavior across different Visual Studio configurations\nand CI/CD environments.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update solution file with build configuration mappings",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-10-27T02:18:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dd86e85453d926f2968169f44813977709cf6f89",
          "body": "…time bug (#85)\n\n* Add comprehensive XML documentation and improve test naming conventions\n\n- Added XML documentation to all source generator test files\n  - Test case classes (001_Simple and 002_MultiRegister)\n  - AlexaVoxCraftDiGeneratorTests with detailed method documentation\n  - ModuleInitializer\n[…]\ns bug fix release.\n\nFixes #76\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add comprehensive test suite for source generator and fix ServiceLife…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-10-27T01:49:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fde029ac1227ef4547f4a6b366b90add11dd89bf",
          "body": "- Bump version from 4.1.0-preview to 4.1.0 stable release\n- Add Source Generators documentation to mkdocs navigation\n- Make source generation feature publicly available\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release version 4.1.0 and add source generator documentation",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-10-23T00:17:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "821e53cdb7fd54e96338367feda6776cdef19145",
          "body": "* Fix Activity.AddException multi-targeting compatibility for .NET 8/9/10\n\nAdd conditional compilation to handle Activity.AddException API which is only available in .NET 9.0+. For .NET 8.0, use OpenTelemetry.Api's RecordException extension method as a polyfill.\n\nChanges:\n- Add OpenTelemetry.Api pac\n[…]\nn static analysis suggestions\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement source-generated DI registration with C# interceptors (#82)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-10-22T23:42:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0df190903c24e3dcae4c82efa875642f15ad6e1d",
          "body": "- Add missing AlexaVoxCraft.Observability package to packages table and breakdown\n- Reorder packages in logical dependency order\n- Update project structure to include Observability package\n- Add Observability to quick start installation options\n- Remove duplicate samples/ folder reference\n- Sync documentation with current 5-package structure\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update README.md with current project structure and packages",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-09-11T18:15:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "efa665a858fc438bec36dcdb90df328c1a6c3ac9",
          "body": "- Remove preview designation from Directory.Build.props (4.0.0-preview → 4.0.0)\n- Performance optimization: Cache IOptions<SkillServiceConfiguration> resolution in LambdaHostExtensions\n- Add comprehensive Release and Versioning documentation to CLAUDE.md\n\nBreaking Changes (see README.md for migratio\n[…]\n with full cancellation token support,\nperformance improvements, and production-ready stability.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release AlexaVoxCraft v4.0.0 - Stable Release",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-09-11T13:39:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f29b1f41f3cbb843b706c29561166ff6bb7874f1",
          "body": "…(#73)\n\n* Add comprehensive cancellation token support to Lambda hosting layer\n\nIntegrates cancellation tokens throughout the Lambda hosting infrastructure\nto provide proper timeout handling and graceful shutdown capabilities.\n\n## Key Changes\n\n### Lambda Layer Interfaces (Breaking Changes)\n- Update \n[…]\n.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n* Cache cancellation timeout buffer during initialization for improved performance\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add comprehensive cancellation token support to Lambda hosting layer …",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-09-10T19:16:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d3864df052aa206c0ac633e2ad4de5f78ae3ce11",
          "body": "…eption method (#72)\n\n* Modernize OpenTelemetry exception handling using standard .NET AddException method\n\nReplaces custom exception event creation with built-in OpenTelemetry AddException method to follow standard semantic conventions.\n\nChanges:\n- Update AlexaSkillFunction.cs to use span?.AddExcep\n[…]\nthropic.com>\n\n* Bump version to 3.2.1\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Modernize OpenTelemetry exception handling using standard .NET AddExc…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-08-30T01:17:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6fbd1d1d9872b687cd549937a61bb7f8263e87c1",
          "body": "* feat: Add OpenTelemetry testing infrastructure for PerformanceLoggingBehavior\n\n- Add OtelPerformanceLoggingBehaviorTests class with comprehensive OpenTelemetry instrumentation testing\n- Set up ActivityListener and MeterProvider for capturing telemetry data during tests\n- Add initial success scenar\n[…]\ncom>\n\n* refactor: Comment out unused code in OtelAlexaLambdaSerializerTests and OtelAlexaSkillFunctionTests\n\n* Fixed server kind on all spans\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix/server kind (#71)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-08-29T02:47:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "32452e21b3319011e4f243911dbbe78db16cef88",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-08-29T02:33:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1bac9940784901efea977036641c63943761dff",
          "body": "…eLoggingBehavior (#70)\n\n* feat: Add OpenTelemetry testing infrastructure for PerformanceLoggingBehavior\n\n- Add OtelPerformanceLoggingBehaviorTests class with comprehensive OpenTelemetry instrumentation testing\n- Set up ActivityListener and MeterProvider for capturing telemetry data during tests\n- A\n[…]\nred-By: Claude <noreply@anthropic.com>\n\n* refactor: Comment out unused code in OtelAlexaLambdaSerializerTests and OtelAlexaSkillFunctionTests\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add comprehensive OpenTelemetry testing infrastructure for Performanc…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-08-29T02:30:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e139d61f47298a05b16f21b28e890d76cb5569eb",
          "body": "* Implement Handler-Level OpenTelemetry Instrumentation (#64)\n\nAdd comprehensive OpenTelemetry instrumentation to RequestHandlerWrapperImpl\nfor detailed handler resolution and execution tracking with performance metrics.\n\n## Handler Telemetry Features\n\n### New Semantic Attributes & Values\n- Add Hand\n[…]\nd analyze handler selection patterns.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Handler-Level OpenTelemetry Instrumentation (#64) (#69)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-08-28T19:11:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "00a5c8f118a564839e80110ca05ec04c2f919001",
          "body": "* Phase 3: Add comprehensive OpenTelemetry instrumentation to Lambda function layer\n\n## Summary\nImplements comprehensive Lambda-level OpenTelemetry instrumentation providing end-to-end\nobservability for Alexa skills with spans, metrics, and error tracking.\n\n## Changes\n\n### Core Lambda Instrumentatio\n[…]\ncessing to serialization performance.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement Serialization Telemetry in AlexaLambdaSerializer (#63) (#68)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-08-28T17:07:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "39bf495201a77e245d67171401ac6751e4d92cdc",
          "body": "…nction layer (#67)\n\n* Phase 3: Add comprehensive OpenTelemetry instrumentation to Lambda function layer\n\n## Summary\nImplements comprehensive Lambda-level OpenTelemetry instrumentation providing end-to-end\nobservability for Alexa skills with spans, metrics, and error tracking.\n\n## Changes\n\n### Core \n[…]\nRemove unused usings and organize test collections\n\n* Remove unused OpenTelemetry metrics tests and dependencies from AlexaSkillFunctionTests\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Phase 3: Add comprehensive OpenTelemetry instrumentation to Lambda fu…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-08-28T15:05:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "49ab67e087df132c105472b98ec739caf970bbfc",
          "body": "* Add core OpenTelemetry telemetry infrastructure\n\n- Add AlexaVoxCraftTelemetry static class with ActivitySource and Meter\n- Add comprehensive telemetry constants classes (no magic strings):\n  - AlexaSpanNames: Span names for request lifecycle\n  - AlexaMetricNames: Counter and histogram metric names\n[…]\n Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n* Update Directory.Build.props\n\nConverting to preview version\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add comprehensive OpenTelemetry instrumentation to AlexaVoxCraft (#60)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-08-28T11:57:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4a92be135965c84ba06b6fccf6af0319ecee79ae",
          "body": "…#59)\n\n* Initial setup: Add performance optimization plan and include existing project changes\n\n- Add comprehensive PERFORMANCE_OPTIMIZATION_PLAN.md with detailed implementation strategy\n- Include existing project file modifications\n- Update solution file to include performance plan in solution item\n[…]\nlemented and the project is complete.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Performance Optimizations: Memory Improvements & Modern C# Patterns (…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-08-25T13:08:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b1d1902b3f7bcafd15e27e18583f8f76deaa134f",
          "body": "…actJsonFormatter (#56)\n\n* Remove AlexaVoxCraft.Logging and migrate to LayeredCraft.Logging.CompactJsonFormatter\n\nBREAKING CHANGE: Removed AlexaVoxCraft.Logging package entirely\n\n- Remove AlexaVoxCraft.Logging source and test projects\n- Update AlexaVoxCraft.MediatR.Lambda to use LayeredCraft.Logging\n[…]\n.7\n- AwesomeAssertions: 9.0.0 → 9.1.0\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove AlexaVoxCraft.Logging and migrate to LayeredCraft.Logging.Comp…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-07-15T00:16:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "46abcf2341d880fbe7147eb694689dba88fb09a6",
          "body": "…(#53)\n\n* Add comprehensive GitHub Pages documentation and build improvements\n\nFeatures Added:\n- Complete MkDocs documentation site with Material theme\n- Component documentation for all major framework features\n- Production-ready trivia skill examples and patterns\n- GitHub Pages deployment workflow\n\n[…]\nmance by reusing downloaded packages.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add comprehensive GitHub Pages documentation with build improvements …",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-07-11T00:22:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2ce9604e655a97e8c57ce5741b951855e9b21a62",
          "body": "* Migrate CardTests to AutoFixture with property-based testing\n\nEnhances test coverage by replacing static tests with AutoFixture-based\nproperty testing that validates:\n- All 4 card types (Simple, Standard, AskForPermissionsConsent, LinkAccount)\n- Alexa-specific constraints (title length, valid perm\n[…]\nclarity and avoiding compiler errors.\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Migrate CardTests to AutoFixture with property-based testing (#51)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-07-02T14:13:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5607a57d9cd4c0b50e82a05c24cc6bf388c526a8",
          "body": "* Disable packaging for test project by setting IsPackable to false\n\n* Add comprehensive roadmap for AlexaVoxCraft enhancements\n\nCaptures planned improvements across 17 categories including:\n- Developer tooling and CLI utilities\n- Visual Studio integration\n- Enhanced testing framework\n- Advanced APL\n[…]\nhttps://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n* Add ROADMAP.md to solution file for enhanced project documentation\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Feature/roadmap documentation (#50)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-07-01T13:26:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "db6448b80de467d89fdc4c816271b2bf59d6033b",
          "body": null,
          "is_bot": false,
          "headline": "Disable packaging for test project by setting IsPackable to false (#49)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-07-01T12:27:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91c0aed7f4c19624b5a3db5cbb9eadf97e81c86c",
          "body": "…n 5.3.0; bump version prefix to 2.0.0 (#48)",
          "is_bot": false,
          "headline": "Remove outdated Serilog dependencies and update NSubstitute to versio…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-07-01T12:20:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17e6fda67ff18d3d2bf02c19350dc6468bfa3912",
          "body": "* Add comprehensive test infrastructure with AutoFixture integration\n\n- Create AlexaVoxCraft.Logging.Tests, MediatR.Tests, and MediatR.Lambda.Tests projects\n- Upgrade existing test projects from XUnit v2 to v3 with modern test stack\n- Implement custom LogEventSpecimenBuilder for parameter-based test\n[…]\nwith [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>\nCo-authored-by: Claude Code <claude@anthropic.com>",
          "is_bot": false,
          "headline": "Add comprehensive test infrastructure with AutoFixture integration (#46)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-06-30T20:45:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "01bd603d645953dafb8018f10f8ccc7ee97c9522",
          "body": "…prehensive documentation (#45)\n\n* Add comprehensive structured logging and performance monitoring\n\nThis commit integrates LayeredCraft.StructuredLogging throughout the AlexaVoxCraft framework and introduces comprehensive performance monitoring and scoped logging capabilities.\n\n## Major Changes\n\n###\n[…]\nion vs development logging strategies\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Enhance structured logging with production-appropriate levels and com…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-06-23T19:55:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "567376deeae25eff1f4a541473c59cb15655c127",
          "body": "….0-beta) (#44)\n\nAdd comprehensive structured logging and performance monitoring\n\nThis commit integrates LayeredCraft.StructuredLogging throughout the AlexaVoxCraft framework and introduces comprehensive performance monitoring and scoped logging capabilities.\n\n## Major Changes\n\n### Package Updates\n-\n[…]\ned README with detailed project structure\n- Enhanced sample handlers with logging demonstrations\n\n🤖 Generated with [Claude Code](https://claude.ai/code)\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add comprehensive structured logging and performance monitoring (v2.0…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-06-23T17:47:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "704dc9425f314e2aa78fefa360fd1cedce7c8d19",
          "body": "* Update Microsoft.NET.Test.Sdk to version 17.14.0 and adjust workflow references\n\n* Update repository URLs to reflect organization change\n\n* Updated icon",
          "is_bot": false,
          "headline": "Feature/move orgs (#39)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-05-21T15:18:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "090e88807d5cff21a4d9392a535f4f6a7ff5da7d",
          "body": "…… (#37)\n\n* Update package metadata and bump dependencies for AlexaVoxCraft libraries\n\n* Resized icon.png file.\n\n* Update version prefix to 1.0.1 in Directory.Build.props",
          "is_bot": false,
          "headline": "Update package metadata and bump dependencies for AlexaVoxCraft libra…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-05-19T13:05:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "600a438d59b6ca1485313fd141fdbb968434859e",
          "body": "…… (#35)\n\nRefactor namespaces and remove unused project references in logging module",
          "is_bot": false,
          "headline": "Refactor namespaces and remove unused project references in logging m…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-05-13T19:15:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc6b7dbb15cd9546496b0f866352016f34735d0a",
          "body": "* Refactor AlexaCompactJsonFormatter to allow custom inner formatter and improve JSON rendering\n\n* Refactor namespaces for logging components and update project references\n\n* Remove debug logging from AlexaCompactJsonFormatter\n\n* Add newline to output in AlexaCompactJsonFormatter and fix project ref\n[…]\nAlexaCompactJsonFormatter\n\n* Refactor AlexaCompactJsonFormatter to enhance JSON formatting and improve compatibility with AWS CloudWatch Logs\n\n* Update version prefix to 1.0.1 in Directory.Build.props",
          "is_bot": false,
          "headline": "Fix/custom formatter (#34)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-05-13T19:00:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9312d5c40bc716afd3a80c6cfe11ea5c5a556229",
          "body": null,
          "is_bot": false,
          "headline": "Add AlexaCompactJsonFormatter for custom JSON logging format (#33)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-05-13T16:22:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcb660c1b9001d30caaafda2009b50784785ade0",
          "body": "…… (#32)\n\n* Update CI configuration to use feature branch and adjust dotnet version format; add stargazers section to README\n\n* Update project files to target .NET 9.0 alongside .NET 8.0\n\n* Update CI configuration to target .NET 9.0 alongside .NET 8.0\n\n* Refactor dependabot configuration to simplify\n[…]\n Refactor CI configuration to improve dotnet version specification format\n\n* Update CI configuration to use stable version of pr-build.yaml\n\n* Update CI configuration to support multiple .NET versions",
          "is_bot": false,
          "headline": "Update CI configuration to use feature branch and adjust dotnet versi…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-05-08T18:03:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "87188232b2c81becd9919f695a2ea0baabb89532",
          "body": "…p (#31)\n\nBumps the dotnet group with 1 update: [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit).\n\n\nUpdates `xunit.runner.visualstudio` from 3.0.2 to 3.1.0\n- [Release notes](https://github.com/xunit/visualstudio.xunit/releases)\n- [Commits](https://github.com/xunit/visualstudi\n[…]\nype: version-update:semver-minor\n  dependency-group: dotnet\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump xunit.runner.visualstudio from 3.0.2 to 3.1.0 in the dotnet grou…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-05-07T20:28:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c982e0fa258d0c1a5eb87e3c99d7f2af856f5e7d",
          "body": "* Update CI workflows to use version 3.2 of the build templates",
          "is_bot": false,
          "headline": "Fix/package deploy (#29)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-21T14:22:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e87c482da1b29b6ca89b7df53a2ef6646e8cceb2",
          "body": "…… (#28)\n\n* Update CI configuration to support additional branches and tags, and upgrade workflow templates to version 3.1",
          "is_bot": false,
          "headline": "Update CI configuration to support additional branches and tags, and …",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-21T14:17:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d7a8cfed7ded01a5f8de8aaec8decce1e8c419b",
          "body": "…… (#27)\n\nAdd MIT License and NOTICE file, update LICENSE copyright, and enhance README with logging details",
          "is_bot": false,
          "headline": "Add MIT License and NOTICE file, update LICENSE copyright, and enhanc…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-21T13:39:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec06f4c9874393031065a200b0076abd1e4eb47a",
          "body": null,
          "is_bot": false,
          "headline": "Refactor AlexaSkillFunction for improved readability and structure (#26)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-17T16:58:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e62f68afe0f5f82d429a472c2f3974b6697ee648",
          "body": "…… (#25)\n\nRefactor serialization methods in AlexaLambdaSerializer for improved logging and code clarity",
          "is_bot": false,
          "headline": "Refactor serialization methods in AlexaLambdaSerializer for improved …",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-17T13:31:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5705e341ced8aeeed80353377118e582a8a9a610",
          "body": "…#24)",
          "is_bot": false,
          "headline": "Integrate Serilog for enhanced logging and update test dependencies (…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-17T13:01:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec7ef12cec81d1130173e885c58aa6806434cfe7",
          "body": "…… (#21)\n\nAdd HideOrdinal property to AlexaGridList and configure Dependabot for NuGet and .NET SDK updates",
          "is_bot": false,
          "headline": "Add HideOrdinal property to AlexaGridList and configure Dependabot fo…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-15T15:36:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b51265725cb4c9c65e91a67e9319fb303ec325d5",
          "body": "… include documentation in the package",
          "is_bot": false,
          "headline": "Refactor project files to use local README.md for NuGet packaging and…",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-09T18:49:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe0014734506a8ce592aa840227cc7ab13ee340a",
          "body": null,
          "is_bot": false,
          "headline": "Include README.md in project files for NuGet packaging",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-09T18:30:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47ed19abce2809d37f5aa028114aeec972ba749f",
          "body": null,
          "is_bot": false,
          "headline": "Update project files to include README and license metadata (#20)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-09T18:21:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c97b39407e622115411ffad5c4a6aeb202563dd3",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-09T18:08:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c1bb0adda528785e13923fda40e88453ee1cb7d",
          "body": "* Add APL function support and update project configuration\n\n- Introduced Sample.Apl.Function project to support APL functionalities.\n- Added appsettings.json for AWS and Serilog configuration.\n- Created DefaultHandler and LambdaHandler for handling APL skill requests.\n- Updated Directory.Build.prop\n[…]\nment APL document rendering in DefaultHandler\n\n* Refactor AlexaSkillFunction to support generic request and response types\n\n* Update GitHub Actions workflow to use version 3.0 of the pr-build template",
          "is_bot": false,
          "headline": "Feature/readme updates (#19)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-09T18:03:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "60649789cf27e6872c33670c914ff6dc80525d71",
          "body": "* Add APL components and JSON definitions for audio and visual elements\n\n* Refactor JSON serialization attributes to use System.Text.Json and update related converters\n\n* Migrate JSON serialization from Newtonsoft.Json to System.Text.Json across multiple files\n\n* Migrate JSON serialization from Newt\n[…]\n\n\n* Unskip LaunchRequestTests and remove CI issue comments\n\n* Add test to confirm APL interface name in LaunchRequest\n\n* Unskip LaunchRequestTests and restore test methods for APL interface validation",
          "is_bot": false,
          "headline": "Feature/apl support (#17)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-09T14:17:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "94976a963e86200916db162c93ab6b0fb2f860e1",
          "body": null,
          "is_bot": false,
          "headline": "Implement custom Alexa Lambda serializer and logging extensions (#18)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-07T14:53:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eaed9b88176186b608e00888aa8c360ef354ef47",
          "body": "* Update README.md to include new package entries for MediatR and MediatR.Lambda\n\n* Add README.md for AlexaVoxCraft.Model package with installation and usage instructions\n\n* Update README.md to include build status badges for AlexaVoxCraft packages\n\n* Remove VersionPrefix from project files and add Directory.Build.props for centralized versioning",
          "is_bot": false,
          "headline": "Updating README files (#16)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-03T15:33:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c00354a86b5c6585c8a00cea3934e6ceb8da93e",
          "body": "* Update package references to latest versions\n\n* Update GitHub Actions workflow to use new template and adjust parameters\n\n* Update GitHub Actions workflow to use new solution name\n\n* Rename PR build workflow file for consistency\n\n* Refactor model namespaces and update version prefixes to 0.2.0-alpha\n\n* Add new directive and response models for AlexaVoxCraft",
          "is_bot": false,
          "headline": "Alexa.NET Integration (#15)",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-04-03T12:47:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "569d6c1799eb0a2e4ae9fd43ccb171ec220abe4e",
          "body": "Add .config to .gitignore and ensure .idea is ignored",
          "is_bot": false,
          "headline": "Merge pull request #14 from ncipollina/feature/fix-required-fields",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-03-30T01:28:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d28a274ee72bcc3463e3f57140c045776bbd7489",
          "body": null,
          "is_bot": false,
          "headline": "Add .config to .gitignore and ensure .idea is ignored",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-03-30T01:26:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2dc2932fbafe7458783021571f891fd6196a3955",
          "body": "Removed required from the Unit fields",
          "is_bot": false,
          "headline": "Merge pull request #13 from ncipollina/feature/fix-required-fields",
          "author_name": "Nick Cipollina",
          "author_login": "ncipollina",
          "committed_at": "2025-01-28T18:00:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 97,
      "commits_last_year": 63,
      "latest_release_at": "2026-06-26T12:49:04Z",
      "latest_release_tag": "v7.3.6",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 23,
      "days_since_latest_release": 26,
      "mean_days_between_releases": 11
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": true,
      "health_percentage": 75,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "AlexaVoxCraft.Http",
          "exists": true,
          "license": null,
          "keywords": [
            "alexa",
            "http",
            "authentication",
            "bearer-token",
            "access-token",
            "typed-httpclient",
            "voxcraft",
            "infrastructure"
          ],
          "ecosystem": "nuget",
          "matches_repo": true,
          "registry_url": "https://www.nuget.org/packages/AlexaVoxCraft.Http",
          "is_deprecated": false,
          "latest_version": "7.3.0.129",
          "repository_url": "https://github.com/LayeredCraft/alexa-vox-craft",
          "versions_count": 7,
          "total_downloads": 3285,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-04-14T20:24:53.640000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 98
        },
        {
          "name": "AlexaVoxCraft.Model",
          "exists": true,
          "license": null,
          "keywords": [
            "alexa",
            "model",
            "request",
            "response",
            "directive",
            "voxcraft",
            "skills"
          ],
          "ecosystem": "nuget",
          "matches_repo": true,
          "registry_url": "https://www.nuget.org/packages/AlexaVoxCraft.Model",
          "is_deprecated": false,
          "latest_version": "7.3.6",
          "repository_url": "https://github.com/LayeredCraft/alexa-vox-craft",
          "versions_count": 48,
          "total_downloads": 33424,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-06-26T12:51:52.893000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 26
        },
        {
          "name": "AlexaVoxCraft.Smapi",
          "exists": true,
          "license": null,
          "keywords": [
            "alexa",
            "smapi",
            "skill-management",
            "api",
            "ci-cd",
            "voxcraft",
            "automation"
          ],
          "ecosystem": "nuget",
          "matches_repo": true,
          "registry_url": "https://www.nuget.org/packages/AlexaVoxCraft.Smapi",
          "is_deprecated": false,
          "latest_version": "7.3.0.129",
          "repository_url": "https://github.com/LayeredCraft/alexa-vox-craft",
          "versions_count": 21,
          "total_downloads": 12629,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-04-14T20:24:57.553000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 98
        },
        {
          "name": "AlexaVoxCraft.Lambda",
          "exists": true,
          "license": null,
          "keywords": [
            "alexa",
            "lambda",
            "aws",
            "voxcraft",
            "serialization",
            "abstractions",
            "json"
          ],
          "ecosystem": "nuget",
          "matches_repo": true,
          "registry_url": "https://www.nuget.org/packages/AlexaVoxCraft.Lambda",
          "is_deprecated": false,
          "latest_version": "7.3.6",
          "repository_url": "https://github.com/LayeredCraft/alexa-vox-craft",
          "versions_count": 22,
          "total_downloads": 12424,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-06-26T12:51:55.050000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 26
        },
        {
          "name": "AlexaVoxCraft.MediatR",
          "exists": true,
          "license": null,
          "keywords": [
            "alexa",
            "mediatR",
            "skills",
            "request-handling",
            "voice",
            "voxcraft"
          ],
          "ecosystem": "nuget",
          "matches_repo": true,
          "registry_url": "https://www.nuget.org/packages/AlexaVoxCraft.MediatR",
          "is_deprecated": false,
          "latest_version": "7.3.0.129",
          "repository_url": "https://github.com/LayeredCraft/alexa-vox-craft",
          "versions_count": 39,
          "total_downloads": 29130,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-04-14T20:24:54.857000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 98
        },
        {
          "name": "AlexaVoxCraft.Model.Apl",
          "exists": true,
          "license": null,
          "keywords": [
            "alexa",
            "apl",
            "presentation",
            "model",
            "visuals",
            "multimodal",
            "voxcraft"
          ],
          "ecosystem": "nuget",
          "matches_repo": true,
          "registry_url": "https://www.nuget.org/packages/AlexaVoxCraft.Model.Apl",
          "is_deprecated": false,
          "latest_version": "7.3.6",
          "repository_url": "https://github.com/LayeredCraft/alexa-vox-craft",
          "versions_count": 48,
          "total_downloads": 25650,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-06-26T12:51:54.130000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 26
        },
        {
          "name": "AlexaVoxCraft.MinimalLambda",
          "exists": true,
          "license": null,
          "keywords": [
            "alexa",
            "lambda",
            "aws",
            "mediatR",
            "voxcraft",
            "hosting",
            "middleware"
          ],
          "ecosystem": "nuget",
          "matches_repo": true,
          "registry_url": "https://www.nuget.org/packages/AlexaVoxCraft.MinimalLambda",
          "is_deprecated": false,
          "latest_version": "7.3.6",
          "repository_url": "https://github.com/LayeredCraft/alexa-vox-craft",
          "versions_count": 19,
          "total_downloads": 6226,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-06-26T12:51:53.767000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 26
        },
        {
          "name": "AlexaVoxCraft.Observability",
          "exists": true,
          "license": null,
          "keywords": [
            "alexa",
            "opentelemetry",
            "observability",
            "telemetry",
            "metrics",
            "tracing",
            "voxcraft"
          ],
          "ecosystem": "nuget",
          "matches_repo": true,
          "registry_url": "https://www.nuget.org/packages/AlexaVoxCraft.Observability",
          "is_deprecated": false,
          "latest_version": "7.3.6",
          "repository_url": "https://github.com/LayeredCraft/alexa-vox-craft",
          "versions_count": 35,
          "total_downloads": 16809,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-06-26T12:51:53.480000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 26
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 2,
      "watchers": 1,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 2
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples",
        "samples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "samples/Sample.Apl.Function/Sample.Apl.Function.csproj",
        "samples/Sample.Fact.InSkill.Purchases/Sample.Fact.InSkill.Purchases.csproj",
        "samples/Sample.Generated.Function/Sample.Generated.Function.csproj",
        "samples/Sample.Host.Function/Sample.Host.Function.csproj",
        "samples/Sample.Skill.Function/Sample.Skill.Function.csproj",
        "src/AlexaVoxCraft.Http/AlexaVoxCraft.Http.csproj",
        "src/AlexaVoxCraft.InSkillPurchasing/AlexaVoxCraft.InSkillPurchasing.csproj",
        "src/AlexaVoxCraft.Lambda/AlexaVoxCraft.Lambda.csproj",
        "src/AlexaVoxCraft.MediatR.Generators/AlexaVoxCraft.MediatR.Generators.csproj",
        "src/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj",
        "src/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj",
        "src/AlexaVoxCraft.MinimalLambda/AlexaVoxCraft.MinimalLambda.csproj",
        "src/AlexaVoxCraft.Model.Apl/AlexaVoxCraft.Model.Apl.csproj",
        "src/AlexaVoxCraft.Model.InSkillPurchasing/AlexaVoxCraft.Model.InSkillPurchasing.csproj",
        "src/AlexaVoxCraft.Model/AlexaVoxCraft.Model.csproj",
        "src/AlexaVoxCraft.Observability/AlexaVoxCraft.Observability.csproj",
        "src/AlexaVoxCraft.Smapi/AlexaVoxCraft.Smapi.csproj",
        "test/AlexaVoxCraft.Http.TestKit/AlexaVoxCraft.Http.TestKit.csproj",
        "test/AlexaVoxCraft.InSkillPurchasing.Tests/AlexaVoxCraft.InSkillPurchasing.Tests.csproj",
        "test/AlexaVoxCraft.MediatR.Generator.Tests/AlexaVoxCraft.MediatR.Generator.Tests.csproj",
        "test/AlexaVoxCraft.MediatR.Lambda.Tests/AlexaVoxCraft.MediatR.Lambda.Tests.csproj",
        "test/AlexaVoxCraft.MediatR.Tests/AlexaVoxCraft.MediatR.Tests.csproj",
        "test/AlexaVoxCraft.Model.Apl.Legacy.Tests/AlexaVoxCraft.Model.Apl.Legacy.Tests.csproj",
        "test/AlexaVoxCraft.Model.Apl.Tests/AlexaVoxCraft.Model.Apl.Tests.csproj",
        "test/AlexaVoxCraft.Model.InSkillPurchasing.Tests/AlexaVoxCraft.Model.InSkillPurchasing.Tests.csproj",
        "test/AlexaVoxCraft.Model.Legacy.Tests/AlexaVoxCraft.Model.Legacy.Tests.csproj",
        "test/AlexaVoxCraft.Model.Tests/AlexaVoxCraft.Model.Tests.csproj",
        "test/AlexaVoxCraft.Smapi.Tests/AlexaVoxCraft.Smapi.Tests.csproj",
        "test/AlexaVoxCraft.TestKit/AlexaVoxCraft.TestKit.csproj"
      ],
      "largest_source_bytes": 22660,
      "source_files_sampled": 1006,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 19495
    },
    "dependencies": {
      "manifests": [
        "pyproject.toml"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 34,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 32,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [
        {
          "name": "mkdocs-material",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=9.0.0"
        },
        {
          "name": "mkdocs-minify-plugin",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.7.0"
        },
        {
          "name": "LayeredCraft.StructuredLogging",
          "manifest": "src/AlexaVoxCraft.Http/AlexaVoxCraft.Http.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Extensions.Http",
          "manifest": "src/AlexaVoxCraft.Http/AlexaVoxCraft.Http.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Amazon.Lambda.Core",
          "manifest": "src/AlexaVoxCraft.Lambda/AlexaVoxCraft.Lambda.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "LayeredCraft.StructuredLogging",
          "manifest": "src/AlexaVoxCraft.Lambda/AlexaVoxCraft.Lambda.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Serilog",
          "manifest": "src/AlexaVoxCraft.Lambda/AlexaVoxCraft.Lambda.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.CodeAnalysis.Analyzers",
          "manifest": "src/AlexaVoxCraft.MediatR.Generators/AlexaVoxCraft.MediatR.Generators.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.CodeAnalysis.CSharp",
          "manifest": "src/AlexaVoxCraft.MediatR.Generators/AlexaVoxCraft.MediatR.Generators.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Amazon.Lambda.RuntimeSupport",
          "manifest": "src/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Amazon.Lambda.Serialization.SystemTextJson",
          "manifest": "src/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "LayeredCraft.Logging.CompactJsonFormatter",
          "manifest": "src/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Serilog.AspNetCore",
          "manifest": "src/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Serilog.Enrichers.Activity",
          "manifest": "src/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Extensions.Hosting",
          "manifest": "src/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "LayeredCraft.StructuredLogging",
          "manifest": "src/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Extensions.Configuration.Binder",
          "manifest": "src/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Extensions.DependencyInjection.Abstractions",
          "manifest": "src/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Extensions.Options",
          "manifest": "src/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "OpenTelemetry.Api",
          "manifest": "src/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "MinimalLambda",
          "manifest": "src/AlexaVoxCraft.MinimalLambda/AlexaVoxCraft.MinimalLambda.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "OpenTelemetry",
          "manifest": "src/AlexaVoxCraft.Observability/AlexaVoxCraft.Observability.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Extensions.Configuration.Binder",
          "manifest": "src/AlexaVoxCraft.Smapi/AlexaVoxCraft.Smapi.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Extensions.DependencyInjection.Abstractions",
          "manifest": "src/AlexaVoxCraft.Smapi/AlexaVoxCraft.Smapi.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Extensions.Options",
          "manifest": "src/AlexaVoxCraft.Smapi/AlexaVoxCraft.Smapi.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "Amazon.Lambda.Core",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Amazon.Lambda.RuntimeSupport",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Amazon.Lambda.Serialization.SystemTextJson",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "LayeredCraft.Logging.CompactJsonFormatter",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "LayeredCraft.StructuredLogging",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.Analyzers",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.CSharp",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Configuration.Binder",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.DependencyInjection.Abstractions",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Hosting",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Http",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Options",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "MinimalLambda",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "OpenTelemetry",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "OpenTelemetry.Api",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Serilog",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Serilog.AspNetCore",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Serilog.Enrichers.Activity",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "mkdocs-material",
            "direct": true,
            "version": "9.7.7",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-minify-plugin",
            "direct": true,
            "version": "0.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "AutoFixture",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "AutoFixture.AutoNSubstitute",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "AutoFixture.Xunit3",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "AwesomeAssertions",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Basic.Reference.Assemblies.Net100",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Basic.Reference.Assemblies.Net110",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Basic.Reference.Assemblies.Net80",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Basic.Reference.Assemblies.Net90",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.ICU.ICU4C.Runtime",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "NSubstitute",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "OpenTelemetry.Exporter.InMemory",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Serilog.Sinks.Console",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Verify.SourceGenerators",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Verify.XunitV3",
            "direct": false,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "alexa-vox-craft-docs",
            "direct": false,
            "version": "0.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "babel",
            "direct": false,
            "version": "2.18.0",
            "ecosystem": "pypi"
          },
          {
            "name": "backrefs",
            "direct": false,
            "version": "7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "certifi",
            "direct": false,
            "version": "2026.7.22",
            "ecosystem": "pypi"
          },
          {
            "name": "charset-normalizer",
            "direct": false,
            "version": "3.4.9",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.4.2",
            "ecosystem": "pypi"
          },
          {
            "name": "colorama",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "csscompressor",
            "direct": false,
            "version": "0.9.5",
            "ecosystem": "pypi"
          },
          {
            "name": "ghp-import",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "htmlmin2",
            "direct": false,
            "version": "0.1.13",
            "ecosystem": "pypi"
          },
          {
            "name": "idna",
            "direct": false,
            "version": "3.18",
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": false,
            "version": "3.1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "jsmin",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "markdown",
            "direct": false,
            "version": "3.10.2",
            "ecosystem": "pypi"
          },
          {
            "name": "markupsafe",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "mergedeep",
            "direct": false,
            "version": "1.3.4",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs",
            "direct": false,
            "version": "1.6.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-get-deps",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-material-extensions",
            "direct": false,
            "version": "1.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "packaging",
            "direct": false,
            "version": "26.2",
            "ecosystem": "pypi"
          },
          {
            "name": "paginate",
            "direct": false,
            "version": "0.5.7",
            "ecosystem": "pypi"
          },
          {
            "name": "pathspec",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "platformdirs",
            "direct": false,
            "version": "4.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pygments",
            "direct": false,
            "version": "2.20.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pymdown-extensions",
            "direct": false,
            "version": "11.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "python-dateutil",
            "direct": false,
            "version": "2.9.0.post0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml-env-tag",
            "direct": false,
            "version": "1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.34.2",
            "ecosystem": "pypi"
          },
          {
            "name": "six",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "watchdog",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 66,
        "direct_count": 20,
        "indirect_count": 46
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 98,
        "open_issues": 2,
        "closed_ratio": 0.667,
        "closed_issues": 4,
        "closed_unmerged_prs": 66
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "ncipollina",
          "commits": 128,
          "avatar_url": "https://avatars.githubusercontent.com/u/1405469?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "dependabot-auto-merge.yml",
        "docs.yml",
        "pr-build.yaml",
        "pr-title-check.yaml",
        "publish-preview.yaml",
        "publish-release.yaml",
        "release-drafter.yaml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": true,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "uv.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": 8,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "24 out of 24 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/28 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 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": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 5,
            "reason": "7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
            "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": 8,
            "reason": "SAST tool is not run on all commits -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file 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": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "c33da5ed07bd2f4b554eea8607531ceb9e6426ef",
        "ran_at": "2026-07-22T18:38:17Z",
        "aggregate_score": 6.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-22T16:45:49Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-22T16:42:52Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 65,
          "created_at": "2025-08-28T11:59:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 66,
          "created_at": "2025-08-28T11:59:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/LayeredCraft/alexa-vox-craft",
    "host": "github.com",
    "name": "alexa-vox-craft",
    "owner": "LayeredCraft"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 64,
      "inputs": {
        "security": 70,
        "vitality": 84,
        "community": 49,
        "governance": 48,
        "engineering": 70
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 84,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 73,
            "inputs": {
              "commits_last_year": 63,
              "human_commit_share": 0.97,
              "days_since_last_push": 0,
              "active_weeks_last_year": 23
            },
            "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": "23/52 weeks with commits",
                "points": 15.9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 23
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "63 commits in the last year",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 63
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
                "points": 5,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 97,
              "latest_release_tag": "v7.3.6",
              "releases_from_tags": false,
              "days_since_latest_release": 26,
              "mean_days_between_releases": 11
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "97 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 97
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 26 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 26
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~11 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 11
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 49,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 2,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "2 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "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": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 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": 67,
            "inputs": {
              "packages": [
                "AlexaVoxCraft.Http",
                "AlexaVoxCraft.Model",
                "AlexaVoxCraft.Smapi",
                "AlexaVoxCraft.Lambda",
                "AlexaVoxCraft.MediatR",
                "AlexaVoxCraft.Model.Apl",
                "AlexaVoxCraft.MinimalLambda",
                "AlexaVoxCraft.Observability"
              ],
              "dependents": null,
              "ecosystems": "nuget",
              "total_downloads": 139577,
              "monthly_downloads": null
            },
            "components": [
              {
                "key": "total_downloads",
                "name": "Total downloads",
                "detail": "139,577 downloads all-time across nuget",
                "points": 53.5,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_total",
                    "params": {
                      "count": 139577,
                      "ecosystems": "nuget"
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 48,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "merged_prs": 98,
              "open_issues": 2,
              "closed_issues": 4,
              "issue_closed_ratio": 0.667,
              "closed_unmerged_prs": 66
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "67% of issues closed",
                "points": 31.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 67
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "98/164 decided PRs merged",
                "points": 22.9,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 98,
                      "decided": 164
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/28 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 44,
            "inputs": {
              "followers": 1,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "LayeredCraft",
              "public_repos": 17,
              "account_age_days": 427
            },
            "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": "1 followers of LayeredCraft",
                "points": 2.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1,
                      "login": "LayeredCraft"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "17 public repos, account ~1 yr old",
                "points": 11.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 17
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 1
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "AlexaVoxCraft.Http",
                "AlexaVoxCraft.Model",
                "AlexaVoxCraft.Smapi",
                "AlexaVoxCraft.Lambda",
                "AlexaVoxCraft.MediatR",
                "AlexaVoxCraft.Model.Apl",
                "AlexaVoxCraft.MinimalLambda",
                "AlexaVoxCraft.Observability"
              ],
              "ecosystems": "nuget",
              "any_deprecated": false,
              "min_days_since_publish": 26
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "8 package(s) on nuget",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 8,
                      "ecosystems": "nuget"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 26 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 26
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "48 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 48
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 70,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "7 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "24 out of 24 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [
                "aws",
                "dotnet",
                "layeredcraft",
                "open-source",
                "serverless"
              ],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "5 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "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": "good",
        "name": "Security",
        "value": 70,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "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": 62,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 6.2
            },
            "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 is not maximal on development and all release branches",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "24 out of 24 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/28 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "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 detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5",
                "points": 3.8,
                "status": "partial",
                "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 8",
                "points": 4,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "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": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "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 34 resolved dependencies against OSV; 32 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). 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": 34
                }
              },
              {
                "code": "advisories_unassessed",
                "params": {
                  "count": 32
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 34,
              "unassessed_packages": 32,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "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": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 34,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 76,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.887,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 19495
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "86 of 97 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 86,
                      "sampled": 97
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "uv.lock"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.56,
              "toolchain_manifests": [
                "samples/Sample.Apl.Function/Sample.Apl.Function.csproj",
                "samples/Sample.Fact.InSkill.Purchases/Sample.Fact.InSkill.Purchases.csproj",
                "samples/Sample.Generated.Function/Sample.Generated.Function.csproj",
                "samples/Sample.Host.Function/Sample.Host.Function.csproj",
                "samples/Sample.Skill.Function/Sample.Skill.Function.csproj",
                "src/AlexaVoxCraft.Http/AlexaVoxCraft.Http.csproj",
                "src/AlexaVoxCraft.InSkillPurchasing/AlexaVoxCraft.InSkillPurchasing.csproj",
                "src/AlexaVoxCraft.Lambda/AlexaVoxCraft.Lambda.csproj",
                "src/AlexaVoxCraft.MediatR.Generators/AlexaVoxCraft.MediatR.Generators.csproj",
                "src/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj",
                "src/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj",
                "src/AlexaVoxCraft.MinimalLambda/AlexaVoxCraft.MinimalLambda.csproj",
                "src/AlexaVoxCraft.Model.Apl/AlexaVoxCraft.Model.Apl.csproj",
                "src/AlexaVoxCraft.Model.InSkillPurchasing/AlexaVoxCraft.Model.InSkillPurchasing.csproj",
                "src/AlexaVoxCraft.Model/AlexaVoxCraft.Model.csproj",
                "src/AlexaVoxCraft.Observability/AlexaVoxCraft.Observability.csproj",
                "src/AlexaVoxCraft.Smapi/AlexaVoxCraft.Smapi.csproj",
                "test/AlexaVoxCraft.Http.TestKit/AlexaVoxCraft.Http.TestKit.csproj",
                "test/AlexaVoxCraft.InSkillPurchasing.Tests/AlexaVoxCraft.InSkillPurchasing.Tests.csproj",
                "test/AlexaVoxCraft.MediatR.Generator.Tests/AlexaVoxCraft.MediatR.Generator.Tests.csproj",
                "test/AlexaVoxCraft.MediatR.Lambda.Tests/AlexaVoxCraft.MediatR.Lambda.Tests.csproj",
                "test/AlexaVoxCraft.MediatR.Tests/AlexaVoxCraft.MediatR.Tests.csproj",
                "test/AlexaVoxCraft.Model.Apl.Legacy.Tests/AlexaVoxCraft.Model.Apl.Legacy.Tests.csproj",
                "test/AlexaVoxCraft.Model.Apl.Tests/AlexaVoxCraft.Model.Apl.Tests.csproj",
                "test/AlexaVoxCraft.Model.InSkillPurchasing.Tests/AlexaVoxCraft.Model.InSkillPurchasing.Tests.csproj",
                "test/AlexaVoxCraft.Model.Legacy.Tests/AlexaVoxCraft.Model.Legacy.Tests.csproj",
                "test/AlexaVoxCraft.Model.Tests/AlexaVoxCraft.Model.Tests.csproj",
                "test/AlexaVoxCraft.Smapi.Tests/AlexaVoxCraft.Smapi.Tests.csproj",
                "test/AlexaVoxCraft.TestKit/AlexaVoxCraft.TestKit.csproj"
              ],
              "dependency_bot_commit_share": 0.03
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "samples/Sample.Apl.Function/Sample.Apl.Function.csproj, samples/Sample.Fact.InSkill.Purchases/Sample.Fact.InSkill.Purchases.csproj, samples/Sample.Generated.Function/Sample.Generated.Function.csproj (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "samples/Sample.Apl.Function/Sample.Apl.Function.csproj, samples/Sample.Fact.InSkill.Purchases/Sample.Fact.InSkill.Purchases.csproj, samples/Sample.Generated.Function/Sample.Generated.Function.csproj"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "C# (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C#"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "56 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 56,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "3 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 3,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "C#",
              "largest_source_bytes": 22660,
              "source_files_sampled": 1006,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "C# (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C#"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/1006 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1006,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples",
                "samples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples, samples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples, samples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch pypi package 'alexa-vox-craft-docs' from its registry"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T18:38:33.968927Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/l/LayeredCraft/alexa-vox-craft.svg",
  "full_name": "LayeredCraft/alexa-vox-craft",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

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