Öffentliches Register
Software-GesundheitsberichtSchema 0.26.0 · Metriken 1.13.0 · 2026-07-22 18:38 UTC

LayeredCraft / alexa-vox-craft

C#Apache-2.0★ 2 Sterne⑂ 0 Forksseit März 2024Auf GitHub ansehen ↗

LayeredCraft/alexa-vox-craft erreicht einen Gesundheitsindex von 64 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (84/100) ab, am schwächsten bei Sustainability & Governance (48/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

64
gesamt / 100
Mittel

Software-Gesundheitsindex

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

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

Bewertungsprofil

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

Eigentümerschaft

LayeredCraftOrganisation
1 Follower17 öffentliche Reposseit Mai 2025

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

Paket-Ökosysteme

Metriken nach Kategorie

Vitalität

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

84Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
15.9/36Commit-Rhythmus — 23/52 Wochen mit Commits
16.2/18Commit-Volumen — 63 Commits im letzten Jahr
5/10OpenSSF Scorecard: Maintained — 7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
Verwendete Eingangsdaten
commits_last_year63
human_commit_share0,97
days_since_last_push0
active_weeks_last_year23

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 97 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 26 Tagen
27/27Release-Rhythmus — ein Release etwa alle 11 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count97
latest_release_tagv7.3.6
releases_from_tagsnein
days_since_latest_release26
mean_days_between_releases11
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

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

49Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 2 Stars
0/25Forks — 0 Forks
0/15Watcher — 1 Watcher
Verwendete Eingangsdaten
forks0
stars2
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.0)
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductja
has_pull_request_templateja
Wie die Bewertung erfolgt
53.5/80Downloads gesamt — 139.577 Downloads insgesamt über nuget
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesAlexaVoxCraft.Http, AlexaVoxCraft.Model, AlexaVoxCraft.Smapi, AlexaVoxCraft.Lambda, AlexaVoxCraft.MediatR, AlexaVoxCraft.Model.Apl, AlexaVoxCraft.MinimalLambda, AlexaVoxCraft.Observability
dependents
ecosystemsnuget
total_downloads139.577
monthly_downloads
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

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

48Gefährdet · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
31.2/46.8Issue-Lösungsquote — 67 % der Issues geschlossen
22.9/38.3PR-Annahme — 98/164 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/28 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs98
open_issues2
closed_issues4
issue_closed_ratio0,667
closed_unmerged_prs66
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
2.2/25Reichweite des Inhabers — 1 Follower von LayeredCraft
11.5/25Kontohistorie — 17 öffentliche Repos, Kontoalter ca. 1 Jahre
Verwendete Eingangsdaten
followers1
owner_typeOrganization
is_verified
owner_loginLayeredCraft
public_repos17
account_age_days427

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 8 Paket(e) auf nuget
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 26 Tagen
20/20Versionshistorie — 48 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesAlexaVoxCraft.Http, AlexaVoxCraft.Model, AlexaVoxCraft.Smapi, AlexaVoxCraft.Lambda, AlexaVoxCraft.MediatR, AlexaVoxCraft.Model.Apl, AlexaVoxCraft.MinimalLambda, AlexaVoxCraft.Observability
ecosystemsnuget
any_deprecatednein
min_days_since_publish26

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

70Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 7 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
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
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfigja
has_linter_confignein
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
0/10Repository-Beschreibung
10/10Topics — 5 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsaws, dotnet, layeredcraft, open-source, serverless
has_wikinein
homepage
has_readmeja
has_docs_dirja
has_descriptionnein

Sicherheit

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

70Gut · 16 % des Gesamtindex
Wie die Bewertung erfolgt
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.5Lizenz — 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 — keine Daten
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 — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate6,2
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
0/25Indirekte Abhängigkeiten ohne bekannte Advisories — transitive Menge in diesem Bereich nicht von Entwicklungs- und Test-Abhängigkeiten trennbar
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages34
unassessed_packages32
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Indirekte Abhängigkeiten ohne bekannte Advisories, Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. 34 aufgelöste Abhängigkeiten wurden mit OSV abgeglichen. 32 konnten nicht bewertet werden — keine aufgelöste Version, ein nicht unterstütztes Ökosystem oder außerhalb der ausgewiesenen Paketliste. Dieses Repository veröffentlicht kein Paket, das der Index auflöst; bewertet wurde daher der Abhängigkeitsgraph des Repositorys. Dieser Graph vermischt Entwicklungs- und Test-Pins mit ausgelieferten Abhängigkeiten, daher werden nur die deklarierten Laufzeit-Abhängigkeiten bewertet; transitive Befunde werden als Kontext ausgewiesen und fließen nicht in die Bewertung ein. Erreichbarkeit wird nicht analysiert.

AI Readiness

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

76Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 86 von 97 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,887
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes19.495
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — 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-Konvention, kein Task-Runner)
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — C# (statisch typisiert)
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 56 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 3 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesuv.lock
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
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
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — C# (statisch typisiert)
55/55Handhabbare Dateigrößen — 0/1.006 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageC#
largest_source_bytes22.660
source_files_sampled1.006
oversized_source_files0
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples, samples
Verwendete Eingangsdaten
example_dirsexamples, samples
has_mcp_signalnein
api_schema_files

Eckdaten

2GitHub-Sterne
1Mitwirkende
63Commits, letzte 12 Monate
0Tage seit letztem Push
97Releases
1Bus-Faktor
2offene Issues
PyPIPaket-Ökosysteme

Warnungen zur Datenerhebung

  • 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

Weitere Details

OpenSSF Scorecard 6.2 / 10
6.2Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-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
k. A.Packagingpackaging 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
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 25
RegistryPaketVersionsvorgabeManifest
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
Alle Abhängigkeiten 66

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

RegistryPaketVersionBeziehung
NuGetAmazon.Lambda.Coredirekt
NuGetAmazon.Lambda.RuntimeSupportdirekt
NuGetAmazon.Lambda.Serialization.SystemTextJsondirekt
NuGetLayeredCraft.Logging.CompactJsonFormatterdirekt
NuGetLayeredCraft.StructuredLoggingdirekt
NuGetMicrosoft.CodeAnalysis.Analyzersdirekt
NuGetMicrosoft.CodeAnalysis.CSharpdirekt
NuGetMicrosoft.Extensions.Configuration.Binderdirekt
NuGetMicrosoft.Extensions.DependencyInjection.Abstractionsdirekt
NuGetMicrosoft.Extensions.Hostingdirekt
NuGetMicrosoft.Extensions.Httpdirekt
NuGetMicrosoft.Extensions.Optionsdirekt
NuGetMinimalLambdadirekt
NuGetOpenTelemetrydirekt
NuGetOpenTelemetry.Apidirekt
NuGetSerilogdirekt
NuGetSerilog.AspNetCoredirekt
NuGetSerilog.Enrichers.Activitydirekt
PyPImkdocs-material9.7.7direkt
PyPImkdocs-minify-plugin0.8.0direkt
NuGetAutoFixtureindirekt
NuGetAutoFixture.AutoNSubstituteindirekt
NuGetAutoFixture.Xunit3indirekt
NuGetAwesomeAssertionsindirekt
NuGetBasic.Reference.Assemblies.Net100indirekt
NuGetBasic.Reference.Assemblies.Net110indirekt
NuGetBasic.Reference.Assemblies.Net80indirekt
NuGetBasic.Reference.Assemblies.Net90indirekt
NuGetMicrosoft.ICU.ICU4C.Runtimeindirekt
NuGetNSubstituteindirekt
NuGetOpenTelemetry.Exporter.InMemoryindirekt
NuGetSerilog.Sinks.Consoleindirekt
NuGetVerify.SourceGeneratorsindirekt
NuGetVerify.XunitV3indirekt
PyPIalexa-vox-craft-docs0.0.0indirekt
PyPIbabel2.18.0indirekt
PyPIbackrefs7.0indirekt
PyPIcertifi2026.7.22indirekt
PyPIcharset-normalizer3.4.9indirekt
PyPIclick8.4.2indirekt
PyPIcolorama0.4.6indirekt
PyPIcsscompressor0.9.5indirekt
PyPIghp-import2.1.0indirekt
PyPIhtmlmin20.1.13indirekt
PyPIidna3.18indirekt
PyPIjinja23.1.6indirekt
PyPIjsmin3.0.1indirekt
PyPImarkdown3.10.2indirekt
PyPImarkupsafe3.0.3indirekt
PyPImergedeep1.3.4indirekt
PyPImkdocs1.6.1indirekt
PyPImkdocs-get-deps0.2.2indirekt
PyPImkdocs-material-extensions1.3.1indirekt
PyPIpackaging26.2indirekt
PyPIpaginate0.5.7indirekt
PyPIpathspec1.1.1indirekt
PyPIplatformdirs4.11.0indirekt
PyPIpygments2.20.0indirekt
PyPIpymdown-extensions11.0.1indirekt
PyPIpython-dateutil2.9.0.post0indirekt
PyPIpyyaml6.0.3indirekt
PyPIpyyaml-env-tag1.1indirekt
PyPIrequests2.34.2indirekt
PyPIsix1.17.0indirekt
PyPIurllib32.7.0indirekt
PyPIwatchdog6.0.0indirekt
Abhängigkeits-Advisories 0

Dieses Repository veröffentlicht kein vom Index auflösbares Paket, daher wurde sein eigener Abhängigkeitsgraph bewertet – 34 Pakete, darunter auch Entwicklungs- und Test-Pins, die nie ausgeliefert werden: 0 tragen bekannte Advisories, davon 0 direkte. 32 konnten nicht bewertet werden – keine aufgelöste Version, ein nicht unterstütztes Ökosystem, oder außerhalb der ausgewiesenen Paketliste.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

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

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "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"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenNuGet.