Public record
Software health reportschema 0.26.0 · metrics 1.13.0 · 2026-07-22 18:38 UTC

LayeredCraft / alexa-vox-craft

C#Apache-2.0★ 2 stars⑂ 0 forkssince Mar 2024View on GitHub ↗

LayeredCraft/alexa-vox-craft holds a health index of 64 out of 100, placing it in the Moderate band. It scores highest on Vitality (84/100) and lowest on Sustainability & Governance (48/100). It was last updated today. A single contributor accounts for most of its recent work.

64
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

64
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

LayeredCraftOrganization
1 follower17 public repossince May 2025

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

84Good · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
15.9/36Commit cadence — 23/52 weeks with commits
16.2/18Commit volume — 63 commits in the last year
5/10OpenSSF Scorecard: Maintained — 7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
Inputs used
commits_last_year63
human_commit_share0.97
days_since_last_push0
active_weeks_last_year23

Release discipline

100Excellent
How it's scored
27/27Ships releases — 97 releases published
36/36Release recency — latest release 26 days ago
27/27Release cadence — a release every ~11 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count97
latest_release_tagv7.3.6
releases_from_tagsno
days_since_latest_release26
mean_days_between_releases11
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

49At risk · 18% of overall
How it's scored
0/60Stars — 2 stars
0/25Forks — 0 forks
0/15Watchers — 1 watchers
Inputs used
forks0
stars2
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

Community health

92Excellent
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-2.0)
18/18CONTRIBUTING guide
13.5/13.5Code of conduct
0/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductyes
has_pull_request_templateyes
How it's scored
53.5/80Total downloads — 139,577 downloads all-time across nuget
0/20Registry dependents — not reported by this ecosystem
Inputs used
packagesAlexaVoxCraft.Http, AlexaVoxCraft.Model, AlexaVoxCraft.Smapi, AlexaVoxCraft.Lambda, AlexaVoxCraft.MediatR, AlexaVoxCraft.Model.Apl, AlexaVoxCraft.MinimalLambda, AlexaVoxCraft.Observability
dependents
ecosystemsnuget
total_downloads139,577
monthly_downloads
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

48At risk · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0/22.5Commit distribution — top contributor authored 100% of commits
1.4/13.5Contributor breadth — 1 contributors
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Inputs used
bus_factor1
contributors_sampled1
top_contributor_share1
How it's scored
31.2/46.8Issue resolution — 67% of issues closed
22.9/38.3PR acceptance — 98/164 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/28 approved changesets -- score normalized to 0
Inputs used
merged_prs98
open_issues2
closed_issues4
issue_closed_ratio0.667
closed_unmerged_prs66
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
2.2/25Owner reach — 1 followers of LayeredCraft
11.5/25Track record — 17 public repos, account ~1 yr old
Inputs used
followers1
owner_typeOrganization
is_verified
owner_loginLayeredCraft
public_repos17
account_age_days427
How it's scored
25/25Published & resolvable — 8 package(s) on nuget
35/35Publish recency — latest publish 26 days ago
20/20Version history — 48 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesAlexaVoxCraft.Http, AlexaVoxCraft.Model, AlexaVoxCraft.Smapi, AlexaVoxCraft.Lambda, AlexaVoxCraft.MediatR, AlexaVoxCraft.Model.Apl, AlexaVoxCraft.MinimalLambda, AlexaVoxCraft.Observability
ecosystemsnuget
any_deprecatedno
min_days_since_publish26

Engineering Quality

Are baseline engineering and documentation practices in place?

70Good · 20% of overall
How it's scored
24/24CI workflows — 7 workflow(s)
24/24Tests present
0/16Linter config
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
Inputs used
has_ciyes
has_testsyes
has_editorconfigyes
has_linter_configno
has_precommit_configno

Documentation

65Moderate
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
0/10Repository description
10/10Topics — 5 topics
0/10Wiki
Inputs used
topicsaws, dotnet, layeredcraft, open-source, serverless
has_wikino
homepage
has_readmeyes
has_docs_diryes
has_descriptionno

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

70Good · 16% of overall
How it's scored
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.5License — 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 — no data
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 — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate6.2
Excluded from scoring (no data or not applicable): packaging, signed_releases. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
0/25Indirect dependencies free of known advisories — transitive set not separable from development and test dependencies in this scope
0/40No advisories left outstanding — no advisory carries a publication date
Inputs used
sourceosv
advisories0
affected_packages0
assessed_packages34
unassessed_packages32
affected_by_severitynone
direct_affected_packages0
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.

AI Readiness

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.

76Good · 0% of overall
How it's scored
45/45Agent instructions — CLAUDE.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 86 of 97 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.887
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes19,495
How it's scored
12.6/18One-command bootstrap — 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)
22/22Automated tests
0/11Lint / format config
11/11Static type checking — C# (statically typed)
10/10Reproducible environment — lockfile
10/10Demonstrated agent practice — 56 of the last 100 commits agent-authored or agent-credited
8/8Automated maintenance — 3 of the last 100 commits are automated dependency updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfilesuv.lock
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0.56
toolchain_manifestssamples/Sample.Apl.Function/Sample.Apl.Function.csproj, samples/Sample.Fact.InSkill.Purchases/Sample.Fact.InSkill.Purchases.csproj, samples/Sample.Generated.Function/Sample.Generated.Function.csproj, samples/Sample.Host.Function/Sample.Host.Function.csproj, samples/Sample.Skill.Function/Sample.Skill.Function.csproj, src/AlexaVoxCraft.Http/AlexaVoxCraft.Http.csproj, src/AlexaVoxCraft.InSkillPurchasing/AlexaVoxCraft.InSkillPurchasing.csproj, src/AlexaVoxCraft.Lambda/AlexaVoxCraft.Lambda.csproj, src/AlexaVoxCraft.MediatR.Generators/AlexaVoxCraft.MediatR.Generators.csproj, src/AlexaVoxCraft.MediatR.Lambda/AlexaVoxCraft.MediatR.Lambda.csproj, src/AlexaVoxCraft.MediatR/AlexaVoxCraft.MediatR.csproj, src/AlexaVoxCraft.MinimalLambda/AlexaVoxCraft.MinimalLambda.csproj, src/AlexaVoxCraft.Model.Apl/AlexaVoxCraft.Model.Apl.csproj, src/AlexaVoxCraft.Model.InSkillPurchasing/AlexaVoxCraft.Model.InSkillPurchasing.csproj, src/AlexaVoxCraft.Model/AlexaVoxCraft.Model.csproj, src/AlexaVoxCraft.Observability/AlexaVoxCraft.Observability.csproj, src/AlexaVoxCraft.Smapi/AlexaVoxCraft.Smapi.csproj, test/AlexaVoxCraft.Http.TestKit/AlexaVoxCraft.Http.TestKit.csproj, test/AlexaVoxCraft.InSkillPurchasing.Tests/AlexaVoxCraft.InSkillPurchasing.Tests.csproj, test/AlexaVoxCraft.MediatR.Generator.Tests/AlexaVoxCraft.MediatR.Generator.Tests.csproj, test/AlexaVoxCraft.MediatR.Lambda.Tests/AlexaVoxCraft.MediatR.Lambda.Tests.csproj, test/AlexaVoxCraft.MediatR.Tests/AlexaVoxCraft.MediatR.Tests.csproj, test/AlexaVoxCraft.Model.Apl.Legacy.Tests/AlexaVoxCraft.Model.Apl.Legacy.Tests.csproj, test/AlexaVoxCraft.Model.Apl.Tests/AlexaVoxCraft.Model.Apl.Tests.csproj, test/AlexaVoxCraft.Model.InSkillPurchasing.Tests/AlexaVoxCraft.Model.InSkillPurchasing.Tests.csproj, test/AlexaVoxCraft.Model.Legacy.Tests/AlexaVoxCraft.Model.Legacy.Tests.csproj, test/AlexaVoxCraft.Model.Tests/AlexaVoxCraft.Model.Tests.csproj, test/AlexaVoxCraft.Smapi.Tests/AlexaVoxCraft.Smapi.Tests.csproj, test/AlexaVoxCraft.TestKit/AlexaVoxCraft.TestKit.csproj
dependency_bot_commit_share0.03
How it's scored
45/45Type-checkable code — C# (statically typed)
55/55Manageable file sizes — 0/1,006 source files over 60KB
Inputs used
primary_languageC#
largest_source_bytes22,660
source_files_sampled1,006
oversized_source_files0
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — examples, samples
Inputs used
example_dirsexamples, samples
has_mcp_signalno
api_schema_files

Key facts

