公开记录
软件健康报告模式 0.26.0 · 指标 1.13.0 · 2026-07-22 18:38 UTC

LayeredCraft / alexa-vox-craft

C#Apache-2.0★ 2 星标⑂ 0 复刻始于 2024年3月在 GitHub 上查看 ↗

LayeredCraft/alexa-vox-craft 的健康指数为 100 分中的 64 分,处于「中等」区间。 其得分最高的类别是Vitality(84/100),最低的是Sustainability & Governance(48/100)。 最近一次更新在今天。 近期的大部分工作由 1 位贡献者完成。

64
总分 / 100
中等

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

64
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

所有权

1 关注者17 个公开仓库始于 2025年5月

该仓库由组织支持——共同承担、可问责的托管责任,可延续于任何单一维护者之后。

软件包生态系统

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

84良好 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 0 天前
15.9/36提交节奏 — 52 周中有 23 周有提交
16.2/18提交量 — 最近一年 63 次提交
5/10OpenSSF Scorecard:Maintained — 7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5
所用输入
commits_last_year63
human_commit_share0.97
days_since_last_push0
active_weeks_last_year23

发布纪律

100优秀
评分方式
27/27有发布版本 — 已发布 97 个发布版本
36/36发布时效 — 最近一次发布版本于 26 天前
27/27发布节奏 — 约每 11 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count97
latest_release_tagv7.3.6
releases_from_tags
days_since_latest_release26
mean_days_between_releases11
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

49存在风险 · 占总体的 18%
评分方式
0/60星标 — 2 个星标
0/25复刻 — 0 个复刻
0/15关注者 — 1 位关注者
所用输入
forks0
stars2
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

92优秀
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(Apache-2.0)
18/18CONTRIBUTING 指南
13.5/13.5行为准则
0/7.2议题模板
6.3/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template
评分方式
53.5/80累计下载量 — nuget 合计历史 139,577 次下载
0/20注册表被依赖数 — 该生态系统不报告此项
所用输入
packagesAlexaVoxCraft.Http, AlexaVoxCraft.Model, AlexaVoxCraft.Smapi, AlexaVoxCraft.Lambda, AlexaVoxCraft.MediatR, AlexaVoxCraft.Model.Apl, AlexaVoxCraft.MinimalLambda, AlexaVoxCraft.Observability
dependents
ecosystemsnuget
total_downloads139,577
monthly_downloads
已排除计分(无数据或不适用):注册表被依赖数。 其余权重已重新归一化。

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

48存在风险 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
0/22.5提交分布 — 头号贡献者编写了 100% 的提交
1.4/13.5贡献者广度 — 1 位贡献者
3/10OpenSSF Scorecard:Contributors — project has 1 contributing companies or organizations -- score normalized to 3
所用输入
bus_factor1
contributors_sampled1
top_contributor_share1
评分方式
31.2/46.8议题解决 — 67% 的议题已关闭
22.9/38.3PR 接受 — 已裁定的 PR 中 98/164 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/28 approved changesets -- score normalized to 0
所用输入
merged_prs98
open_issues2
closed_issues4
issue_closed_ratio0.667
closed_unmerged_prs66
评分方式
30/30所有权背书 — 组织持有
0/20已验证域名
2.2/25所有者影响力 — LayeredCraft 有 1 位关注者
11.5/25既往记录 — 17 个公开仓库,账户约 1 年
所用输入
followers1
owner_typeOrganization
is_verified
owner_loginLayeredCraft
public_repos17
account_age_days427
评分方式
25/25已发布且可解析 — nuget 上有 8 个软件包
35/35发布时效 — 最近一次发布于 26 天前
20/20版本历史 — 48 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesAlexaVoxCraft.Http, AlexaVoxCraft.Model, AlexaVoxCraft.Smapi, AlexaVoxCraft.Lambda, AlexaVoxCraft.MediatR, AlexaVoxCraft.Model.Apl, AlexaVoxCraft.MinimalLambda, AlexaVoxCraft.Observability
ecosystemsnuget
any_deprecated
min_days_since_publish26

工程质量

基础的工程与文档实践是否到位?

70良好 · 占总体的 20%

工程实践

74良好
评分方式
24/24CI 工作流 — 7 个工作流
24/24存在测试
0/16Linter 配置
0/9.6Pre-commit 钩子
6.4/6.4.editorconfig
20/20OpenSSF Scorecard:CI-Tests — 24 out of 24 merged PRs checked by a CI test -- score normalized to 10
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

文档

65中等
评分方式
30/30README
25/25文档目录
0/15文档 / 主页站点
0/10仓库描述
10/10主题标签 — 5 个主题标签
0/10Wiki
所用输入
topicsaws, dotnet, layeredcraft, open-source, serverless
has_wiki
homepage
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

70良好 · 占总体的 16%

安全态势

62中等
评分方式
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.5许可证 — 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 — 无数据
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 — 无数据
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate6.2
已排除计分(无数据或不适用):packaging, signed_releases。 其余权重已重新归一化。
评分方式
35/35直接依赖不含已知公告 — 没有直接依赖携带已知公告
0/25间接依赖不含已知公告 — 在此范围内,传递依赖集合无法与开发和测试依赖区分
0/40没有长期未处理的公告 — 没有公告带有发布日期
所用输入
sourceosv
advisories0
affected_packages0
assessed_packages34
unassessed_packages32
affected_by_severitynone
direct_affected_packages0
已排除计分(无数据或不适用):间接依赖不含已知公告, 没有长期未处理的公告。 其余权重已重新归一化。 已将 34 个已解析依赖与 OSV 比对。 有 32 项无法评估——没有已解析的版本、生态系统不受支持,或超出所报告的软件包清单。 该仓库未发布任何索引可解析的软件包,因此改为评估仓库依赖图。该图将开发与测试版本固定同交付的依赖混在一起,因此仅对声明的运行时依赖计分;传递性发现仅作为背景信息列出,不计入评分。 未对可达性进行分析。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

76良好 · 占总体的 0%
评分方式
45/45代理指令 — CLAUDE.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 97 次人类提交中有 86 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.887
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes19,495
评分方式
12.6/18一条命令的引导启动 — 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(工具链约定,无任务运行器)
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — C#(静态类型)
10/10可复现环境 — lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 56 次由代理编写或署名代理
8/8自动化维护 — 最近 100 次提交中有 3 次为自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfilesuv.lock
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
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
评分方式
45/45可类型检查的代码 — C#(静态类型)
55/55可控的文件大小 — 采样的 1,006 个源文件中有 0 个超过 60KB
所用输入
primary_languageC#
largest_source_bytes22,660
source_files_sampled1,006
oversized_source_files0

机器可读接口

40存在风险
评分方式
0/40API 模式(OpenAPI/GraphQL/proto)
0/20MCP 服务器
40/40可运行示例 — examples, samples
所用输入
example_dirsexamples, samples
has_mcp_signal
api_schema_files

关键数据

2GitHub 星标
1贡献者
63最近 12 个月提交数
0距最近推送天数
97发布版本数
1巴士系数(bus factor)
2开放议题
PyPI软件包生态系统数

数据采集警告

  • 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

更多细节

OpenSSF Scorecard 6.2 / 10
6.2综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。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
不适用Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
8SASTSAST tool is not run on all commits -- score normalized to 8
10Security-Policysecurity policy file detected
不适用Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
直接依赖 25
注册表软件包版本约束清单文件
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
全部依赖 66

来自 GitHub 依赖图的完整解析依赖集合:20 个直接依赖与 46 个间接(传递)软件包。仓库提交锁文件时,传递闭包才是完整的。

注册表软件包版本关系
NuGetAmazon.Lambda.Core直接
NuGetAmazon.Lambda.RuntimeSupport直接
NuGetAmazon.Lambda.Serialization.SystemTextJson直接
NuGetLayeredCraft.Logging.CompactJsonFormatter直接
NuGetLayeredCraft.StructuredLogging直接
NuGetMicrosoft.CodeAnalysis.Analyzers直接
NuGetMicrosoft.CodeAnalysis.CSharp直接
NuGetMicrosoft.Extensions.Configuration.Binder直接
NuGetMicrosoft.Extensions.DependencyInjection.Abstractions直接
NuGetMicrosoft.Extensions.Hosting直接
NuGetMicrosoft.Extensions.Http直接
NuGetMicrosoft.Extensions.Options直接
NuGetMinimalLambda直接
NuGetOpenTelemetry直接
NuGetOpenTelemetry.Api直接
NuGetSerilog直接
NuGetSerilog.AspNetCore直接
NuGetSerilog.Enrichers.Activity直接
PyPImkdocs-material9.7.7直接
PyPImkdocs-minify-plugin0.8.0直接
NuGetAutoFixture间接
NuGetAutoFixture.AutoNSubstitute间接
NuGetAutoFixture.Xunit3间接
NuGetAwesomeAssertions间接
NuGetBasic.Reference.Assemblies.Net100间接
NuGetBasic.Reference.Assemblies.Net110间接
NuGetBasic.Reference.Assemblies.Net80间接
NuGetBasic.Reference.Assemblies.Net90间接
NuGetMicrosoft.ICU.ICU4C.Runtime间接
NuGetNSubstitute间接
NuGetOpenTelemetry.Exporter.InMemory间接
NuGetSerilog.Sinks.Console间接
NuGetVerify.SourceGenerators间接
NuGetVerify.XunitV3间接
PyPIalexa-vox-craft-docs0.0.0间接
PyPIbabel2.18.0间接
PyPIbackrefs7.0间接
PyPIcertifi2026.7.22间接
PyPIcharset-normalizer3.4.9间接
PyPIclick8.4.2间接
PyPIcolorama0.4.6间接
PyPIcsscompressor0.9.5间接
PyPIghp-import2.1.0间接
PyPIhtmlmin20.1.13间接
PyPIidna3.18间接
PyPIjinja23.1.6间接
PyPIjsmin3.0.1间接
PyPImarkdown3.10.2间接
PyPImarkupsafe3.0.3间接
PyPImergedeep1.3.4间接
PyPImkdocs1.6.1间接
PyPImkdocs-get-deps0.2.2间接
PyPImkdocs-material-extensions1.3.1间接
PyPIpackaging26.2间接
PyPIpaginate0.5.7间接
PyPIpathspec1.1.1间接
PyPIplatformdirs4.11.0间接
PyPIpygments2.20.0间接
PyPIpymdown-extensions11.0.1间接
PyPIpython-dateutil2.9.0.post0间接
PyPIpyyaml6.0.3间接
PyPIpyyaml-env-tag1.1间接
PyPIrequests2.34.2间接
PyPIsix1.17.0间接
PyPIurllib32.7.0间接
PyPIwatchdog6.0.0间接
依赖安全公告 0

该仓库未发布可被索引解析的包,因此评估的是其自身的依赖图——共 34 个包,其中也包含从不交付的开发与测试版本固定:0 个存在已知公告,0 个为直接依赖。 有 32 个无法评估——没有已解析的版本、生态系统不受支持,或不在所列包清单之内。

没有已知公告影响已评估的依赖。

公告表示依赖图中记录的版本落入某条公告的受影响范围。可达性未经分析,且依赖图包含开发与测试的版本固定——某项发现可能只涉及工具链而非交付的软件。

原始 JSON 报告 机器可读
{
  "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"
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.26.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计NuGet.