2GitHub stars
1contributors
63commits, last 12 months
0days since last push
97releases
1bus factor
2open issues
PyPIpackage ecosystems

Data collection 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

More detail

OpenSSF Scorecard 6.2 / 10
6.2aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-22 18:38 UTC

10Binary-Artifactsno binaries found in the repo
8Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests24 out of 24 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/28 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
5Maintained7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
n/aPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
8SASTSAST tool is not run on all commits -- score normalized to 8
10Security-Policysecurity policy file detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direct dependencies 25
RegistryPackageVersion constraintManifest
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
All dependencies 66

Full resolved dependency set from the GitHub dependency graph: 20 direct and 46 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
NuGetAmazon.Lambda.Coredirect
NuGetAmazon.Lambda.RuntimeSupportdirect
NuGetAmazon.Lambda.Serialization.SystemTextJsondirect
NuGetLayeredCraft.Logging.CompactJsonFormatterdirect
NuGetLayeredCraft.StructuredLoggingdirect
NuGetMicrosoft.CodeAnalysis.Analyzersdirect
NuGetMicrosoft.CodeAnalysis.CSharpdirect
NuGetMicrosoft.Extensions.Configuration.Binderdirect
NuGetMicrosoft.Extensions.DependencyInjection.Abstractionsdirect
NuGetMicrosoft.Extensions.Hostingdirect
NuGetMicrosoft.Extensions.Httpdirect
NuGetMicrosoft.Extensions.Optionsdirect
NuGetMinimalLambdadirect
NuGetOpenTelemetrydirect
NuGetOpenTelemetry.Apidirect
NuGetSerilogdirect
NuGetSerilog.AspNetCoredirect
NuGetSerilog.Enrichers.Activitydirect
PyPImkdocs-material9.7.7direct
PyPImkdocs-minify-plugin0.8.0direct
NuGetAutoFixtureindirect
NuGetAutoFixture.AutoNSubstituteindirect
NuGetAutoFixture.Xunit3indirect
NuGetAwesomeAssertionsindirect
NuGetBasic.Reference.Assemblies.Net100indirect
NuGetBasic.Reference.Assemblies.Net110indirect
NuGetBasic.Reference.Assemblies.Net80indirect
NuGetBasic.Reference.Assemblies.Net90indirect
NuGetMicrosoft.ICU.ICU4C.Runtimeindirect
NuGetNSubstituteindirect
NuGetOpenTelemetry.Exporter.InMemoryindirect
NuGetSerilog.Sinks.Consoleindirect
NuGetVerify.SourceGeneratorsindirect
NuGetVerify.XunitV3indirect
PyPIalexa-vox-craft-docs0.0.0indirect
PyPIbabel2.18.0indirect
PyPIbackrefs7.0indirect
PyPIcertifi2026.7.22indirect
PyPIcharset-normalizer3.4.9indirect
PyPIclick8.4.2indirect
PyPIcolorama0.4.6indirect
PyPIcsscompressor0.9.5indirect
PyPIghp-import2.1.0indirect
PyPIhtmlmin20.1.13indirect
PyPIidna3.18indirect
PyPIjinja23.1.6indirect
PyPIjsmin3.0.1indirect
PyPImarkdown3.10.2indirect
PyPImarkupsafe3.0.3indirect
PyPImergedeep1.3.4indirect
PyPImkdocs1.6.1indirect
PyPImkdocs-get-deps0.2.2indirect
PyPImkdocs-material-extensions1.3.1indirect
PyPIpackaging26.2indirect
PyPIpaginate0.5.7indirect
PyPIpathspec1.1.1indirect
PyPIplatformdirs4.11.0indirect
PyPIpygments2.20.0indirect
PyPIpymdown-extensions11.0.1indirect
PyPIpython-dateutil2.9.0.post0indirect
PyPIpyyaml6.0.3indirect
PyPIpyyaml-env-tag1.1indirect
PyPIrequests2.34.2indirect
PyPIsix1.17.0indirect
PyPIurllib32.7.0indirect
PyPIwatchdog6.0.0indirect
Dependency advisories 0

This repository publishes no package the index resolves, so its own dependency graph was assessed — 34 packages, which also include development and test pins that never ship: 0 carry known advisories, of which 0 are direct. 32 could not be assessed — no resolved version, an unsupported ecosystem, or beyond the reported package list.

No known advisories affect the assessed dependencies.

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.26.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsNuGet.