公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-26 13:22 UTC

Fallout-build / Fallout

☢️ Fallout — The C#/.NET Build System

C#自定义许可证★ 100 星标⑂ 13 复刻始于 2026年5月在 GitHub 上查看 ↗

Fallout-build/Fallout 的健康指数为 100 分中的 63 分,处于「中等」区间。 其得分最高的类别是AI Readiness(82/100),最低的是Sustainability & Governance(46/100)。 最近一次更新在今天。 近期的大部分工作由 1 位贡献者完成。

63
总分 / 100
中等

软件健康指数

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

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

评分画像

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

所有权

3 关注者8 个公开仓库始于 2026年5月

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

按类别列示的指标

活力

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

74良好 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 0 天前
9/36提交节奏 — 52 周中有 13 周有提交
18/18提交量 — 最近一年 336 次提交
0/10OpenSSF Scorecard:Maintained — project was created within the last 90 days. Please review its contents carefully
所用输入
commits_last_year336
human_commit_share0.99
days_since_last_push0
active_weeks_last_year13

发布纪律

90优秀
评分方式
27/27有发布版本 — 已发布 65 个发布版本
36/36发布时效 — 最近一次发布版本于 0 天前
27/27发布节奏 — 约每 6.7 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — Project has not signed or included provenance with any releases.
所用输入
releases_count65
latest_release_tagv10.4.0-rc.4
releases_from_tags
days_since_latest_release0
mean_days_between_releases6.7

社区与采用

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

64中等 · 占总体的 18%

流行度与采用

45存在风险
评分方式
32.4/60星标 — 100 个星标
9/25复刻 — 13 个复刻
3.3/15关注者 — 5 位关注者
所用输入
forks13
stars100
watchers5
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

86优秀
评分方式
22.5/22.5README
16.9/22.5许可证 — 存在许可证文件,但不是可识别的许可证
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

可持续性与治理

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

46存在风险 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
3.8/22.5提交分布 — 头号贡献者编写了 83% 的提交
13.5/13.5贡献者广度 — 99 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 24 contributing companies or organizations
所用输入
bus_factor1
contributors_sampled99
top_contributor_share0.831
评分方式
19.8/46.8议题解决 — 42% 的议题已关闭
32.7/38.3PR 接受 — 已裁定的 PR 中 225/263 已合并
10.5/15OpenSSF Scorecard:Code-Review — Found 11/14 approved changesets -- score normalized to 7
所用输入
merged_prs225
open_issues154
closed_issues113
issue_closed_ratio0.423
closed_unmerged_prs38
评分方式
30/30所有权背书 — 组织持有
0/20已验证域名
4.3/25所有者影响力 — Fallout-build 有 3 位关注者
7.3/25既往记录 — 8 个公开仓库,账户约 0 年
所用输入
followers3
owner_typeOrganization
is_verified
owner_loginFallout-build
public_repos8
account_age_days59

工程质量

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

80良好 · 占总体的 20%

工程实践

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

文档

90优秀
评分方式
30/30README
25/25文档目录
15/15文档 / 主页站点 — https://fallout.build/
10/10仓库描述
0/10主题标签
10/10Wiki
所用输入
topics
has_wiki
homepagehttps://fallout.build/
has_readme
has_docs_dir
has_description

安全

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

54中等 · 占总体的 16%

安全态势

54中等
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 14 out of 14 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
5.2/7.5Code-Review — Found 11/14 approved changesets -- score normalized to 7
2.5/2.5Contributors — project has 24 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.2/2.5许可证 — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
1.5/5SAST — SAST tool is not run on all commits -- score normalized to 3
4.5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate5.4
评分方式
8.9/35直接依赖不含已知公告 — 3 个受影响:Microsoft.Build.Tasks.Core 17.11.48 (high 8.0), Scriban 7.2.0 (high 7.5), System.Security.Cryptography.Xml 10.0.6 (high 8.1)
0/25间接依赖不含已知公告 — 在此范围内,传递依赖集合无法与开发和测试依赖区分
33.3/40没有长期未处理的公告 — 1 个携带公告的软件包超过 90 天未处理;最早一条发布于 438 天前
所用输入
sourceosv
advisories9
affected_packages3
assessed_packages311
unassessed_packages8
affected_by_severityhigh 3
direct_affected_packages3
已排除计分(无数据或不适用):间接依赖不含已知公告。 其余权重已重新归一化。 已将 311 个已解析依赖与 OSV 比对。 有 8 项无法评估——没有已解析的版本、生态系统不受支持,或超出所报告的软件包清单。 该仓库未发布任何索引可解析的软件包,因此改为评估仓库依赖图。该图将开发与测试版本固定同交付的依赖混在一起,因此仅对声明的运行时依赖计分;传递性发现仅作为背景信息列出,不计入评分。 未对可达性进行分析。

AI 就绪度

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

82良好 · 占总体的 0%
评分方式
45/45代理指令 — AGENTS.md, CLAUDE.md
0/15机器可读文档(llms.txt)
39.3/40可读的提交历史 — 99 次人类提交中有 73 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.737
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes12,008
评分方式
12.6/18一条命令的引导启动 — build/_build.csproj, src/Fallout.Build.Shared/Fallout.Build.Shared.csproj, src/Fallout.Build/Fallout.Build.csproj(工具链约定,无任务运行器)
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — C#(静态类型)
10/10可复现环境 — Dockerfile
10/10已体现的代理实践 — 最近 100 次提交中有 47 次由代理编写或署名代理
8/8自动化维护 — 最近 100 次提交中有 1 次为自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfiles
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0.47
toolchain_manifestsbuild/_build.csproj, src/Fallout.Build.Shared/Fallout.Build.Shared.csproj, src/Fallout.Build/Fallout.Build.csproj, src/Fallout.Cli/Fallout.Cli.csproj, src/Fallout.Cli/templates/_build.csproj, src/Fallout.Common/CI/TeamCity/Configuration/pom.xml, src/Fallout.Common/Fallout.Common.csproj, src/Fallout.Components/Fallout.Components.csproj, src/Fallout.Core/Fallout.Core.csproj, src/Fallout.MSBuildTasks/Fallout.MSBuildTasks.csproj, src/Fallout.Migrate.Analyzers/Fallout.Migrate.Analyzers.csproj, src/Fallout.Migrate/Fallout.Migrate.csproj, src/Fallout.ProjectModel/Fallout.ProjectModel.csproj, src/Fallout.SourceGenerators/Fallout.SourceGenerators.csproj, src/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj, src/Fallout.Tooling/Fallout.Tooling.csproj, src/Fallout.Utilities.IO.Compression/Fallout.Utilities.IO.Compression.csproj, src/Fallout.Utilities.IO.Globbing/Fallout.Utilities.IO.Globbing.csproj, src/Fallout.Utilities.Net/Fallout.Utilities.Net.csproj, src/Fallout.Utilities.Text.Json/Fallout.Utilities.Text.Json.csproj, src/Fallout.Utilities.Text.Yaml/Fallout.Utilities.Text.Yaml.csproj, src/Fallout.Utilities/Fallout.Utilities.csproj, src/Persistence/Fallout.Persistence.Solution/Fallout.Persistence.Solution.csproj, src/Persistence/Fallout.Solution/Fallout.Solution.csproj, src/Shims/Nuke.Build/Nuke.Build.csproj, src/Shims/Nuke.Common/Nuke.Common.csproj, src/Shims/Nuke.Components/Nuke.Components.csproj, tests/Benchmarks/Fallout.Persistence.Solution.Benchmarks/Fallout.Persistence.Solution.Benchmarks.csproj, tests/Consumers/Fallout.Consumer.Local/Fallout.Consumer.Local.csproj, tests/Consumers/Fallout.Consumer.NuGet/Fallout.Consumer.NuGet.csproj, tests/Consumers/Nuke.Consumer/Nuke.Consumer.csproj, tests/Fallout.Build.Specs/Fallout.Build.Specs.csproj, tests/Fallout.Cli.Specs/Fallout.Cli.Specs.csproj, tests/Fallout.Common.Specs/Fallout.Common.Specs.csproj, tests/Fallout.Components.Specs/Fallout.Components.Specs.csproj, tests/Fallout.Core.Specs/Fallout.Core.Specs.csproj, tests/Fallout.Migrate.Analyzers.Specs/Fallout.Migrate.Analyzers.Specs.csproj, tests/Fallout.Migrate.Specs/Fallout.Migrate.Specs.csproj, tests/Fallout.ProjectModel.Specs/Fallout.ProjectModel.Specs.csproj, tests/Fallout.Solution.Specs/Fallout.Solution.Specs.csproj, tests/Fallout.SourceGenerators.Specs/Fallout.SourceGenerators.Specs.csproj, tests/Fallout.Tooling.Specs/Fallout.Tooling.Specs.csproj, tests/Fallout.Utilities.Specs/Fallout.Utilities.Specs.csproj, tests/Nuke.Common.Shim.Specs/Nuke.Common.Shim.Specs.csproj, tests/Nuke.Components.Shim.Specs/Nuke.Components.Shim.Specs.csproj
dependency_bot_commit_share0.01
评分方式
45/45可类型检查的代码 — C#(静态类型)
53.7/55可控的文件大小 — 采样的 865 个源文件中有 20 个超过 60KB
所用输入
primary_languageC#
largest_source_bytes2,377,944
source_files_sampled865
oversized_source_files20

关键数据

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

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch nuget package 'Fallout.GlobalTools' from its registry

更多细节

Star 与 Fork 历史 0 ★ / 13 ⇿
0Star
13Fork
2发布

每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。

03581013151322026-062026-062026-07
主版本 0次版本 0修订 0
OpenSSF Scorecard 5.4 / 10
5.4综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-26 13:21 UTC

10Binary-Artifactsno binaries found in the repo
1Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests14 out of 14 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
7Code-ReviewFound 11/14 approved changesets -- score normalized to 7
10Contributorsproject has 24 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
3SASTSAST tool is not run on all commits -- score normalized to 3
9Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
直接依赖 47
注册表软件包版本约束清单文件
NuGetSystem.Security.Cryptography.Xml10.0.10build/_build.csproj
NuGetNerdbank.GitVersioning3.7.115build/_build.csproj
NuGetSystem.Text.Jsonsrc/Fallout.Build.Shared/Fallout.Build.Shared.csproj
NuGetMicrosoft.Extensions.DependencyModelsrc/Fallout.Build/Fallout.Build.csproj
NuGetSerilog.Formatting.Compactsrc/Fallout.Build/Fallout.Build.csproj
NuGetSerilog.Formatting.Compact.Readersrc/Fallout.Build/Fallout.Build.csproj
NuGetSerilog.Sinks.Consolesrc/Fallout.Build/Fallout.Build.csproj
NuGetSerilog.Sinks.Filesrc/Fallout.Build/Fallout.Build.csproj
NuGetMicrosoft.Extensions.DependencyInjectionsrc/Fallout.Cli/Fallout.Cli.csproj
NuGetSpectre.Consolesrc/Fallout.Cli/Fallout.Cli.csproj
NuGetMicrosoft.CodeAnalysis.CSharpsrc/Fallout.Cli/Fallout.Cli.csproj
NuGetMicrosoft.CodeAnalysis.Workspaces.MSBuildsrc/Fallout.Cli/Fallout.Cli.csproj
NuGetMicrosoft.CodeAnalysis.Workspaces.Commonsrc/Fallout.Cli/Fallout.Cli.csproj
NuGetAzure.Identitysrc/Fallout.Common/Fallout.Common.csproj
NuGetAzure.Security.KeyVault.Certificatessrc/Fallout.Common/Fallout.Common.csproj
NuGetAzure.Security.KeyVault.Keyssrc/Fallout.Common/Fallout.Common.csproj
NuGetAzure.Security.KeyVault.Secretssrc/Fallout.Common/Fallout.Common.csproj
NuGetOctokitsrc/Fallout.Common/Fallout.Common.csproj
NuGetNuGet.Packagingsrc/Fallout.MSBuildTasks/Fallout.MSBuildTasks.csproj
NuGetMicrosoft.Build.Utilities.Coresrc/Fallout.MSBuildTasks/Fallout.MSBuildTasks.csproj
NuGetMicrosoft.Build.Frameworksrc/Fallout.MSBuildTasks/Fallout.MSBuildTasks.csproj
NuGetMicrosoft.CodeAnalysis.CSharpsrc/Fallout.Migrate.Analyzers/Fallout.Migrate.Analyzers.csproj
NuGetMicrosoft.CodeAnalysis.CSharp.Workspacessrc/Fallout.Migrate.Analyzers/Fallout.Migrate.Analyzers.csproj
NuGetMicrosoft.CodeAnalysis.Analyzerssrc/Fallout.Migrate.Analyzers/Fallout.Migrate.Analyzers.csproj
NuGetJetBrains.Annotationssrc/Fallout.Migrate/Fallout.Migrate.csproj
NuGetSpectre.Console.Clisrc/Fallout.Migrate/Fallout.Migrate.csproj
NuGetMicrosoft.Build.Locatorsrc/Fallout.ProjectModel/Fallout.ProjectModel.csproj
NuGetMicrosoft.Buildsrc/Fallout.ProjectModel/Fallout.ProjectModel.csproj
NuGetMicrosoft.Build.Frameworksrc/Fallout.ProjectModel/Fallout.ProjectModel.csproj
NuGetMicrosoft.Build.Tasks.Coresrc/Fallout.ProjectModel/Fallout.ProjectModel.csproj
NuGetMicrosoft.Build.Utilities.Coresrc/Fallout.ProjectModel/Fallout.ProjectModel.csproj
NuGetMicrosoft.CodeAnalysis.CSharpsrc/Fallout.SourceGenerators/Fallout.SourceGenerators.csproj
NuGetMicrosoft.CodeAnalysis.Analyzerssrc/Fallout.SourceGenerators/Fallout.SourceGenerators.csproj
NuGetScribansrc/Fallout.SourceGenerators/Fallout.SourceGenerators.csproj
NuGetHtmlAgilityPacksrc/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj
NuGetHumanizersrc/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj
NuGetSystem.Text.Jsonsrc/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj
NuGetSerilogsrc/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj
NuGetSystem.ComponentModel.Annotationssrc/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj
NuGetNuGet.Packagingsrc/Fallout.Tooling/Fallout.Tooling.csproj
NuGetSerilogsrc/Fallout.Tooling/Fallout.Tooling.csproj
NuGetSharpZipLibsrc/Fallout.Utilities.IO.Compression/Fallout.Utilities.IO.Compression.csproj
NuGetGlobsrc/Fallout.Utilities.IO.Globbing/Fallout.Utilities.IO.Globbing.csproj
NuGetSystem.Net.Httpsrc/Fallout.Utilities.Net/Fallout.Utilities.Net.csproj
NuGetSystem.Text.Jsonsrc/Fallout.Utilities.Net/Fallout.Utilities.Net.csproj
NuGetSystem.Text.Jsonsrc/Fallout.Utilities.Text.Json/Fallout.Utilities.Text.Json.csproj
NuGetYamlDotNetsrc/Fallout.Utilities.Text.Yaml/Fallout.Utilities.Text.Yaml.csproj
全部依赖 319

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

注册表软件包版本关系
NuGetAzure.Identity1.17.1直接
NuGetAzure.Security.KeyVault.Certificates4.8.0直接
NuGetAzure.Security.KeyVault.Keys4.8.0直接
NuGetAzure.Security.KeyVault.Secrets4.8.0直接
NuGetGlob1.1.9直接
NuGetHtmlAgilityPack1.11.71直接
NuGetHumanizer3.0.1直接
NuGetJetBrains.Annotations2026.2.0直接
NuGetMicrosoft.Build17.11.48直接
NuGetMicrosoft.Build17.14.28直接
NuGetMicrosoft.Build18.0.2直接
NuGetMicrosoft.Build.Framework直接
NuGetMicrosoft.Build.Framework17.11.48直接
NuGetMicrosoft.Build.Framework17.14.28直接
NuGetMicrosoft.Build.Framework18.0.2直接
NuGetMicrosoft.Build.Locator1.7.8直接
NuGetMicrosoft.Build.Tasks.Core17.11.48直接
NuGetMicrosoft.Build.Tasks.Core17.14.28直接
NuGetMicrosoft.Build.Tasks.Core18.0.2直接
NuGetMicrosoft.Build.Utilities.Core直接
NuGetMicrosoft.Build.Utilities.Core17.11.48直接
NuGetMicrosoft.Build.Utilities.Core17.14.28直接
NuGetMicrosoft.Build.Utilities.Core18.0.2直接
NuGetMicrosoft.CodeAnalysis.Analyzers3.11.0直接
NuGetMicrosoft.CodeAnalysis.CSharp4.12.0直接
NuGetMicrosoft.CodeAnalysis.CSharp4.7.0直接
NuGetMicrosoft.CodeAnalysis.CSharp.Workspaces4.12.0直接
NuGetMicrosoft.CodeAnalysis.Workspaces.Common4.12.0直接
NuGetMicrosoft.CodeAnalysis.Workspaces.MSBuild4.12.0直接
NuGetMicrosoft.Extensions.DependencyInjection10.0.0直接
NuGetMicrosoft.Extensions.DependencyModel10.0.0直接
NuGetNerdbank.GitVersioning3.7.115直接
NuGetNuGet.Packaging直接
NuGetNuGet.Packaging6.14.3直接
NuGetOctokit14.0.0直接
NuGetScriban7.2.0直接
NuGetSerilog4.3.0直接
NuGetSerilog.Formatting.Compact3.0.0直接
NuGetSerilog.Formatting.Compact.Reader4.0.0直接
NuGetSerilog.Sinks.Console6.1.1直接
NuGetSerilog.Sinks.File7.0.0直接
NuGetSharpZipLib1.4.2直接
NuGetSpectre.Console0.49.1直接
NuGetSpectre.Console.Cli0.49.1直接
NuGetSystem.ComponentModel.Annotations5.0.0直接
NuGetSystem.Net.Http4.3.4直接
NuGetSystem.Security.Cryptography.Xml10.0.10直接
NuGetSystem.Security.Cryptography.Xml10.0.6直接
NuGetSystem.Security.Cryptography.Xml8.0.4直接
NuGetSystem.Security.Cryptography.Xml9.0.18直接
NuGetSystem.Text.Json10.0.8直接
NuGetYamlDotNet16.3.0直接
Mavenorg.jetbrains.kotlin:kotlin-maven-plugin间接
Mavenorg.jetbrains.kotlin:kotlin-script-runtime间接
Mavenorg.jetbrains.kotlin:kotlin-stdlib-jdk8间接
Mavenorg.jetbrains.teamcity:configs-dsl-kotlin间接
Mavenorg.jetbrains.teamcity:configs-dsl-kotlin-plugins1.0-SNAPSHOT间接
Mavenorg.jetbrains.teamcity:teamcity-configs-maven-plugin间接
NuGetArgon0.33.0间接
NuGetAzure.Core1.50.0间接
NuGetBasic.Reference.Assemblies.NetStandard201.7.9间接
NuGetBenchmarkDotNet0.14.0间接
NuGetBenchmarkDotNet.Annotations0.14.0间接
NuGetCommandLineParser2.9.1间接
NuGetcoverlet.msbuild6.0.4间接
NuGetDiffEngine17.0.0间接
NuGetDiffPlex1.7.2间接
NuGetEmptyFiles8.17.0间接
NuGetFallout.Build11.0.8间接
NuGetFallout.Build.Shared11.0.8间接
NuGetFallout.Common11.0.8间接
NuGetFallout.Common_FALLOUT_VERSION_间接
NuGetFallout.Components11.0.8间接
NuGetFallout.ProjectModel11.0.8间接
NuGetFallout.SolutionModel11.0.8间接
NuGetFallout.Tooling11.0.8间接
NuGetFallout.Utilities11.0.8间接
NuGetFallout.Utilities.IO.Compression11.0.8间接
NuGetFallout.Utilities.IO.Globbing11.0.8间接
NuGetFallout.Utilities.Net11.0.8间接
NuGetFallout.Utilities.Text.Json11.0.8间接
NuGetFallout.Utilities.Text.Yaml11.0.8间接
NuGetFallout.VisualStudio.SolutionPersistence11.0.8间接
NuGetFluentAssertions8.10.0间接
NuGetGee.External.Capstone2.3.0间接
NuGetGitHubActionsTestLogger2.4.1间接
NuGetHumanizer.Core2.14.1间接
NuGetHumanizer.Core3.0.1间接
NuGetHumanizer.Core.af3.0.1间接
NuGetHumanizer.Core.ar3.0.1间接
NuGetHumanizer.Core.az3.0.1间接
NuGetHumanizer.Core.bg3.0.1间接
NuGetHumanizer.Core.bn3.0.1间接
NuGetHumanizer.Core.ca3.0.1间接
NuGetHumanizer.Core.cs3.0.1间接
NuGetHumanizer.Core.da3.0.1间接
NuGetHumanizer.Core.de3.0.1间接
NuGetHumanizer.Core.el3.0.1间接
NuGetHumanizer.Core.es3.0.1间接
NuGetHumanizer.Core.fa3.0.1间接
NuGetHumanizer.Core.fi3.0.1间接
NuGetHumanizer.Core.fil3.0.1间接
NuGetHumanizer.Core.fr3.0.1间接
NuGetHumanizer.Core.he3.0.1间接
NuGetHumanizer.Core.hr3.0.1间接
NuGetHumanizer.Core.hu3.0.1间接
NuGetHumanizer.Core.hy3.0.1间接
NuGetHumanizer.Core.id3.0.1间接
NuGetHumanizer.Core.is3.0.1间接
NuGetHumanizer.Core.it3.0.1间接
NuGetHumanizer.Core.ja3.0.1间接
NuGetHumanizer.Core.ko3.0.1间接
NuGetHumanizer.Core.ku3.0.1间接
NuGetHumanizer.Core.lb3.0.1间接
NuGetHumanizer.Core.lt3.0.1间接
NuGetHumanizer.Core.lv3.0.1间接
NuGetHumanizer.Core.ms3.0.1间接
NuGetHumanizer.Core.mt3.0.1间接
NuGetHumanizer.Core.nb3.0.1间接
NuGetHumanizer.Core.nl3.0.1间接
NuGetHumanizer.Core.pl3.0.1间接
NuGetHumanizer.Core.pt3.0.1间接
NuGetHumanizer.Core.pt-BR3.0.1间接
NuGetHumanizer.Core.ro3.0.1间接
NuGetHumanizer.Core.ru3.0.1间接
NuGetHumanizer.Core.sk3.0.1间接
NuGetHumanizer.Core.sl3.0.1间接
NuGetHumanizer.Core.sr3.0.1间接
NuGetHumanizer.Core.sr-Latn3.0.1间接
NuGetHumanizer.Core.sv3.0.1间接
NuGetHumanizer.Core.th3.0.1间接
NuGetHumanizer.Core.tr3.0.1间接
NuGetHumanizer.Core.uk3.0.1间接
NuGetHumanizer.Core.uz-Cyrl-UZ3.0.1间接
NuGetHumanizer.Core.uz-Latn-UZ3.0.1间接
NuGetHumanizer.Core.vi3.0.1间接
NuGetHumanizer.Core.zh-CN3.0.1间接
NuGetHumanizer.Core.zh-Hans3.0.1间接
NuGetHumanizer.Core.zh-Hant3.0.1间接
NuGetIced1.17.0间接
NuGetIsExternalInit1.0.3间接
NuGetMicrosoft.Bcl.AsyncInterfaces1.1.0间接
NuGetMicrosoft.Bcl.AsyncInterfaces10.0.8间接
NuGetMicrosoft.Bcl.AsyncInterfaces8.0.0间接
NuGetMicrosoft.Build.Tasks.Git8.0.0间接
NuGetMicrosoft.CodeAnalysis.Analyzer.Testing1.1.2间接
NuGetMicrosoft.CodeAnalysis.CodeFix.Testing1.1.2间接
NuGetMicrosoft.CodeAnalysis.Common4.12.0间接
NuGetMicrosoft.CodeAnalysis.Common4.7.0间接
NuGetMicrosoft.CodeAnalysis.CSharp.Analyzer.Testing1.1.2间接
NuGetMicrosoft.CodeAnalysis.CSharp.Analyzer.Testing.XUnit1.1.2间接
NuGetMicrosoft.CodeAnalysis.CSharp.CodeFix.Testing1.1.2间接
NuGetMicrosoft.CodeAnalysis.CSharp.CodeFix.Testing.XUnit1.1.2间接
NuGetMicrosoft.CodeAnalysis.Testing.Verifiers.XUnit1.1.2间接
NuGetMicrosoft.CodeCoverage18.0.1间接
NuGetMicrosoft.CSharp4.7.0间接
NuGetMicrosoft.Diagnostics.NETCore.Client0.2.251802间接
NuGetMicrosoft.Diagnostics.Runtime2.2.332302间接
NuGetMicrosoft.Diagnostics.Tracing.TraceEvent3.1.8间接
NuGetMicrosoft.DotNet.PlatformAbstractions3.1.6间接
NuGetMicrosoft.Extensions.Configuration2.1.1间接
NuGetMicrosoft.Extensions.Configuration.Abstractions2.1.1间接
NuGetMicrosoft.Extensions.Configuration.Binder2.1.1间接
NuGetMicrosoft.Extensions.DependencyInjection.Abstractions10.0.0间接
NuGetMicrosoft.Extensions.DependencyInjection.Abstractions2.1.1间接
NuGetMicrosoft.Extensions.DependencyInjection.Abstractions8.0.2间接
NuGetMicrosoft.Extensions.Logging2.1.1间接
NuGetMicrosoft.Extensions.Logging8.0.0间接
NuGetMicrosoft.Extensions.Logging.Abstractions2.1.1间接
NuGetMicrosoft.Extensions.Logging.Abstractions8.0.3间接
NuGetMicrosoft.Extensions.Options2.1.1间接
NuGetMicrosoft.Extensions.Options8.0.0间接
NuGetMicrosoft.Extensions.Primitives2.1.1间接
NuGetMicrosoft.Extensions.Primitives8.0.0间接
NuGetMicrosoft.Identity.Client4.78.0间接
NuGetMicrosoft.Identity.Client.Extensions.Msal4.78.0间接
NuGetMicrosoft.IdentityModel.Abstractions8.14.0间接
NuGetMicrosoft.NET.StringTools17.11.48间接
NuGetMicrosoft.NET.StringTools17.14.28间接
NuGetMicrosoft.NET.StringTools18.0.2间接
NuGetMicrosoft.NET.Test.Sdk18.0.1间接
NuGetMicrosoft.NETCore.Platforms1.1.0间接
NuGetMicrosoft.NETCore.Platforms1.1.1间接
NuGetMicrosoft.NETCore.Platforms5.0.0间接
NuGetMicrosoft.NETCore.Targets1.1.0间接
NuGetMicrosoft.SourceLink.Common8.0.0间接
NuGetMicrosoft.SourceLink.GitHub8.0.0间接
NuGetMicrosoft.TestPlatform.ObjectModel18.0.1间接
NuGetMicrosoft.TestPlatform.TestHost18.0.1间接
NuGetMicrosoft.VisualStudio.Composition16.1.8间接
NuGetMicrosoft.VisualStudio.Composition.NetFxAttributes16.1.8间接
NuGetMicrosoft.VisualStudio.Validation15.0.82间接
NuGetMono.Cecil0.11.3间接
NuGetNetArchTest.Rules1.3.2间接
NuGetNETStandard.Library2.0.3间接
NuGetNewtonsoft.Json13.0.3间接
NuGetNuGet.Common6.14.3间接
NuGetNuGet.Configuration6.14.3间接
NuGetNuGet.Frameworks6.14.3间接
NuGetNuGet.Protocol6.3.4间接
NuGetNuGet.Resolver6.3.4间接
NuGetNuGet.Versioning6.14.3间接
NuGetPerfolizer0.3.17间接
NuGetPolySharp1.15.0间接
NuGetReportGenerator5.2.0间接
NuGetruntime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl4.3.2间接
NuGetruntime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl4.3.2间接
NuGetruntime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl4.3.2间接
NuGetruntime.native.System4.3.0间接
NuGetruntime.native.System.Net.Http4.3.0间接
NuGetruntime.native.System.Security.Cryptography.Apple4.3.0间接
NuGetruntime.native.System.Security.Cryptography.OpenSsl4.3.2间接
NuGetruntime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl4.3.2间接
NuGetruntime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl4.3.2间接
NuGetruntime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple4.3.0间接
NuGetruntime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl4.3.2间接
NuGetruntime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl4.3.2间接
NuGetruntime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl4.3.2间接
NuGetruntime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl4.3.2间接
NuGetruntime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl4.3.2间接
NuGetSimpleInfoName3.1.2间接
NuGetSystem.Buffers4.6.1间接
NuGetSystem.ClientModel1.8.0间接
NuGetSystem.CodeDom5.0.0间接
NuGetSystem.CodeDom8.0.0间接
NuGetSystem.CodeDom9.0.0间接
NuGetSystem.Collections4.3.0间接
NuGetSystem.Collections.Concurrent4.3.0间接
NuGetSystem.Collections.Immutable7.0.0间接
NuGetSystem.Collections.Immutable8.0.0间接
NuGetSystem.Collections.Immutable9.0.10间接
NuGetSystem.ComponentModel.Composition4.5.0间接
NuGetSystem.Composition8.0.0间接
NuGetSystem.Composition.AttributedModel8.0.0间接
NuGetSystem.Composition.Convention8.0.0间接
NuGetSystem.Composition.Hosting8.0.0间接
NuGetSystem.Composition.Runtime8.0.0间接
NuGetSystem.Composition.TypedParts8.0.0间接
NuGetSystem.Configuration.ConfigurationManager8.0.0间接
NuGetSystem.Configuration.ConfigurationManager9.0.0间接
NuGetSystem.Diagnostics.Debug4.3.0间接
NuGetSystem.Diagnostics.DiagnosticSource4.3.0间接
NuGetSystem.Diagnostics.DiagnosticSource8.0.1间接
NuGetSystem.Diagnostics.EventLog8.0.0间接
NuGetSystem.Diagnostics.EventLog9.0.0间接
NuGetSystem.Diagnostics.Tracing4.3.0间接
NuGetSystem.Formats.Asn18.0.1间接
NuGetSystem.Formats.Nrbf9.0.0间接
NuGetSystem.Globalization4.3.0间接
NuGetSystem.Globalization.Calendars4.3.0间接
NuGetSystem.Globalization.Extensions4.3.0间接
NuGetSystem.IO4.3.0间接
NuGetSystem.IO.FileSystem4.3.0间接
NuGetSystem.IO.FileSystem.Primitives4.3.0间接
NuGetSystem.IO.Pipelines10.0.8间接
NuGetSystem.IO.Pipelines8.0.0间接
NuGetSystem.Linq4.3.0间接
NuGetSystem.Management5.0.0间接
NuGetSystem.Management8.0.0间接
NuGetSystem.Memory4.6.3间接
NuGetSystem.Memory.Data8.0.1间接
NuGetSystem.Net.Primitives4.3.0间接
NuGetSystem.Numerics.Vectors4.6.1间接
NuGetSystem.Reflection4.3.0间接
NuGetSystem.Reflection.Metadata7.0.0间接
NuGetSystem.Reflection.Metadata8.0.0间接
NuGetSystem.Reflection.MetadataLoadContext8.0.0间接
NuGetSystem.Reflection.MetadataLoadContext9.0.0间接
NuGetSystem.Reflection.Primitives4.3.0间接
NuGetSystem.Resources.Extensions8.0.0间接
NuGetSystem.Resources.Extensions9.0.0间接
NuGetSystem.Resources.ResourceManager4.3.0间接
NuGetSystem.Runtime4.3.0间接
NuGetSystem.Runtime.CompilerServices.Unsafe6.1.2间接
NuGetSystem.Runtime.Extensions4.3.0间接
NuGetSystem.Runtime.Handles4.3.0间接
NuGetSystem.Runtime.InteropServices4.3.0间接
NuGetSystem.Runtime.Numerics4.3.0间接
NuGetSystem.Security.Cryptography.Algorithms4.3.0间接
NuGetSystem.Security.Cryptography.Cng4.3.0间接
NuGetSystem.Security.Cryptography.Cng5.0.0间接
NuGetSystem.Security.Cryptography.Csp4.3.0间接
NuGetSystem.Security.Cryptography.Encoding4.3.0间接
NuGetSystem.Security.Cryptography.OpenSsl4.3.0间接
NuGetSystem.Security.Cryptography.Pkcs10.0.10间接
NuGetSystem.Security.Cryptography.Pkcs10.0.6间接
NuGetSystem.Security.Cryptography.Pkcs6.0.4间接
NuGetSystem.Security.Cryptography.Pkcs8.0.1间接
NuGetSystem.Security.Cryptography.Pkcs9.0.18间接
NuGetSystem.Security.Cryptography.Primitives4.3.0间接
NuGetSystem.Security.Cryptography.ProtectedData4.4.0间接
NuGetSystem.Security.Cryptography.ProtectedData8.0.0间接
NuGetSystem.Security.Cryptography.ProtectedData9.0.0间接
NuGetSystem.Security.Cryptography.ProtectedData9.0.6间接
NuGetSystem.Security.Cryptography.X509Certificates4.3.0间接
NuGetSystem.Security.Permissions4.5.0间接
NuGetSystem.Security.Permissions8.0.0间接
NuGetSystem.Text.Encoding4.3.0间接
NuGetSystem.Text.Encoding.CodePages7.0.0间接
NuGetSystem.Text.Encodings.Web10.0.8间接
NuGetSystem.Threading4.3.0间接
NuGetSystem.Threading.Channels7.0.0间接
NuGetSystem.Threading.Channels8.0.0间接
NuGetSystem.Threading.Tasks4.3.0间接
NuGetSystem.Threading.Tasks.Extensions4.6.3间接
NuGetSystem.Windows.Extensions8.0.0间接
NuGetVerify31.7.1间接
NuGetVerify.DiffPlex3.1.2间接
NuGetVerify.SourceGenerators2.5.0间接
NuGetVerify.Xunit31.7.1间接
NuGetxunit2.9.3间接
NuGetxunit.abstractions2.0.3间接
NuGetxunit.analyzers1.18.0间接
NuGetxunit.assert2.9.3间接
NuGetxunit.core2.9.3间接
NuGetxunit.extensibility.core2.9.3间接
NuGetxunit.extensibility.execution2.9.3间接
NuGetxunit.runner.console2.9.3间接
NuGetxunit.runner.visualstudio3.1.5间接
依赖安全公告 3

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

软件包版本关系严重程度公告数修复版本
Microsoft.Build.Tasks.Core17.11.48直接117.14.8
Scriban7.2.0直接37.2.2
System.Security.Cryptography.Xml10.0.6直接510.0.10

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 44494,
      "has_wiki": true,
      "homepage": "https://fallout.build/",
      "languages": {
        "C#": 12187624,
        "HTML": 1124648,
        "Shell": 3991,
        "PowerShell": 9736
      },
      "pushed_at": "2026-07-26T13:10:21Z",
      "created_at": "2026-05-18T01:28:39Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-26T11:48:01Z",
      "description": "☢️ Fallout — The C#/.NET Build System",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "C#",
      "significant_languages": [
        "C#"
      ]
    },
    "owner": {
      "blog": "https://fallout.build",
      "name": "Fallout.build",
      "type": "Organization",
      "login": "Fallout-build",
      "company": null,
      "location": null,
      "followers": 3,
      "avatar_url": "https://avatars.githubusercontent.com/u/288474845?v=4",
      "created_at": "2026-05-27T23:44:46Z",
      "is_verified": null,
      "public_repos": 8,
      "account_age_days": 59
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v10.4.0-rc.4",
          "kind": "prerelease",
          "published_at": "2026-07-26T12:43:22Z"
        },
        {
          "tag": "v10.4.0-rc.3",
          "kind": "prerelease",
          "published_at": "2026-07-21T01:20:39Z"
        },
        {
          "tag": "v10.4.0-rc.1",
          "kind": "prerelease",
          "published_at": "2026-07-21T00:27:44Z"
        },
        {
          "tag": "10.3.47",
          "kind": "patch",
          "published_at": "2026-05-27T09:07:17Z"
        },
        {
          "tag": "10.3.45",
          "kind": "patch",
          "published_at": "2026-05-27T05:53:02Z"
        },
        {
          "tag": "10.3.44",
          "kind": "patch",
          "published_at": "2026-05-27T05:41:30Z"
        },
        {
          "tag": "10.3.42",
          "kind": "patch",
          "published_at": "2026-05-27T01:35:25Z"
        },
        {
          "tag": "10.3.41",
          "kind": "patch",
          "published_at": "2026-05-27T00:51:29Z"
        },
        {
          "tag": "10.3.40",
          "kind": "patch",
          "published_at": "2026-05-27T00:38:01Z"
        },
        {
          "tag": "10.3.38",
          "kind": "patch",
          "published_at": "2026-05-26T23:16:49Z"
        },
        {
          "tag": "10.3.37",
          "kind": "patch",
          "published_at": "2026-05-26T21:03:32Z"
        },
        {
          "tag": "10.3.36",
          "kind": "patch",
          "published_at": "2026-05-26T21:03:05Z"
        },
        {
          "tag": "10.3.29",
          "kind": "patch",
          "published_at": "2026-05-25T08:43:28Z"
        },
        {
          "tag": "10.3.28",
          "kind": "patch",
          "published_at": "2026-05-25T08:12:17Z"
        },
        {
          "tag": "10.3.27",
          "kind": "patch",
          "published_at": "2026-05-25T05:02:34Z"
        },
        {
          "tag": "10.3.26",
          "kind": "patch",
          "published_at": "2026-05-25T04:16:00Z"
        },
        {
          "tag": "10.3.25",
          "kind": "patch",
          "published_at": "2026-05-25T02:06:54Z"
        },
        {
          "tag": "10.3.24",
          "kind": "patch",
          "published_at": "2026-05-25T00:47:23Z"
        },
        {
          "tag": "10.3.23",
          "kind": "patch",
          "published_at": "2026-05-24T23:12:27Z"
        },
        {
          "tag": "10.3.22",
          "kind": "patch",
          "published_at": "2026-05-24T10:45:17Z"
        },
        {
          "tag": "10.3.21",
          "kind": "patch",
          "published_at": "2026-05-24T10:20:21Z"
        },
        {
          "tag": "10.3.20",
          "kind": "patch",
          "published_at": "2026-05-24T09:47:21Z"
        },
        {
          "tag": "10.3.19",
          "kind": "patch",
          "published_at": "2026-05-24T08:37:35Z"
        },
        {
          "tag": "10.3.18",
          "kind": "patch",
          "published_at": "2026-05-24T08:11:38Z"
        },
        {
          "tag": "10.3.17",
          "kind": "patch",
          "published_at": "2026-05-24T07:48:24Z"
        },
        {
          "tag": "10.3.16",
          "kind": "patch",
          "published_at": "2026-05-24T07:28:41Z"
        },
        {
          "tag": "10.3.15",
          "kind": "patch",
          "published_at": "2026-05-24T06:46:40Z"
        },
        {
          "tag": "10.3.14",
          "kind": "patch",
          "published_at": "2026-05-24T03:20:56Z"
        },
        {
          "tag": "10.3.13",
          "kind": "patch",
          "published_at": "2026-05-24T02:01:22Z"
        },
        {
          "tag": "10.3.12",
          "kind": "patch",
          "published_at": "2026-05-24T00:18:38Z"
        },
        {
          "tag": "10.3.10",
          "kind": "patch",
          "published_at": "2026-05-22T12:22:18Z"
        },
        {
          "tag": "10.3.9",
          "kind": "patch",
          "published_at": "2026-05-22T12:19:41Z"
        },
        {
          "tag": "10.3.7",
          "kind": "patch",
          "published_at": "2026-05-22T09:04:12Z"
        },
        {
          "tag": "10.1.31",
          "kind": "patch",
          "published_at": "2026-05-22T08:55:59Z"
        },
        {
          "tag": "10.1.30",
          "kind": "patch",
          "published_at": "2026-05-22T08:49:11Z"
        },
        {
          "tag": "10.1.29",
          "kind": "patch",
          "published_at": "2026-05-22T07:58:35Z"
        },
        {
          "tag": "10.1.28",
          "kind": "patch",
          "published_at": "2026-05-22T07:43:19Z"
        },
        {
          "tag": "10.1.27",
          "kind": "patch",
          "published_at": "2026-05-22T04:36:31Z"
        },
        {
          "tag": "10.1.26",
          "kind": "patch",
          "published_at": "2026-05-22T04:04:09Z"
        },
        {
          "tag": "10.1.25",
          "kind": "patch",
          "published_at": "2026-05-21T23:22:02Z"
        },
        {
          "tag": "10.1.24",
          "kind": "patch",
          "published_at": "2026-05-21T11:28:39Z"
        },
        {
          "tag": "10.1.23",
          "kind": "patch",
          "published_at": "2026-05-21T11:22:27Z"
        },
        {
          "tag": "10.1.22",
          "kind": "patch",
          "published_at": "2026-05-21T09:57:51Z"
        },
        {
          "tag": "10.1.21",
          "kind": "patch",
          "published_at": "2026-05-21T09:03:01Z"
        },
        {
          "tag": "10.1.20",
          "kind": "patch",
          "published_at": "2026-05-21T08:23:19Z"
        },
        {
          "tag": "10.1.19",
          "kind": "patch",
          "published_at": "2026-05-21T05:58:46Z"
        },
        {
          "tag": "10.1.18",
          "kind": "patch",
          "published_at": "2026-05-21T02:23:09Z"
        },
        {
          "tag": "10.1.17",
          "kind": "patch",
          "published_at": "2026-05-21T01:28:54Z"
        },
        {
          "tag": "10.1.16",
          "kind": "patch",
          "published_at": "2026-05-21T01:08:42Z"
        },
        {
          "tag": "10.1.15",
          "kind": "patch",
          "published_at": "2026-05-21T00:38:07Z"
        },
        {
          "tag": "10.1.14",
          "kind": "patch",
          "published_at": "2026-05-21T00:01:23Z"
        },
        {
          "tag": "10.1.13",
          "kind": "patch",
          "published_at": "2026-05-20T23:34:00Z"
        },
        {
          "tag": "10.1.12",
          "kind": "patch",
          "published_at": "2026-05-20T22:52:02Z"
        },
        {
          "tag": "10.1.11",
          "kind": "patch",
          "published_at": "2026-05-20T21:59:35Z"
        },
        {
          "tag": "10.1.10",
          "kind": "patch",
          "published_at": "2026-05-20T21:45:25Z"
        },
        {
          "tag": "10.1.9",
          "kind": "patch",
          "published_at": "2026-05-20T21:38:23Z"
        },
        {
          "tag": "10.1.8",
          "kind": "patch",
          "published_at": "2026-05-20T01:55:58Z"
        },
        {
          "tag": "10.1.7",
          "kind": "patch",
          "published_at": "2026-05-19T23:43:19Z"
        },
        {
          "tag": "10.1.6",
          "kind": "patch",
          "published_at": "2026-05-19T05:33:00Z"
        },
        {
          "tag": "10.1.5",
          "kind": "patch",
          "published_at": "2026-05-19T05:15:06Z"
        },
        {
          "tag": "10.1.4",
          "kind": "patch",
          "published_at": "2026-05-19T04:35:27Z"
        },
        {
          "tag": "10.1.3",
          "kind": "patch",
          "published_at": "2026-05-19T03:59:40Z"
        },
        {
          "tag": "10.1.2",
          "kind": "patch",
          "published_at": "2026-05-18T08:28:04Z"
        },
        {
          "tag": "10.1.1",
          "kind": "patch",
          "published_at": "2026-05-18T08:06:03Z"
        },
        {
          "tag": "10.1.0",
          "kind": "minor",
          "published_at": "2026-05-18T07:49:03Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "0f5d2f0bbda75c74c88813b9e89309bd40762464",
          "body": "Bumps the github-actions-dependencies group with 2 updates: [actions/upload-artifact](https://github.com/actions/upload-artifact) and [actions/download-artifact](https://github.com/actions/download-artifact).\n\n\nUpdates `actions/upload-artifact` from 4 to 7\n- [Release notes](https://github.com/action\n[…]\ncy-version: '8'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n  dependency-group: github-actions-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the github-actions-dependencies group with 2 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-26T11:47:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4da31f446ea0834bcfa8a110793e6a744f794444",
          "body": "Terms like shim, sentinel, and canonical type show up often in PRs and\nissues but are never defined anywhere, making descriptions hard to\nfollow for non-native English readers. Add a short glossary and link\nto it from issue-and-pr-style.md's non-native-English guidance.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add a glossary of repo jargon to conventions.md",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-26T11:07:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "56733afaeee02083c8d435c9f66ac0e74f014c9b",
          "body": "The existing rule was one abstract line and easy to ignore in\npractice (see PR #528's description). Break it into checkable rules\n-- one idea per sentence, no idioms, define jargon on first use,\ngloss cross-references -- and add two anti-pattern examples pulled\nfrom a real PR description.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Make the non-native-English PR/issue guidance concrete",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-26T11:07:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b7e772f9911210263df5b7dd5dceb81b373dce52",
          "body": null,
          "is_bot": false,
          "headline": "Configure Dependabot for GitHub Actions updates",
          "author_name": "Yousif Salah",
          "author_login": "YousifSala7",
          "committed_at": "2026-07-26T10:39:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8849a55420a384bd5ccbf0120c19cff2509156a",
          "body": "Covers the new surface: the Current lifecycle, the identity guard that stops a\nsuperseded context both from clobbering a newer Current and from running the\nprocess-wide resets, the cancellation-handler facade's no-op outside a run, and\nthe per-run teardown across the in-memory sink, the tool-path re\n[…]\nate process-wide singletons and xUnit runs test classes\nin parallel, so they share a collection with the other specs over the same\nstatics — otherwise one class's reset lands inside another's arrange.",
          "is_bot": false,
          "headline": "Cover the BuildContext scope with specs",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-26T10:08:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "404b5f1056a32bbe8dc50ee94a7b17c3ea83cf19",
          "body": "Adds BuildContext — an internal, per-run, AsyncLocal-ambient scope activated at\nthe top of BuildManager.Execute and disposed at method exit, so the process-\nglobal statics a build touches are owned by a scope rather than leaking across\ninvocations. It takes over the Console.CancelKeyPress / ToolOpti\n[…]\nis\nstill Current, so a superseded scope disposing out of order cannot tear down\nstate belonging to a newer run.\n\nInternal-only — not a public contract until the SDK lands (milestone #7).\n\nFT-2 / #307.",
          "is_bot": false,
          "headline": "Introduce the per-run BuildContext foundation (FT-2)",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-26T10:08:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "336bcfc03634a754305be58aa08879e968cddffd",
          "body": "… names\n\nThe telemetry opt-out strip is line-based, so it handles bash `export`,\nPowerShell `$env:`, and cmd `set` alike — but only `export` was specced.\nTurn that spec into a theory over all three bootstrap-script spellings.\n\nAlso renames both touched spec files to the AV1600 behaviour-focused naming\nthe repo is migrating to (docs/agents/conventions.md).",
          "is_bot": false,
          "headline": "Cover all opt-out spellings and rename the migrate specs to behaviour…",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-26T09:27:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d879e11ae306ddb7070cb2367199229d00e53e01",
          "body": "Review feedback: the ADR was verbose and the conventions bullet was\nunnecessary — an AI agent isn't going to reintroduce telemetry by accident,\nand the stale \"opt-out is set in test runs\" bullet it replaced is now wrong\neither way. ADR-0010 stays the single record.\n\nThe ADR loses the \"Removed surface\" recap (duplicated the PR body), and its\ncontext/alternatives are condensed; every decision it carried is intact. Its\nheader also moves to the house `## Status` shape used by ADR-0007/0008.",
          "is_bot": false,
          "headline": "Trim ADR-0010 and drop the redundant no-telemetry convention bullet",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-26T09:27:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9cf97fad38825529d526cb9d562b203953791db",
          "body": "Records the decision that Fallout collects no telemetry — reversing the prior\n\"kept dormant, wire up a Fallout endpoint later\" stance — and its rationale,\nnon-breaking impact, and the alternatives (keep dormant / opt-in / local-only)\nthat were rejected. Adds a \"No telemetry\" convention, drops the no\n[…]\ntion guide to show the telemetry knobs are stripped, and rewords\nthe build-events example that used telemetry as its illustration.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Document the no-telemetry decision (ADR-0010)",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-26T09:27:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1dd17fabcfff5b37af51ff397b3284b702c1a06b",
          "body": "The migrate tool rewrote NUKE's telemetry knobs to Fallout-branded equivalents:\nNukeTelemetryVersion → FalloutTelemetryVersion and NUKE_TELEMETRY_OPTOUT →\nFALLOUT_TELEMETRY_OPTOUT. With telemetry removed (ADR-0010) those targets no\nlonger exist, so renaming would plant dead, telemetry-branded cruft \n[…]\nLLOUT)_TELEMETRY_OPTOUT assignment line (bash/pwsh/cmd spellings).\nSpecs updated to assert the knobs are gone rather than renamed.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Strip telemetry knobs on migration instead of renaming them",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-26T09:27:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3fb29a1de1f310541ecaa6c1d5441324426d746b",
          "body": "The telemetry feature carried over from NUKE has been inert since the fork:\nits Application Insights endpoint was the original maintainer's and can't be\nreused, the client dependency was dropped (#79), and TrackEvent was a stub.\nIt was kept dormant on the intent of wiring up a Fallout-owned backend \n[…]\never gated a no-op, and an\nunset/unknown one is silently ignored. The .NET SDK's own DOTNET_CLI_TELEMETRY_OPTOUT\nis left in place.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove the inherited NUKE telemetry subsystem",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-26T09:27:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "469531941fb045f3b456934fdededb1f405d637d",
          "body": "The generator hard-coded the four actions it emits, so a consumer who wanted a\nnewer major — or a SHA pin — had to subclass GitHubActionsAttribute and\nreimplement step emission. Two repos migrating off NUKE carried custom step\nclasses for exactly that (#533).\n\nEach emitting step now carries a normal\n[…]\nembers and\nwould have exposed an empty class.\n\nCloses #534\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Vn8JQZRwdoovPuctD21Wjx",
          "is_bot": false,
          "headline": "Make the generated action references configurable",
          "author_name": "Marko Lahma",
          "author_login": "lahma",
          "committed_at": "2026-07-26T07:40:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "94fa5fcba1722295e939234b24306c918411c432",
          "body": "The generator's cache pin sat at v4 while #533 moved checkout, setup-dotnet,\nand upload-artifact to their current majors — cache was never in that PR's\nscope. v6.1.0 is current; v4 is two majors behind.\n\n- v5.0.0 moved to the node24 runtime and requires a self-hosted runner\n  >= 2.327.1\n- v6.0.0 upd\n[…]\n4 Verify snapshots with a cache step, and the docs sample.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Vn8JQZRwdoovPuctD21Wjx",
          "is_bot": false,
          "headline": "Bump the generated cache step to actions/cache@v6",
          "author_name": "Marko Lahma",
          "author_login": "lahma",
          "committed_at": "2026-07-26T07:40:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fcd2be0b45b0435a6baa94f0e639680aa365b288",
          "body": null,
          "is_bot": false,
          "headline": "Configure Dependabot for weekly dependency updates (#6)",
          "author_name": "Yousif Salah",
          "author_login": "YousifSala7",
          "committed_at": "2026-07-24T00:43:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "394a6a23347090b2cf93004210cb507ef6cdd607",
          "body": null,
          "is_bot": false,
          "headline": "Use Microsoft.Windows.SDK.BuildTools package to get signtool binary",
          "author_name": "Lukas Gasselsberger",
          "author_login": "IT-VBFK",
          "committed_at": "2026-07-23T12:34:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd6471b6c6d21c9420311204b7d0b813a931e726",
          "body": "10.0.6, 9.0.15 and 8.0.3 are all inside the affected ranges of five high-severity\nadvisories (GHSA-23rf-6693-g89p, GHSA-8q5v-6pqq-x66h, GHSA-cvvh-rhrc-wg4q,\nGHSA-g8r8-53c2-pm3f, GHSA-mmjf-rqrv-855v) — uncontrolled resource consumption in\nXML decryption. Move each line to its first patched release: 1\n[…]\non list and build/_build.csproj are bumped; the build\nproject turns off central package management, so its inline pin is separate.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Bump System.Security.Cryptography.Xml to the advisory-patched versions",
          "author_name": "Marko Lahma",
          "author_login": "lahma",
          "committed_at": "2026-07-23T11:51:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8bb241fe6b54c43db1a6769944552b70fa9068b5",
          "body": "Extends the setup-dotnet bump to the other two actions the generator pins, and\ncarries setup-dotnet to v6 — v5 was already superseded while this PR sat open.\n\n  setup-dotnet     v4 -> v6   (v6.0.0, 2026-07-16)\n  checkout         v6 -> v7   (v7.0.0, 2026-06-18)\n  upload-artifact  v5 -> v7   (v7.0.0, \n[…]\nthat today —\nit carries custom step classes purely to reach checkout@v7 and\nupload-artifact@v7, which the generator can just emit.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Track the current majors for checkout and upload-artifact too",
          "author_name": "Marko Lahma",
          "author_login": "lahma",
          "committed_at": "2026-07-23T11:50:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0f008cb0d104f9b193d04b763fb00cfeb5bb847d",
          "body": "actions/setup-dotnet@v4 runs on the node20 runtime, which GitHub has scheduled\nfor removal; v5 moves to node24 and is otherwise input-compatible, so the\ngenerated global-json-file step is unchanged apart from the tag.\n\nEvery consumer inherits the pin from the generator, so a stale tag can only be\nwo\n[…]\nemitted YAML, the\nCI-docs sample, and this repo's own workflows (the generated ones would change\non the next regeneration anyway).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Bump the generated setup-dotnet step to v5",
          "author_name": "Marko Lahma",
          "author_login": "lahma",
          "committed_at": "2026-07-23T11:50:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3595f0ff892aebf0ad0fd91d48170bf294711f7b",
          "body": null,
          "is_bot": false,
          "headline": "Fix `Stryker` tool XML summaries",
          "author_name": "Lukas Gasselsberger | alu-one",
          "author_login": "ITaluone",
          "committed_at": "2026-07-23T08:45:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf3b517f103d7ea035a43a7ae6c6bc83d7ba075f",
          "body": "The release pipeline was built around CalVer release/YYYY + legacy\nsupport/* lines, so a legacy-style minor release line (release/v10.4)\ncut from main is rejected at two gates:\n\n- validate-ref in publish-packages-release.yml only matched\n  release/[0-9]{4} and support/*, so a v* tag on release/v10.4\n[…]\nng a clean -rc.N.\n\nTeach both the release/v\\d+\\.\\d+ shape so tag pushes on a release/v10.x\nline validate and publish on their own.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Recognize release/vMAJOR.MINOR branches in the release pipeline",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-21T01:18:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a7375825868617cb21323638b23397eea8201ecf",
          "body": "A tag-triggered release build checks out a detached HEAD, where\nGitRepository.Branch is null. Two specs assumed the ambient checkout\nwas on a named branch and broke the release pack:\n\n- GitRepositoryWorktreeSpecs derived the worktree base ref from\n  .Branch (null → empty), producing 'git worktree ad\n[…]\nss on a branch (unchanged) and no longer fail on a detached\nHEAD. Surfaced by the first real tag-triggered release (v10.4.0-rc.1).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Make git-repository specs robust to a detached HEAD",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-21T01:17:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "70f30dd53d1eaf7de0aa035bb893c7844685db65",
          "body": "Add agent rule against pinging the former NUKE maintainer; move security contact to security@fallout.build\n\n- AGENTS.md critical rule #9 + conventions.md \"what not to do\": never @-mention,\n  assign, request review from, or co-author-trailer the former NUKE maintainer.\n- Strip the leading @ from his README attribution (plain profile link kept).\n- Point SECURITY.md at security@fallout.build instead of a personal address.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n@",
          "is_bot": false,
          "headline": "@",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-20T22:56:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "161ca5f8bf2c24c6ae99d78c25db58824ded96c7",
          "body": "…equests\n\nReorder the private methods to match the order they're invoked from\nExecuteAsync (assembly, then major, then NuGet), and add a User-Agent\nheader to the NuGet flat-container HttpClient so requests aren't sent\nas anonymous script traffic.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Reorder ResolveFalloutVersionStep by invocation order and tag NuGet r…",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-20T18:59:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "965f44bda8f7c771b3e010fb6139a3efa3db53f4",
          "body": "Extract the modern-moniker regex and IsOlderThanMinimumSupported logic\nduplicated between BumpDotNetVersionStep and VerifyBuildTargetFrameworkStep\ninto a shared TargetFrameworkMonikers helper. VerifyBuildTargetFrameworkStep\nnow reads BumpDotNetVersionStep.MinimumSupportedMajor instead of\nmaintaining its own separate constant.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Deduplicate the TFM-minimum check shared by two migration steps",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-20T18:59:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3578f3713e04b924fa2178a05693ab93bc50a5b3",
          "body": "Replace the blocking GetAsync(...).GetAwaiter().GetResult() in\nResolveFalloutVersionStep with a proper await. IMigrationStep.Execute\nis now Task ExecuteAsync; Migration.Run is Migration.RunAsync;\nMigrateCommand is now an AsyncCommand<MigrateSettings>; Program.Main\nawaits CommandApp.RunAsync. Confirm\n[…]\nmationPrompt.ShowAsync instead of the blocking AnsiConsole.Confirm.\nSteps with no async work simply return Task.CompletedTask.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Make IMigrationStep and the migration pipeline asynchronous",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-20T18:59:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "22dedd44fd8080f77645e6bbb65d96f5bddec422",
          "body": "Add BumpDotNetVersionStep: rewrites _build.csproj's TargetFramework and\nglobal.json's sdk.version to net10.0 / 10.0.100 during migration, matching\nthe versions Fallout's own tooling targets — but only when what's there is\nbehind those minimums, so an already up-to-date or newer build project is\nleft\n[…]\najor is parsed from\nTargetFramework itself rather than duplicated as a separate constant, so\nthere's a single source of truth.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Bump build project to net10.0 and global.json SDK to 10.0.100",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-20T18:59:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aef6c073f61451ebc8ee6aa4622ae3aefb78c9a0",
          "body": "CsprojRewriter.Rewrite had a single caller (RewriteCsprojsStep). Move its\nregex fields and Rewrite method directly into the step and delete the\nnow-empty class. Rename the spec file/class to match.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fold CsprojRewriter into RewriteCsprojsStep",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-20T18:59:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f667a655e0dcc6ef13bde1562a6597876ac59b4a",
          "body": "ConfirmMigrationStep runs immediately before RewriteCsprojsStep, the\nfirst step that mutates files, and prompts via AnsiConsole.Confirm\nbefore letting the migration proceed. Declining sets the new\nSummary.Cancelled flag, which Migration.Run checks to stop executing\nfurther steps, and MigrateCommand \n[…]\ning would be written) and\nwhen stdin is redirected (CI, piped input, automated tests) since\nthere's nothing to prompt against.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Ask for confirmation before the migration writes any files",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-20T18:59:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2c7e902c34cea6fc7770b36a6591d79540384adc",
          "body": "Fallout's tooling is built and tested against .NET 10; a build project\nstill on an older TFM can hit tool incompatibilities that this\nmigration's other, purely textual rewrites won't catch.\n\nVerifyBuildTargetFrameworkStep reads _build.csproj's TargetFramework(s)\nand adds a warning for any moniker that isn't a modern net10.0+ (catching\nnet8.0, net48, netstandard2.0, netcoreapp3.1, etc.).\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Warn when the build project targets an older TFM than .NET 10",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-20T18:59:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "eec1fea6acfc81bb09130d30149a1faff3c925b9",
          "body": "…ajor\n\nResolveFalloutVersionStep now queries NuGet's flat-container index for the\nlatest non-prerelease Fallout.Common release matching the running tool's\nown major (calendar year), instead of only reading the tool's own\nAssemblyInformationalVersion. This keeps a migration pinned to what's\nactually \n[…]\nching-major stable release yet, and logs via AnsiConsole which path\nwas taken so the resolved version is never a silent guess.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Resolve Fallout.Common version from NuGet, scoped to the tool's own m…",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-20T18:59:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ba41665bcf751ab822bb262430c4c48965d018d8",
          "body": "Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Bump Fallout.Migrate to the 10.x version line",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-20T18:59:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cf270157282207805901f8278761dd22072a0246",
          "body": "Fixing nasty build errors due to the .editorconfig rule\n`UnusedParameter.Local`'s severity `error`\n\nThis only applies to the private `Execute` methods; the\n`IFalloutCommand` contract is not touched.\n\nWhen needed, we can re-add them..\n\n<!-- Keep it terse: one-line summary, then short \"what changed\" b\n[…]\nilot draft one, then trim it. -->\n\n<!-- This repo merges via rebase only (linear history). Curate your\ncommits into a -->\n<!-- clean sequence before final approval — see CONTRIBUTING.md →\nMerging. -->",
          "is_bot": false,
          "headline": "Remove unused `buildScript` and `args` parameters from commands (#515)",
          "author_name": "ITaluone",
          "author_login": "ITaluone",
          "committed_at": "2026-07-20T18:20:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f2fa83246da5e0b88a4568ae3ba691433df03aaf",
          "body": "<!-- Keep it terse: one-line summary, then short \"what changed\" bullets.\n-->\n<!-- Link the issue and summarize it — don't recite it. See\ndocs/agents/issue-and-pr-style.md. -->\n<!-- Or let Copilot draft one, then trim it. -->\n\nSince docs build config only includes `/docs` `../AGENTS.md` is not\nresolv\n[…]\n\nUsing the absolute URLs instead.\n\n<!-- This repo merges via rebase only (linear history). Curate your\ncommits into a -->\n<!-- clean sequence before final approval — see CONTRIBUTING.md →\nMerging. -->",
          "is_bot": false,
          "headline": "Fix broken links in compiled docs assets (#521)",
          "author_name": "ITaluone",
          "author_login": "ITaluone",
          "committed_at": "2026-07-20T18:15:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "32e0cca1cf5ad5299bb41a63d3efcb67350009f9",
          "body": null,
          "is_bot": false,
          "headline": "Rename legacy prefixed private fields to camelCase (#481)",
          "author_name": "Yousif Salah",
          "author_login": "YousifSala7",
          "committed_at": "2026-07-20T11:44:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49590233f58a31acd6a5678b664012b05f800943",
          "body": null,
          "is_bot": false,
          "headline": "Add tool wrapper definition for `Stryker` (#503)",
          "author_name": "IT-VBFK",
          "author_login": "IT-VBFK",
          "committed_at": "2026-07-20T05:24:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c87ede641a05849d2d0211fff5fdc38289571ac8",
          "body": null,
          "is_bot": false,
          "headline": "Add SetBinaryLog support to DotNetPackSettings",
          "author_name": "Lukas Gasselsberger",
          "author_login": "IT-VBFK",
          "committed_at": "2026-07-20T05:23:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b63ab1e1e0eb7aea1da4039b49aefa0dbb23899",
          "body": null,
          "is_bot": false,
          "headline": "Add missing options",
          "author_name": "Lukas Gasselsberger | alu-one",
          "author_login": "ITaluone",
          "committed_at": "2026-07-19T18:11:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b97d48c3851453ede95f2825513c80ffec1f88f5",
          "body": null,
          "is_bot": false,
          "headline": "Add tool definition for `cmake`",
          "author_name": "Lukas Gasselsberger",
          "author_login": "IT-VBFK",
          "committed_at": "2026-07-19T18:11:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f833149812fc777bdbb5ba1b77854585f91d0b7a",
          "body": null,
          "is_bot": false,
          "headline": "Add missing ArtifactsPath property to `dotnet restore`",
          "author_name": "Lukas Gasselsberger",
          "author_login": "IT-VBFK",
          "committed_at": "2026-07-19T18:10:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "caeeacba9384857915da1fc329e420ef9b2823e6",
          "body": "Fixes a crash in `GitRepository.GetRemoteNameAndBranch` when the git\nbranch config section contains a duplicate key.\n\n## Problem\nVS Code's Git extension appends a `vscode-merge-base` entry to `[branch\n\"...\"]` instead of updating it in place, sometimes leaving it\nduplicated. Parsing that section buil\n[…]\nee limitation fails, confirmed to fail\nidentically on `main`).\n\n---------\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>\nCo-authored-by: Chrison Simtian <csimon@chrison.dev>",
          "is_bot": false,
          "headline": "Fix crash when git branch config has a duplicate key (#511)",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-19T15:45:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "04de9b859a99e59d95c021918f3cb7ea263c4313",
          "body": "Replace the plain Console.WriteLine calls in MigrateCommand's banner\nand summary printing with Spectre.Console's AnsiConsole: bold banner,\nyellow dry-run notice and warnings, green completion messages, dimmed\nguide link. Interpolated values (paths, warning text) go through\nMarkupLineInterpolated so \n[…]\ntouched --\nthat log stays plain text so MigrationIntegrationSpecs can keep\ncapturing it via TextWriter.Null without a console.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Style fallout-migrate's banner and summary output with AnsiConsole",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-19T15:28:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a41f6dd8fd60b6343c0c9c81e5140a1d19e97add",
          "body": "… specs\n\nAdd VerifyGeneratedTools to CI so that editing a tool wrapper's .json spec\nwithout regenerating and committing its .Generated.cs output fails the\nbuild. Make the generated header's source URL independent of the local\ngit remote so the check doesn't fail depending on who runs it, and\nregener\n[…]\nventions.md, and CONTRIBUTING.md to\nreflect that generated tool wrapper output must now be committed\nalongside its .json spec.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fail CI when generated tool wrappers are out of sync with their .json…",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-19T15:14:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cb205038c464331d7e1e057294051009a5b2414b",
          "body": "Migration.Run() hard-coded four migration actions as private methods\nsharing private helpers, making it awkward to add the steps planned\nnext. Split into:\n\n- Common/ -- MigrationContext (plain data), Summary, RewriteResult,\n  IMigrationStep, and MigrationFileOperations (shared EnumerateFiles /\n  App\n[…]\nding a future step is one new class plus\none line in that list.\n\nNo behavior change; MigrationIntegrationSpecs pass unchanged.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Decompose Fallout.Migrate into an IMigrationStep pipeline",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-19T15:08:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ce2c8bae9a7859286125091d59cfa6d1641dd4ad",
          "body": "When working from a personal fork (origin) alongside the core repo\n(upstream), branch from a stale origin/main instead of upstream/main and\nopen the PR against the wrong repo — both happened in practice and produced\na large, spurious merge conflict.\n\nAdd a step 0 to the PR-creation flow in release-a\n[…]\nTS.md\nrule #1 points to at PR-creation time and the flag was dropped once already.\n\nPoint AGENTS.md rule #1 at both additions.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Document fork/upstream branching workflow and reinforce draft-PR default",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-19T12:17:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c99b2384e04ccaad7fe90a02dea920616bbeb393",
          "body": "The net8.0 bug slipped through because the build-project update path had no\nspec. Add one: parse a project pinned to an old TargetFramework, run the\nretarget, assert it lands on net10.0. Guards the literal from drifting again.\n\nUpdateTargetFramework is now internal (Fallout.Cli.Specs already has IVT) and\nCli.Specs gets the ProjectModel MSBuild-resolver ModuleInit so a test can hold\na Microsoft.Build.Evaluation.Project local.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Cover the update command's target-framework retarget",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-18T12:11:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "777e17bf71cf89d9406c7fa6085e111ebc9090a2",
          "body": "The :update command's build-project step reset TargetFramework to net8.0,\nwhich can't restore Fallout.Common or resolve its namespaces — the framework\ntargets net10.0. SetupCommand already scaffolds new projects at net10.0\n(TARGET_FRAMEWORK), so update now matches.\n\nCentralizing the target-framework literal (SetupCommand + UpdateCommand share\n\"net10.0\") is deferred to a dedicated cleanup PR.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix update command writing net8.0 as the build project target framework",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-18T12:11:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f0f123c92a46f523c2347ca2f6d9c0e5c04a6e19",
          "body": "The build-project update logic lived in a separate static ProjectUpdater\nhelper, splitting the update command's behaviour across two files for no\nreason. Move it into UpdateCommand as private methods so the command owns\nits own logic, and delete ProjectUpdater.\n\nAlso drops the stale \"Nuke\" name (UpdateNukeCommonPackage ->\nUpdateFalloutCommonPackage). No behaviour change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fold ProjectUpdater into UpdateCommand",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-18T12:11:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c5a5a4e2f3e029048be48697f4d1c2ff9c7b9b03",
          "body": "The migrated commands are all `internal sealed`, but three types were\nstill `public` with no consumer outside the assembly and no PublicAPI\ntracking: RunCommand (the lone public command), ProjectUpdater, and\nProgram (the tool entry point). None are part of a public surface —\nthere is no public comma\n[…]\nallout.Cli.Specs\nalready has InternalsVisibleTo, so the specs are unaffected; DI registration\nworks unchanged with internal types.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Internalize Fallout.Cli types that aren't external contracts",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-18T12:11:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "68a5b0500183e590dd805b27abfc649fd08211a2",
          "body": "The last sync-over-async in the command layer sat in ProjectUpdater,\nreached from UpdateCommand via the synchronous ConfirmExecution(Action)\nprompt boundary. ConfirmExecution is a hand-rolled helper (not a Spectre\nprimitive), so add a Func<Task> overload alongside the Action one and\nflow async throu\n[…]\n, config file, global.json)\nstay on the sync ConfirmExecution overload. No .GetAwaiter().GetResult()\nremains in the command layer.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Thread async through the update command's build-project step",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-18T12:11:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aa64bae91ad9f7c277b7d4096b5b7a4bee792489",
          "body": "The new command specs used Method_State_Result names; the repo\nconvention (docs/agents/conventions.md, AV1600) is short present-tense\ndescriptions of observable behavior. Rename all command spec methods to\nmatch.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Rename Cli command specs to AV1600 behavior-focused style",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-18T12:11:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9bc2401f0d966401647fbad3e90c80dc8c5da84e",
          "body": "AddPackage, CakeConvert and Setup did real async work (NuGet version\nresolution, nested command invocation) but blocked on it via\n.GetAwaiter().GetResult() inside a synchronous Execute wrapped in\nTask.FromResult. Fold the private Execute into an async ExecuteAsync\nand await the work directly, removing the sync-over-async anti-pattern.\n\nPurely-sync commands keep Task.FromResult(Execute(...)) — they have no\nasync work to await.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Make async commands genuinely async instead of blocking",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-18T12:11:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "be009a8b169c4b95965a089dd87c5540da693143",
          "body": "Add async specs for the converted commands (Fallout.Cli.Specs/Commands, *Specs naming) plus a\nFakeConsolePrompts double and ConfigurationReader specs, and repoint the existing CakeConversion /\nUpdateSolutionFileContent specs at their new service homes (CakeConverter, PackageManager,\nBuildScaffolder).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Re-home Cli command specs to Fallout.Cli.Specs (#392)",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-18T12:11:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "15da3354f248610cd911500171996021e04fd85a",
          "body": "…m (#392)\n\nConvert complete, get-configuration, add-package, update, secrets, cake-convert, cake-clean,\nsetup, and the navigation cluster into real IFalloutCommand types (async ExecuteAsync, DI-injected\nservices), register them directly, and delete the DelegateCommand shims + every Program.X.cs\npart\n[…]\ndation. Derived from main's current handlers, so\nthe .slnx setup support, net10.0 target, and nuke->fallout rebrand are preserved.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Convert remaining Cli commands to IFalloutCommand and collapse Progra…",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-18T12:11:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "953a99bed2011278c44a4d8a48f91417da75ae85",
          "body": "Extract the shared logic the converted commands depend on into injectable services:\nConfigurationReader (build-script config parsing), PackageManager (package add/replace),\nBuildScaffolder (build scripts/solution wiring, incl. the .slnx writer), CakeConverter\n(Cake script conversion), and CliConventions/ToolBanner (banner + script-name helpers).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Fallout.Cli command-scaffolding services (#392)",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-18T12:11:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3325dc4cc1991db47202591ba9078d0b7f6de3ae",
          "body": "Extract Program.Trigger into a real IFalloutCommand (async ExecuteAsync per the merged\nfoundation contract), register the type directly, and drop the DelegateCommand shim + the\nProgram.Trigger.cs partial. Test re-homed to Fallout.Cli.Specs.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Convert :trigger to TriggerCommand (#392)",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-18T12:11:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f29288f5622f6e10ff29a3e988de013da3e10027",
          "body": null,
          "is_bot": false,
          "headline": "Fix small typo in parameters docs sample",
          "author_name": "Lukas Gasselsberger",
          "author_login": "IT-VBFK",
          "committed_at": "2026-07-18T07:17:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67b792f179a0831c8ed027765950e6aae3d68c17",
          "body": "build-docs read as if it builds documentation; it doesn't — it's the no-op that\nreports the required `ubuntu-latest` check on docs-only PRs so branch protection\nisn't blocked. build-skip names what it does. Updated the echo message and the\nREADME/CONTRIBUTING/architecture/conventions/release-and-versioning references.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Rename docs-PR shim workflow build-docs.yml → build-skip.yml",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-17T10:29:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7a08956e8c8418aff5fd65ee2e83823261510a31",
          "body": "The build-status badges have been broken for a while: they pointed at the old\nper-OS workflow files and used `?branch=main` on `pull_request`-only workflows,\nwhich renders \"no status\" (badges track push/branch runs, not PR runs).\n\n- Headline CI badge now tracks publish-packages-preview (runs on ever\n[…]\nys Fallout-build/Fallout (consistent with the other badges); these\nresolve once this change is on upstream and a run has happened.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix README build-status badges",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-17T10:29:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "661e79d534a4b11c6c91719458f8ca6c93f69643",
          "body": "Collapse the three per-OS build workflows and rename the hand-written ones\nfor clarity. Behaviour is unchanged — same triggers, same required check.\n\n- build.yml (generated): Linux PR gate for PRs to main/release/support. Its\n  job is still named `ubuntu-latest`, so the required status check and bra\n[…]\nntions, and release-and-versioning docs (also fixing\nsome already-stale trigger descriptions). ADRs left as point-in-time records.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Consolidate and rename CI workflows",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-17T10:29:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "818162de408997688229e42a54045269acd0b9d3",
          "body": "Small one😀",
          "is_bot": false,
          "headline": "Fix typo in tool installation command (#494)",
          "author_name": "Georg Dangl",
          "author_login": "GeorgDangl",
          "committed_at": "2026-07-16T19:42:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5038929b1730c4335f8ba7e32776173bb5c94e1",
          "body": null,
          "is_bot": false,
          "headline": "Extract shared Verify helper for configuration specs",
          "author_name": "Yousif Salah",
          "author_login": "YousifSala7",
          "committed_at": "2026-07-15T13:44:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7acb39fdff70fbe769e29a730bf4461b93bfeef2",
          "body": null,
          "is_bot": false,
          "headline": "Rename test names to generic examples per review",
          "author_name": "Yousif Salah",
          "author_login": "YousifSala7",
          "committed_at": "2026-07-15T13:44:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9ce4203bcb1d05c52ad652f53c385509e5a05bd",
          "body": null,
          "is_bot": false,
          "headline": "Escape single quotes correctly in YAML CI writers",
          "author_name": "Yousif Salah",
          "author_login": "YousifSala7",
          "committed_at": "2026-07-15T13:44:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91695e2b734047653972d18676b9a151d7ba3187",
          "body": null,
          "is_bot": false,
          "headline": "Refactor the `ConsoleUtility` class so the console can be overridden",
          "author_name": "Lukas Gasselsberger | alu-one",
          "author_login": "ITaluone",
          "committed_at": "2026-07-15T12:45:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f80b3103f3e195cb49399b491c1883f718ea486d",
          "body": null,
          "is_bot": false,
          "headline": "Rewrite fallout-migrate argument parsing and path handling",
          "author_name": "Dennis Doomen",
          "author_login": "dennisdoomen",
          "committed_at": "2026-07-15T05:31:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2771894caf182f66033365a6ce54b7f62b69d91",
          "body": null,
          "is_bot": false,
          "headline": "Using serializer option `Indent`, instead of manually adding indentation",
          "author_name": "Lukas Gasselsberger | alu-one",
          "author_login": "ITaluone",
          "committed_at": "2026-07-14T05:46:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a15b2f385e5616603c7d7898ba9210e40a0ca350",
          "body": "# Conflicts:\n#\ttests/Fallout.Common.Specs/XmlTasksSpecs.cs",
          "is_bot": false,
          "headline": "Add `XmlTasks` with `XmlAdd` functionality",
          "author_name": "Lukas Gasselsberger | alu-one",
          "author_login": "ITaluone",
          "committed_at": "2026-07-14T05:46:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f072c9ded6c41bbbd3a4694122d7aef5500f7296",
          "body": "Switch GitHubActionsCustomStepSpecs from hand-authored expected strings + a\nline-ending-normalizing helper to Verify, matching the generator testing\nstrategy used elsewhere. Verify normalizes line endings on compare, and the new\n'*.verified.* text eol=lf' gitattribute keeps the snapshots LF in the repo, so\nthe exact-output assertions are platform-independent without bespoke scaffolding.",
          "is_bot": false,
          "headline": "Snapshot custom-step rendering with Verify instead of manual literals",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-13T11:00:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "475d19ed1c90f782871524f7c433283505c219be",
          "body": "Move the YAML-correct single-quote (doubling embedded quotes) out of the custom\nstep and into StringExtensions.SingleQuoteYaml, next to SingleQuote/DoubleQuote,\nwith its own unit test. This is the primitive the built-in CI writers should\nadopt to replace SingleQuote() in YAML contexts (a separate follow-up).",
          "is_bot": false,
          "headline": "Promote YAML single-quoting to a shared StringExtensions helper",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-13T11:00:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4dff363f28983a9930f19672a9e63f0393882ae",
          "body": "The shared SingleQuote() helper escapes an embedded quote with a backslash,\nwhich is invalid inside a YAML single-quoted scalar, so a name like \"Bob's\nstep\" emitted 'Bob\\'s step'. Quote the name locally with YAML doubling ('')\ninstead; output is identical for names without a quote. Left the shared h\n[…]\n shell/log output across 26 call sites where the\ndoubling form would be wrong.\n\nAlso guard the multi-insert ordering test so a dropped first insert fails\ninstead of passing vacuously on IndexOf == -1.",
          "is_bot": false,
          "headline": "Escape custom-step names as valid YAML and guard a vacuous test",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-13T11:00:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cc43ca425ae244fe32ace672291affe6ce1a8302",
          "body": "- Quote custom-step names via SingleQuote(), matching the built-in steps, so a\n  name containing a colon stays valid YAML (the structural validation didn't\n  cover value safety).\n- Render with:/env: in ordinal key order for deterministic output; Dictionary\n  enumeration order isn't guaranteed.\n- Gua\n[…]\nwith the clean ArgumentException the\n  design promises rather than a NullReferenceException.\n- Add specs: colon-in-name quoting, multi-entry ordinal ordering, null-step\n  insert, and null collections.",
          "is_bot": false,
          "headline": "Harden custom-step rendering and injection against review feedback",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-13T11:00:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6fe48adce7b34837352dc92e711543131646102b",
          "body": null,
          "is_bot": false,
          "headline": "Trim the GitHubActionsCustomStepSpecs class comment",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-13T11:00:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "068ce4db34eae0b41b25df29002f23445d219b62",
          "body": null,
          "is_bot": false,
          "headline": "Trim the ShouldRenderAs comment to the why",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-13T11:00:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f4efdd0a6c4300f1bbb8df0418474b4f1690c88",
          "body": "Use raw string literals for the multi-line expected YAML (more readable than\nline concatenation) and normalize line endings on both sides. The renderer\nemits Environment.NewLine, so normalizing keeps these exact-output assertions\npassing on the cross-platform post-merge jobs, not just the ubuntu PR gate.",
          "is_bot": false,
          "headline": "Assert custom-step rendering with raw string literals",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-13T11:00:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1396a83a5a8ee59e726a727e543fad3fae2e734c",
          "body": "Read the Write flow top-down; the Scalar/MapBlock local functions that close\nover the list-marker flag now sit at the end. Behaviour is unchanged.",
          "is_bot": false,
          "headline": "Move custom-step render helpers below the emit sequence",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-13T11:00:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d3cb9b07e2d2bd3a49f1eb0121f96f354096d8b",
          "body": "Refactor GitHubActionsAttribute.GetSteps to assemble the base step sequence,\nhand it to a per-job GitHubActionsStepPipeline as read-only BuiltInSteps, query\nBuild for IConfigureGitHubActions, validate the collected inserts, then splice\nthem in at their anchor positions (call order preserved). Valida\n[…]\nls the\nbuild on an invalid step: exactly one of Uses/Run, With requires Uses, Shell\nonly on a run step. A build not implementing the interface, or one that inserts\nnothing, yields byte-identical YAML.",
          "is_bot": false,
          "headline": "Inject custom steps into generated GitHub Actions jobs",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-13T11:00:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bfc4bc630fe6ae125788822271b50ace34719db1",
          "body": "Introduce the public surface a build uses to inject custom workflow steps:\nGitHubActionsCustomStep (uses:/run: with fixed-order YAML rendering),\nGitHubActionsStepPosition (PostCheckout/PreRun/PostRun/JobEnd), the\nIConfigureGitHubActions hook interface, and GitHubActionsStepPipeline (per-job\ncontext + Insert + read-only BuiltInSteps view). Expose Fallout.Common internals\nto Fallout.Common.Specs so the pipeline's generator-only surface stays internal\nbut testable.",
          "is_bot": false,
          "headline": "Add typed step-injection types for the GitHub Actions generator",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-13T11:00:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61e04d84e9a1a03e5f7b164c9f77d1f6ae42947a",
          "body": null,
          "is_bot": false,
          "headline": "Fix bug, where a string stated as content is handled like a path",
          "author_name": "Lukas Gasselsberger | alu-one",
          "author_login": "ITaluone",
          "committed_at": "2026-07-13T09:07:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f407c7fd911b9ab3bf50915478bd1925138c5c95",
          "body": "Move the target-graph projection and JSON serialization out of\nSerializeBuildGraphAttribute into a pure BuildGraphUtility, so the\nbuild-graph.json contract the VS Code extension consumes can be\nsnapshot-tested without driving a full build. The attribute keeps only\nthe build-lifecycle hook and the fi\n[…]\nation.\n\nAddress review feedback: rename ResolveFalloutVersion -> FindFalloutVersion\n(it can return null) and brace the null guard.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Extract build-graph projection into testable BuildGraphUtility",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-13T08:08:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5c53a3925a4a82dc978d16e165384780675be1cf",
          "body": "Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for pull request finding",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-13T08:08:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a29b6a96a1d3715edbf503796f2d26b2270a13f5",
          "body": "Co-authored-by: ITaluone <44049228+ITaluone@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Update SerializeBuildGraphAttribute.cs",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-13T08:08:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19362d63fedaa54b429502ee79eead4cb1d2e28b",
          "body": "Co-authored-by: ITaluone <44049228+ITaluone@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Update SerializeBuildGraphAttribute.cs",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-13T08:08:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f11f0787bf3081b819f0e7f8a3323fdb0e3bf728",
          "body": "Add SerializeBuildGraphAttribute, which writes a machine-readable\nprojection of the target graph to <temp>/build-graph.json on every build\ninit: target names, descriptions, declaring type, default/listed flags,\nand the four relation kinds (dependsOn/after/triggeredBy/triggers).\n\nReuses the same grap\n[…]\n wrapped so a\nserialization failure can never fail a build. Consumed by the VS Code\nextension's targets view and dependency graph.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Emit build-graph.json on build initialization for editor tooling",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-13T08:08:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6583d78d2cc058cff4519f964ebedd0036a94d71",
          "body": "AGENTS.md and the versioning docs prescribed year-based target/YYYY\nlabels (per ADR-0004), but the repo actually standardised on evergreen\ntarget/vCurrent / target/vNext. Reconcile the docs to the real labels:\n\n- AGENTS.md rule #1, CONTRIBUTING.md, release-and-versioning.md\n  (targeting section + PR\n[…]\n rather\n  than rewritten, preserving the decision record.\n\nLegacy maintenance work still uses target/v10. Docs-only, non-breaking.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Align docs on evergreen target/vCurrent + target/vNext labels",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-13T02:02:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d4adc39d17d61c41b807a4d33a2cc3b144667498",
          "body": "The marketing site moved out of this repo into its own repo\n(Fallout-build/fallout.build), served via GitHub Pages from main. The\ngh-pages branch ADR-0008 listed as a steady-state branch no longer\nexists here; steady state is now just main + support/*.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Drop gh-pages from ADR-0008 steady-state branches",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-13T01:43:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bfb5163e940fff6a88b106eeb68651b570662c52",
          "body": null,
          "is_bot": false,
          "headline": "Support git worktrees",
          "author_name": "Lukas Gasselsberger | alu-one",
          "author_login": "ITaluone",
          "committed_at": "2026-07-12T13:41:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3969db057d84bcb7e7613f2098361ea7cbff5728",
          "body": "Co-authored-by: IT-VBFK <49762557+IT-VBFK@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Apply suggestions from code review",
          "author_name": "ITaluone",
          "author_login": "ITaluone",
          "committed_at": "2026-07-12T11:53:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13cc97cedfdf227d626cb18aade45e6c641390dd",
          "body": null,
          "is_bot": false,
          "headline": "Bump projects xunit.runner.console version",
          "author_name": "ITaluone",
          "author_login": "ITaluone",
          "committed_at": "2026-07-12T11:53:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "504fdb7bda05977e06e291e4d49e4619e8eec5af",
          "body": "… higher version",
          "is_bot": false,
          "headline": "Fix local run tests, when xunit.runner.console version is globally on…",
          "author_name": "Lukas Gasselsberger | alu-one",
          "author_login": "ITaluone",
          "committed_at": "2026-07-12T11:53:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2249a5d0f40f4248a8ebda85d50b0c31bb54fee5",
          "body": "…t creation\n\nContributors weren't consistently labelling PRs, so release notes fell through to 'Other Changes'.\n\n- .github/release.yml: document the label taxonomy inline (header + per-label blurbs on what\n  each is for). It already drives auto-generated release notes; now it's also the canonical\n  \n[…]\n label + points at release.yml.\n\nSo AI applies the matching changelog-category label whenever it raises a PR on the user's behalf.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Make release.yml the label source of truth and require PR labelling a…",
          "author_name": "Chrison Simtian",
          "author_login": "ChrisonSimtian",
          "committed_at": "2026-07-12T05:26:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "344de856a13f4a7290ab27687c4df895c4179345",
          "body": "Give the four obsolete workflow_dispatch input arrays a DiagnosticId and\nUrlFormat so consumers building with TreatWarningsAsErrors can NoWarn this one\ndeprecation instead of blanket-disabling CS0618.\n\nA custom DiagnosticId replaces CS0618, so the internal bridge and test\nsuppressions are flipped to disable FALLOUTOBS001. Generated YAML is unchanged\n(compile-time consumer diagnostic only), so no snapshots move.\n\nRegister FALLOUTOBS001 in the docs/obsolete_apis.md registry.",
          "is_bot": false,
          "headline": "Report legacy workflow_dispatch input obsoletions under FALLOUTOBS001",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-10T09:11:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08fc24b233d4506ae14dddda7c655543a45cf18a",
          "body": "Trim the new inline comments to explain why (the test-injection seam, the\nbackward-compatible legacy fold, the spaced-name normalization) rather than\nrestating the code, matching the repo's concise comment style.",
          "is_bot": false,
          "headline": "Tighten dispatch-input comments to rationale-only",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-10T09:11:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc716db5cfdc245dfec03599a3554bf4f30f08be",
          "body": "Direct trigger-layer tests for the restored obsolete OptionalInputs/RequiredInputs\narrays (the attribute path only ever sets Inputs), plus equivalence guards proving\nthe obsolete and new APIs emit byte-identical YAML, and a regression test for\nspaced-workflow scoping.",
          "is_bot": false,
          "headline": "Cover obsolete and new workflow_dispatch input APIs",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-10T09:11:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5586d98c8834c6e9ba057c2c1737214f5443beec",
          "body": "Workflow names are spaces-to-underscores normalized in the ctor, so an input's\nWorkflows scope must be normalized the same way. Without this, scoping to a\nworkflow declared with a space (e.g. \"My Workflow\") silently dropped the input\nand validation threw \"unknown workflow\" for a correctly-spelled name.",
          "is_bot": false,
          "headline": "Normalize workflow_dispatch input scoping for spaced workflow names",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-10T09:11:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71ccfa6c66a2e1e25d1f65a4fc6fd47692092211",
          "body": "Three Verify cases: every input kind (dispatch-typed-inputs), Workflows scoping\n(dispatch-input-scoping), and legacy + typed coexistence (dispatch-legacy-plus-typed).\nTestGitHubActionsAttribute gains a named-workflow ctor and Inputs/WorkflowNames\nseams so cases vary inputs without static class-level attributes.",
          "is_bot": false,
          "headline": "Add snapshot coverage for typed workflow_dispatch inputs",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-10T09:11:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11f58d053d341297ddc567e9cbd43ddc92bbb315",
          "body": "Covers every loud check: choice without options, default outside options,\noptions on a non-choice, non-numeric/non-boolean defaults, unknown workflow\nname, duplicate names, and blank names.",
          "is_bot": false,
          "headline": "Add validation tests for typed workflow_dispatch inputs",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-10T09:11:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99f4163cce273a171f8c5c1a628582dd2c6b2d9a",
          "body": "Collect [GitHubActionsInput] off the build class, scope by workflow name, and\nfold the legacy OnWorkflowDispatch*Inputs arrays into one model. The trigger\nwriter emits type:/default:/options: (string omits type:, keeping existing\noutput byte-identical). Misconfiguration fails generation loudly via\nA\n[…]\nithout options, default outside options/non-numeric/\nnon-boolean, unknown workflow name, options on a non-choice, duplicate or blank\nnames). The legacy arrays are marked [Obsolete] (removal 2027.x.x).",
          "is_bot": false,
          "headline": "Emit typed workflow_dispatch inputs from the GitHub Actions generator",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-10T09:11:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "433433b47b52dbb3720c5b99335b21866104f1df",
          "body": "Typed, compile-checked declaration surface for workflow_dispatch inputs\n(string/boolean/number/choice/environment), repeatable on the build class\nand scoped by workflow. Pure data carriers; not yet consumed.",
          "is_bot": false,
          "headline": "Add GitHubActionsInputType enum and [GitHubActionsInput] attribute",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-10T09:11:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "742261f7f8f072cb3e09caff4c4d3340815e45f5",
          "body": "Introduce docs/obsolete_apis.md as the canonical registry of FALLOUTOBS0xx\ndiagnostic IDs for [Obsolete] deprecations, so TreatWarningsAsErrors consumers\ncan NoWarn a single deprecation instead of blanket-disabling CS0618. Mirrors the\n[Experimental] FALLOUT0xx registry but uses a separate, never-col\n[…]\n from AGENTS.md rule #2. Scaffold only: the registry starts\nempty; the first ID (FALLOUTOBS001, legacy workflow_dispatch input arrays) is\nallocated by the typed-dispatch-inputs work that builds on it.",
          "is_bot": false,
          "headline": "Add obsolete-APIs diagnostic-ID registry and convention",
          "author_name": "Anže Videnič",
          "author_login": "avidenic",
          "committed_at": "2026-07-10T08:32:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "32a59f612715f1d0de79d20994b2ba71b2ebeb50",
          "body": null,
          "is_bot": false,
          "headline": "Add support for .slnx files in global tool's setup",
          "author_name": "Lukas Gasselsberger | alu-one",
          "author_login": "ITaluone",
          "committed_at": "2026-07-07T10:40:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 65,
      "commits_last_year": 336,
      "latest_release_at": "2026-07-26T12:43:22Z",
      "latest_release_tag": "v10.4.0-rc.4",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 13,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 6.7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 87,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 13,
      "stars": 100,
      "watchers": 5,
      "fork_history": {
        "days": [
          {
            "date": "2026-06-06",
            "count": 1
          },
          {
            "date": "2026-06-07",
            "count": 1
          },
          {
            "date": "2026-06-09",
            "count": 2
          },
          {
            "date": "2026-06-16",
            "count": 1
          },
          {
            "date": "2026-06-20",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 1
          },
          {
            "date": "2026-07-05",
            "count": 1
          },
          {
            "date": "2026-07-13",
            "count": 1
          },
          {
            "date": "2026-07-16",
            "count": 1
          },
          {
            "date": "2026-07-17",
            "count": 1
          },
          {
            "date": "2026-07-23",
            "count": 1
          },
          {
            "date": "2026-07-25",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 13,
        "total_forks": 13
      },
      "star_history": null,
      "open_issues_and_prs": 183
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "build/_build.csproj",
        "src/Fallout.Build.Shared/Fallout.Build.Shared.csproj",
        "src/Fallout.Build/Fallout.Build.csproj",
        "src/Fallout.Cli/Fallout.Cli.csproj",
        "src/Fallout.Cli/templates/_build.csproj",
        "src/Fallout.Common/CI/TeamCity/Configuration/pom.xml",
        "src/Fallout.Common/Fallout.Common.csproj",
        "src/Fallout.Components/Fallout.Components.csproj",
        "src/Fallout.Core/Fallout.Core.csproj",
        "src/Fallout.MSBuildTasks/Fallout.MSBuildTasks.csproj",
        "src/Fallout.Migrate.Analyzers/Fallout.Migrate.Analyzers.csproj",
        "src/Fallout.Migrate/Fallout.Migrate.csproj",
        "src/Fallout.ProjectModel/Fallout.ProjectModel.csproj",
        "src/Fallout.SourceGenerators/Fallout.SourceGenerators.csproj",
        "src/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj",
        "src/Fallout.Tooling/Fallout.Tooling.csproj",
        "src/Fallout.Utilities.IO.Compression/Fallout.Utilities.IO.Compression.csproj",
        "src/Fallout.Utilities.IO.Globbing/Fallout.Utilities.IO.Globbing.csproj",
        "src/Fallout.Utilities.Net/Fallout.Utilities.Net.csproj",
        "src/Fallout.Utilities.Text.Json/Fallout.Utilities.Text.Json.csproj",
        "src/Fallout.Utilities.Text.Yaml/Fallout.Utilities.Text.Yaml.csproj",
        "src/Fallout.Utilities/Fallout.Utilities.csproj",
        "src/Persistence/Fallout.Persistence.Solution/Fallout.Persistence.Solution.csproj",
        "src/Persistence/Fallout.Solution/Fallout.Solution.csproj",
        "src/Shims/Nuke.Build/Nuke.Build.csproj",
        "src/Shims/Nuke.Common/Nuke.Common.csproj",
        "src/Shims/Nuke.Components/Nuke.Components.csproj",
        "tests/Benchmarks/Fallout.Persistence.Solution.Benchmarks/Fallout.Persistence.Solution.Benchmarks.csproj",
        "tests/Consumers/Fallout.Consumer.Local/Fallout.Consumer.Local.csproj",
        "tests/Consumers/Fallout.Consumer.NuGet/Fallout.Consumer.NuGet.csproj",
        "tests/Consumers/Nuke.Consumer/Nuke.Consumer.csproj",
        "tests/Fallout.Build.Specs/Fallout.Build.Specs.csproj",
        "tests/Fallout.Cli.Specs/Fallout.Cli.Specs.csproj",
        "tests/Fallout.Common.Specs/Fallout.Common.Specs.csproj",
        "tests/Fallout.Components.Specs/Fallout.Components.Specs.csproj",
        "tests/Fallout.Core.Specs/Fallout.Core.Specs.csproj",
        "tests/Fallout.Migrate.Analyzers.Specs/Fallout.Migrate.Analyzers.Specs.csproj",
        "tests/Fallout.Migrate.Specs/Fallout.Migrate.Specs.csproj",
        "tests/Fallout.ProjectModel.Specs/Fallout.ProjectModel.Specs.csproj",
        "tests/Fallout.Solution.Specs/Fallout.Solution.Specs.csproj",
        "tests/Fallout.SourceGenerators.Specs/Fallout.SourceGenerators.Specs.csproj",
        "tests/Fallout.Tooling.Specs/Fallout.Tooling.Specs.csproj",
        "tests/Fallout.Utilities.Specs/Fallout.Utilities.Specs.csproj",
        "tests/Nuke.Common.Shim.Specs/Nuke.Common.Shim.Specs.csproj",
        "tests/Nuke.Components.Shim.Specs/Nuke.Components.Shim.Specs.csproj"
      ],
      "largest_source_bytes": 2377944,
      "source_files_sampled": 865,
      "oversized_source_files": 20,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 12008
    },
    "dependencies": {
      "manifests": [
        "build/_build.csproj"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "Microsoft.Build.Tasks.Core",
            "direct": true,
            "version": "17.11.48",
            "severity": "high",
            "ecosystem": "nuget",
            "cvss_score": 8,
            "advisory_ids": [
              "GHSA-h4j7-5rxr-p4wc"
            ],
            "fixed_version": "17.14.8",
            "advisory_count": 1,
            "oldest_advisory_days": 438
          },
          {
            "name": "Scriban",
            "direct": true,
            "version": "7.2.0",
            "severity": "high",
            "ecosystem": "nuget",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-6q7j-xr26-3h2c",
              "GHSA-7jvp-hj45-2f2m",
              "GHSA-q6rr-fm2g-g5x8"
            ],
            "fixed_version": "7.2.2",
            "advisory_count": 3,
            "oldest_advisory_days": 29
          },
          {
            "name": "System.Security.Cryptography.Xml",
            "direct": true,
            "version": "10.0.6",
            "severity": "high",
            "ecosystem": "nuget",
            "cvss_score": 8.1,
            "advisory_ids": [
              "GHSA-23rf-6693-g89p",
              "GHSA-8q5v-6pqq-x66h",
              "GHSA-cvvh-rhrc-wg4q",
              "GHSA-g8r8-53c2-pm3f",
              "GHSA-mmjf-rqrv-855v"
            ],
            "fixed_version": "10.0.10",
            "advisory_count": 5,
            "oldest_advisory_days": 5
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 3
        },
        "advisory_count": 9,
        "affected_count": 3,
        "assessed_count": 311,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 8,
        "direct_affected_count": 3
      },
      "ecosystems": [
        "nuget"
      ],
      "dependencies": [
        {
          "name": "System.Security.Cryptography.Xml",
          "manifest": "build/_build.csproj",
          "ecosystem": "nuget",
          "version_constraint": "10.0.10"
        },
        {
          "name": "Nerdbank.GitVersioning",
          "manifest": "build/_build.csproj",
          "ecosystem": "nuget",
          "version_constraint": "3.7.115"
        },
        {
          "name": "System.Text.Json",
          "manifest": "src/Fallout.Build.Shared/Fallout.Build.Shared.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Extensions.DependencyModel",
          "manifest": "src/Fallout.Build/Fallout.Build.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Serilog.Formatting.Compact",
          "manifest": "src/Fallout.Build/Fallout.Build.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Serilog.Formatting.Compact.Reader",
          "manifest": "src/Fallout.Build/Fallout.Build.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Serilog.Sinks.Console",
          "manifest": "src/Fallout.Build/Fallout.Build.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Serilog.Sinks.File",
          "manifest": "src/Fallout.Build/Fallout.Build.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Extensions.DependencyInjection",
          "manifest": "src/Fallout.Cli/Fallout.Cli.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Spectre.Console",
          "manifest": "src/Fallout.Cli/Fallout.Cli.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.CodeAnalysis.CSharp",
          "manifest": "src/Fallout.Cli/Fallout.Cli.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.CodeAnalysis.Workspaces.MSBuild",
          "manifest": "src/Fallout.Cli/Fallout.Cli.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.CodeAnalysis.Workspaces.Common",
          "manifest": "src/Fallout.Cli/Fallout.Cli.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Azure.Identity",
          "manifest": "src/Fallout.Common/Fallout.Common.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Azure.Security.KeyVault.Certificates",
          "manifest": "src/Fallout.Common/Fallout.Common.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Azure.Security.KeyVault.Keys",
          "manifest": "src/Fallout.Common/Fallout.Common.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Azure.Security.KeyVault.Secrets",
          "manifest": "src/Fallout.Common/Fallout.Common.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Octokit",
          "manifest": "src/Fallout.Common/Fallout.Common.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "NuGet.Packaging",
          "manifest": "src/Fallout.MSBuildTasks/Fallout.MSBuildTasks.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Build.Utilities.Core",
          "manifest": "src/Fallout.MSBuildTasks/Fallout.MSBuildTasks.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Build.Framework",
          "manifest": "src/Fallout.MSBuildTasks/Fallout.MSBuildTasks.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.CodeAnalysis.CSharp",
          "manifest": "src/Fallout.Migrate.Analyzers/Fallout.Migrate.Analyzers.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.CodeAnalysis.CSharp.Workspaces",
          "manifest": "src/Fallout.Migrate.Analyzers/Fallout.Migrate.Analyzers.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.CodeAnalysis.Analyzers",
          "manifest": "src/Fallout.Migrate.Analyzers/Fallout.Migrate.Analyzers.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "JetBrains.Annotations",
          "manifest": "src/Fallout.Migrate/Fallout.Migrate.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Spectre.Console.Cli",
          "manifest": "src/Fallout.Migrate/Fallout.Migrate.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Build.Locator",
          "manifest": "src/Fallout.ProjectModel/Fallout.ProjectModel.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Build",
          "manifest": "src/Fallout.ProjectModel/Fallout.ProjectModel.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Build.Framework",
          "manifest": "src/Fallout.ProjectModel/Fallout.ProjectModel.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Build.Tasks.Core",
          "manifest": "src/Fallout.ProjectModel/Fallout.ProjectModel.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.Build.Utilities.Core",
          "manifest": "src/Fallout.ProjectModel/Fallout.ProjectModel.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.CodeAnalysis.CSharp",
          "manifest": "src/Fallout.SourceGenerators/Fallout.SourceGenerators.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Microsoft.CodeAnalysis.Analyzers",
          "manifest": "src/Fallout.SourceGenerators/Fallout.SourceGenerators.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Scriban",
          "manifest": "src/Fallout.SourceGenerators/Fallout.SourceGenerators.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "HtmlAgilityPack",
          "manifest": "src/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Humanizer",
          "manifest": "src/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "System.Text.Json",
          "manifest": "src/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Serilog",
          "manifest": "src/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "System.ComponentModel.Annotations",
          "manifest": "src/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "NuGet.Packaging",
          "manifest": "src/Fallout.Tooling/Fallout.Tooling.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Serilog",
          "manifest": "src/Fallout.Tooling/Fallout.Tooling.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "SharpZipLib",
          "manifest": "src/Fallout.Utilities.IO.Compression/Fallout.Utilities.IO.Compression.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "Glob",
          "manifest": "src/Fallout.Utilities.IO.Globbing/Fallout.Utilities.IO.Globbing.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "System.Net.Http",
          "manifest": "src/Fallout.Utilities.Net/Fallout.Utilities.Net.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "System.Text.Json",
          "manifest": "src/Fallout.Utilities.Net/Fallout.Utilities.Net.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "System.Text.Json",
          "manifest": "src/Fallout.Utilities.Text.Json/Fallout.Utilities.Text.Json.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        },
        {
          "name": "YamlDotNet",
          "manifest": "src/Fallout.Utilities.Text.Yaml/Fallout.Utilities.Text.Yaml.csproj",
          "ecosystem": "nuget",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "Azure.Identity",
            "direct": true,
            "version": "1.17.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Azure.Security.KeyVault.Certificates",
            "direct": true,
            "version": "4.8.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Azure.Security.KeyVault.Keys",
            "direct": true,
            "version": "4.8.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Azure.Security.KeyVault.Secrets",
            "direct": true,
            "version": "4.8.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Glob",
            "direct": true,
            "version": "1.1.9",
            "ecosystem": "nuget"
          },
          {
            "name": "HtmlAgilityPack",
            "direct": true,
            "version": "1.11.71",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer",
            "direct": true,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "JetBrains.Annotations",
            "direct": true,
            "version": "2026.2.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build",
            "direct": true,
            "version": "17.11.48",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build",
            "direct": true,
            "version": "17.14.28",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build",
            "direct": true,
            "version": "18.0.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Framework",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Framework",
            "direct": true,
            "version": "17.11.48",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Framework",
            "direct": true,
            "version": "17.14.28",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Framework",
            "direct": true,
            "version": "18.0.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Locator",
            "direct": true,
            "version": "1.7.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Tasks.Core",
            "direct": true,
            "version": "17.11.48",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Tasks.Core",
            "direct": true,
            "version": "17.14.28",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Tasks.Core",
            "direct": true,
            "version": "18.0.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Utilities.Core",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Utilities.Core",
            "direct": true,
            "version": "17.11.48",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Utilities.Core",
            "direct": true,
            "version": "17.14.28",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Utilities.Core",
            "direct": true,
            "version": "18.0.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.Analyzers",
            "direct": true,
            "version": "3.11.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.CSharp",
            "direct": true,
            "version": "4.12.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.CSharp",
            "direct": true,
            "version": "4.7.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.CSharp.Workspaces",
            "direct": true,
            "version": "4.12.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.Workspaces.Common",
            "direct": true,
            "version": "4.12.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.Workspaces.MSBuild",
            "direct": true,
            "version": "4.12.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.DependencyInjection",
            "direct": true,
            "version": "10.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.DependencyModel",
            "direct": true,
            "version": "10.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Nerdbank.GitVersioning",
            "direct": true,
            "version": "3.7.115",
            "ecosystem": "nuget"
          },
          {
            "name": "NuGet.Packaging",
            "direct": true,
            "version": null,
            "ecosystem": "nuget"
          },
          {
            "name": "NuGet.Packaging",
            "direct": true,
            "version": "6.14.3",
            "ecosystem": "nuget"
          },
          {
            "name": "Octokit",
            "direct": true,
            "version": "14.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Scriban",
            "direct": true,
            "version": "7.2.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Serilog",
            "direct": true,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Serilog.Formatting.Compact",
            "direct": true,
            "version": "3.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Serilog.Formatting.Compact.Reader",
            "direct": true,
            "version": "4.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Serilog.Sinks.Console",
            "direct": true,
            "version": "6.1.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Serilog.Sinks.File",
            "direct": true,
            "version": "7.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "SharpZipLib",
            "direct": true,
            "version": "1.4.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Spectre.Console",
            "direct": true,
            "version": "0.49.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Spectre.Console.Cli",
            "direct": true,
            "version": "0.49.1",
            "ecosystem": "nuget"
          },
          {
            "name": "System.ComponentModel.Annotations",
            "direct": true,
            "version": "5.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Net.Http",
            "direct": true,
            "version": "4.3.4",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Xml",
            "direct": true,
            "version": "10.0.10",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Xml",
            "direct": true,
            "version": "10.0.6",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Xml",
            "direct": true,
            "version": "8.0.4",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Xml",
            "direct": true,
            "version": "9.0.18",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Text.Json",
            "direct": true,
            "version": "10.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "YamlDotNet",
            "direct": true,
            "version": "16.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "org.jetbrains.kotlin:kotlin-maven-plugin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlin:kotlin-script-runtime",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.teamcity:configs-dsl-kotlin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.teamcity:configs-dsl-kotlin-plugins",
            "direct": false,
            "version": "1.0-SNAPSHOT",
            "ecosystem": "maven"
          },
          {
            "name": "org.jetbrains.teamcity:teamcity-configs-maven-plugin",
            "direct": false,
            "version": null,
            "ecosystem": "maven"
          },
          {
            "name": "Argon",
            "direct": false,
            "version": "0.33.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Azure.Core",
            "direct": false,
            "version": "1.50.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Basic.Reference.Assemblies.NetStandard20",
            "direct": false,
            "version": "1.7.9",
            "ecosystem": "nuget"
          },
          {
            "name": "BenchmarkDotNet",
            "direct": false,
            "version": "0.14.0",
            "ecosystem": "nuget"
          },
          {
            "name": "BenchmarkDotNet.Annotations",
            "direct": false,
            "version": "0.14.0",
            "ecosystem": "nuget"
          },
          {
            "name": "CommandLineParser",
            "direct": false,
            "version": "2.9.1",
            "ecosystem": "nuget"
          },
          {
            "name": "coverlet.msbuild",
            "direct": false,
            "version": "6.0.4",
            "ecosystem": "nuget"
          },
          {
            "name": "DiffEngine",
            "direct": false,
            "version": "17.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "DiffPlex",
            "direct": false,
            "version": "1.7.2",
            "ecosystem": "nuget"
          },
          {
            "name": "EmptyFiles",
            "direct": false,
            "version": "8.17.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.Build",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.Build.Shared",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.Common",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.Common",
            "direct": false,
            "version": "_FALLOUT_VERSION_",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.Components",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.ProjectModel",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.SolutionModel",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.Tooling",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.Utilities",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.Utilities.IO.Compression",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.Utilities.IO.Globbing",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.Utilities.Net",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.Utilities.Text.Json",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.Utilities.Text.Yaml",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Fallout.VisualStudio.SolutionPersistence",
            "direct": false,
            "version": "11.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "FluentAssertions",
            "direct": false,
            "version": "8.10.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Gee.External.Capstone",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "GitHubActionsTestLogger",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core",
            "direct": false,
            "version": "2.14.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.af",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.ar",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.az",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.bg",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.bn",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.ca",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.cs",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.da",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.de",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.el",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.es",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.fa",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.fi",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.fil",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.fr",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.he",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.hr",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.hu",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.hy",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.id",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.is",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.it",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.ja",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.ko",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.ku",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.lb",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.lt",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.lv",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.ms",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.mt",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.nb",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.nl",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.pl",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.pt",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.pt-BR",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.ro",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.ru",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.sk",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.sl",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.sr",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.sr-Latn",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.sv",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.th",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.tr",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.uk",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.uz-Cyrl-UZ",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.uz-Latn-UZ",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.vi",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.zh-CN",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.zh-Hans",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Humanizer.Core.zh-Hant",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Iced",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "nuget"
          },
          {
            "name": "IsExternalInit",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Bcl.AsyncInterfaces",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Bcl.AsyncInterfaces",
            "direct": false,
            "version": "10.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Bcl.AsyncInterfaces",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Build.Tasks.Git",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.Analyzer.Testing",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.CodeFix.Testing",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.Common",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.Common",
            "direct": false,
            "version": "4.7.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.CSharp.Analyzer.Testing",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.CSharp.Analyzer.Testing.XUnit",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.CSharp.CodeFix.Testing",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.CSharp.CodeFix.Testing.XUnit",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeAnalysis.Testing.Verifiers.XUnit",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CodeCoverage",
            "direct": false,
            "version": "18.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.CSharp",
            "direct": false,
            "version": "4.7.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Diagnostics.NETCore.Client",
            "direct": false,
            "version": "0.2.251802",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Diagnostics.Runtime",
            "direct": false,
            "version": "2.2.332302",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Diagnostics.Tracing.TraceEvent",
            "direct": false,
            "version": "3.1.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.DotNet.PlatformAbstractions",
            "direct": false,
            "version": "3.1.6",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Configuration",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Configuration.Abstractions",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Configuration.Binder",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.DependencyInjection.Abstractions",
            "direct": false,
            "version": "10.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.DependencyInjection.Abstractions",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.DependencyInjection.Abstractions",
            "direct": false,
            "version": "8.0.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Logging",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Logging",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Logging.Abstractions",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Logging.Abstractions",
            "direct": false,
            "version": "8.0.3",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Options",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Options",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Primitives",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Extensions.Primitives",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Identity.Client",
            "direct": false,
            "version": "4.78.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.Identity.Client.Extensions.Msal",
            "direct": false,
            "version": "4.78.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.IdentityModel.Abstractions",
            "direct": false,
            "version": "8.14.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.NET.StringTools",
            "direct": false,
            "version": "17.11.48",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.NET.StringTools",
            "direct": false,
            "version": "17.14.28",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.NET.StringTools",
            "direct": false,
            "version": "18.0.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.NET.Test.Sdk",
            "direct": false,
            "version": "18.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.NETCore.Platforms",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.NETCore.Platforms",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.NETCore.Platforms",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.NETCore.Targets",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.SourceLink.Common",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.SourceLink.GitHub",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.TestPlatform.ObjectModel",
            "direct": false,
            "version": "18.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.TestPlatform.TestHost",
            "direct": false,
            "version": "18.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.VisualStudio.Composition",
            "direct": false,
            "version": "16.1.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.VisualStudio.Composition.NetFxAttributes",
            "direct": false,
            "version": "16.1.8",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.VisualStudio.Validation",
            "direct": false,
            "version": "15.0.82",
            "ecosystem": "nuget"
          },
          {
            "name": "Mono.Cecil",
            "direct": false,
            "version": "0.11.3",
            "ecosystem": "nuget"
          },
          {
            "name": "NetArchTest.Rules",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "nuget"
          },
          {
            "name": "NETStandard.Library",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "nuget"
          },
          {
            "name": "Newtonsoft.Json",
            "direct": false,
            "version": "13.0.3",
            "ecosystem": "nuget"
          },
          {
            "name": "NuGet.Common",
            "direct": false,
            "version": "6.14.3",
            "ecosystem": "nuget"
          },
          {
            "name": "NuGet.Configuration",
            "direct": false,
            "version": "6.14.3",
            "ecosystem": "nuget"
          },
          {
            "name": "NuGet.Frameworks",
            "direct": false,
            "version": "6.14.3",
            "ecosystem": "nuget"
          },
          {
            "name": "NuGet.Protocol",
            "direct": false,
            "version": "6.3.4",
            "ecosystem": "nuget"
          },
          {
            "name": "NuGet.Resolver",
            "direct": false,
            "version": "6.3.4",
            "ecosystem": "nuget"
          },
          {
            "name": "NuGet.Versioning",
            "direct": false,
            "version": "6.14.3",
            "ecosystem": "nuget"
          },
          {
            "name": "Perfolizer",
            "direct": false,
            "version": "0.3.17",
            "ecosystem": "nuget"
          },
          {
            "name": "PolySharp",
            "direct": false,
            "version": "1.15.0",
            "ecosystem": "nuget"
          },
          {
            "name": "ReportGenerator",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.native.System",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.native.System.Net.Http",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.native.System.Security.Cryptography.Apple",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.native.System.Security.Cryptography.OpenSsl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "nuget"
          },
          {
            "name": "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "nuget"
          },
          {
            "name": "SimpleInfoName",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Buffers",
            "direct": false,
            "version": "4.6.1",
            "ecosystem": "nuget"
          },
          {
            "name": "System.ClientModel",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.CodeDom",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.CodeDom",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.CodeDom",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Collections",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Collections.Concurrent",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Collections.Immutable",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Collections.Immutable",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Collections.Immutable",
            "direct": false,
            "version": "9.0.10",
            "ecosystem": "nuget"
          },
          {
            "name": "System.ComponentModel.Composition",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Composition",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Composition.AttributedModel",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Composition.Convention",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Composition.Hosting",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Composition.Runtime",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Composition.TypedParts",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Configuration.ConfigurationManager",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Configuration.ConfigurationManager",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Diagnostics.Debug",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Diagnostics.DiagnosticSource",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Diagnostics.DiagnosticSource",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Diagnostics.EventLog",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Diagnostics.EventLog",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Diagnostics.Tracing",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Formats.Asn1",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Formats.Nrbf",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Globalization",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Globalization.Calendars",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Globalization.Extensions",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.IO",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.IO.FileSystem",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.IO.FileSystem.Primitives",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.IO.Pipelines",
            "direct": false,
            "version": "10.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "System.IO.Pipelines",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Linq",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Management",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Management",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Memory",
            "direct": false,
            "version": "4.6.3",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Memory.Data",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Net.Primitives",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Numerics.Vectors",
            "direct": false,
            "version": "4.6.1",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Reflection",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Reflection.Metadata",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Reflection.Metadata",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Reflection.MetadataLoadContext",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Reflection.MetadataLoadContext",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Reflection.Primitives",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Resources.Extensions",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Resources.Extensions",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Resources.ResourceManager",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Runtime",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Runtime.CompilerServices.Unsafe",
            "direct": false,
            "version": "6.1.2",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Runtime.Extensions",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Runtime.Handles",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Runtime.InteropServices",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Runtime.Numerics",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Algorithms",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Cng",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Cng",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Csp",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Encoding",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.OpenSsl",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Pkcs",
            "direct": false,
            "version": "10.0.10",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Pkcs",
            "direct": false,
            "version": "10.0.6",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Pkcs",
            "direct": false,
            "version": "6.0.4",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Pkcs",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Pkcs",
            "direct": false,
            "version": "9.0.18",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.Primitives",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.ProtectedData",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.ProtectedData",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.ProtectedData",
            "direct": false,
            "version": "9.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.ProtectedData",
            "direct": false,
            "version": "9.0.6",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Cryptography.X509Certificates",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Permissions",
            "direct": false,
            "version": "4.5.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Security.Permissions",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Text.Encoding",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Text.Encoding.CodePages",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Text.Encodings.Web",
            "direct": false,
            "version": "10.0.8",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Threading",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Threading.Channels",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Threading.Channels",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Threading.Tasks",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Threading.Tasks.Extensions",
            "direct": false,
            "version": "4.6.3",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Windows.Extensions",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Verify",
            "direct": false,
            "version": "31.7.1",
            "ecosystem": "nuget"
          },
          {
            "name": "Verify.DiffPlex",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "nuget"
          },
          {
            "name": "Verify.SourceGenerators",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Verify.Xunit",
            "direct": false,
            "version": "31.7.1",
            "ecosystem": "nuget"
          },
          {
            "name": "xunit",
            "direct": false,
            "version": "2.9.3",
            "ecosystem": "nuget"
          },
          {
            "name": "xunit.abstractions",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "nuget"
          },
          {
            "name": "xunit.analyzers",
            "direct": false,
            "version": "1.18.0",
            "ecosystem": "nuget"
          },
          {
            "name": "xunit.assert",
            "direct": false,
            "version": "2.9.3",
            "ecosystem": "nuget"
          },
          {
            "name": "xunit.core",
            "direct": false,
            "version": "2.9.3",
            "ecosystem": "nuget"
          },
          {
            "name": "xunit.extensibility.core",
            "direct": false,
            "version": "2.9.3",
            "ecosystem": "nuget"
          },
          {
            "name": "xunit.extensibility.execution",
            "direct": false,
            "version": "2.9.3",
            "ecosystem": "nuget"
          },
          {
            "name": "xunit.runner.console",
            "direct": false,
            "version": "2.9.3",
            "ecosystem": "nuget"
          },
          {
            "name": "xunit.runner.visualstudio",
            "direct": false,
            "version": "3.1.5",
            "ecosystem": "nuget"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 319,
        "direct_count": 52,
        "indirect_count": 267
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 29,
        "merged_prs": 225,
        "open_issues": 154,
        "closed_ratio": 0.423,
        "closed_issues": 113,
        "closed_unmerged_prs": 38
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "matkoch",
          "commits": 3080,
          "avatar_url": "https://avatars.githubusercontent.com/u/5005566?v=4"
        },
        {
          "type": "User",
          "login": "ChrisonSimtian",
          "commits": 211,
          "avatar_url": "https://avatars.githubusercontent.com/u/2966166?v=4"
        },
        {
          "type": "User",
          "login": "arodus",
          "commits": 66,
          "avatar_url": "https://avatars.githubusercontent.com/u/18667020?v=4"
        },
        {
          "type": "User",
          "login": "ITaluone",
          "commits": 36,
          "avatar_url": "https://avatars.githubusercontent.com/u/44049228?v=4"
        },
        {
          "type": "User",
          "login": "dennisdoomen",
          "commits": 34,
          "avatar_url": "https://avatars.githubusercontent.com/u/572734?v=4"
        },
        {
          "type": "User",
          "login": "avidenic",
          "commits": 29,
          "avatar_url": "https://avatars.githubusercontent.com/u/6639357?v=4"
        },
        {
          "type": "User",
          "login": "lahma",
          "commits": 22,
          "avatar_url": "https://avatars.githubusercontent.com/u/171892?v=4"
        },
        {
          "type": "User",
          "login": "GeorgDangl",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/10274404?v=4"
        },
        {
          "type": "User",
          "login": "matt-richardson",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/373389?v=4"
        },
        {
          "type": "User",
          "login": "macsux",
          "commits": 7,
          "avatar_url": "https://avatars.githubusercontent.com/u/1102552?v=4"
        }
      ],
      "contributors_sampled": 99,
      "top_contributor_share": 0.831
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "build-cross-platform.yml",
        "build-skip.yml",
        "build.yml",
        "publish-packages-preview.yml",
        "publish-packages-release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": true,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "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": 1,
            "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": "14 out of 14 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": 7,
            "reason": "Found 11/14 approved changesets -- score normalized to 7",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 24 contributing companies or organizations",
            "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": 9,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow 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": 3,
            "reason": "SAST tool is not run on all commits -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 9,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "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": "0f5d2f0bbda75c74c88813b9e89309bd40762464",
        "ran_at": "2026-07-26T13:21:47Z",
        "aggregate_score": 5.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-26T11:49:02Z",
      "oldest_open_prs": [
        {
          "number": 423,
          "created_at": "2026-06-25T01:36:49Z",
          "last_comment_at": "2026-06-26T23:48:44Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 442,
          "created_at": "2026-06-29T11:17:57Z",
          "last_comment_at": "2026-07-04T22:55:37Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 447,
          "created_at": "2026-06-30T08:48:14Z",
          "last_comment_at": "2026-07-04T22:53:58Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 452,
          "created_at": "2026-06-30T10:14:01Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 453,
          "created_at": "2026-06-30T10:19:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 454,
          "created_at": "2026-06-30T10:35:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 474,
          "created_at": "2026-07-09T18:48:39Z",
          "last_comment_at": "2026-07-11T08:56:31Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 478,
          "created_at": "2026-07-11T18:53:09Z",
          "last_comment_at": "2026-07-25T11:31:14Z",
          "last_comment_author": "IT-VBFK"
        },
        {
          "number": 498,
          "created_at": "2026-07-17T02:55:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 517,
          "created_at": "2026-07-20T08:35:06Z",
          "last_comment_at": "2026-07-20T10:45:22Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 519,
          "created_at": "2026-07-20T11:04:45Z",
          "last_comment_at": "2026-07-20T19:45:56Z",
          "last_comment_author": "ITaluone"
        },
        {
          "number": 526,
          "created_at": "2026-07-21T01:17:57Z",
          "last_comment_at": "2026-07-21T05:58:34Z",
          "last_comment_author": "ITaluone"
        },
        {
          "number": 528,
          "created_at": "2026-07-21T02:18:02Z",
          "last_comment_at": "2026-07-26T08:00:00Z",
          "last_comment_author": "dennisdoomen"
        },
        {
          "number": 529,
          "created_at": "2026-07-21T03:36:12Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 530,
          "created_at": "2026-07-21T05:21:05Z",
          "last_comment_at": "2026-07-21T07:12:23Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 536,
          "created_at": "2026-07-24T00:44:30Z",
          "last_comment_at": "2026-07-25T07:26:02Z",
          "last_comment_author": "dennisdoomen"
        },
        {
          "number": 540,
          "created_at": "2026-07-24T03:42:48Z",
          "last_comment_at": "2026-07-24T22:27:17Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 541,
          "created_at": "2026-07-24T04:06:53Z",
          "last_comment_at": "2026-07-24T22:36:07Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 542,
          "created_at": "2026-07-26T02:41:06Z",
          "last_comment_at": "2026-07-26T03:01:32Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 549,
          "created_at": "2026-07-26T11:40:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-26T13:10:21Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 6,
          "created_at": "2026-05-18T03:20:39Z",
          "last_comment_at": "2026-07-23T00:12:44Z",
          "last_comment_author": "YousifSala7"
        },
        {
          "number": 7,
          "created_at": "2026-05-18T03:20:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 8,
          "created_at": "2026-05-18T03:20:49Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 17,
          "created_at": "2026-05-18T04:19:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 18,
          "created_at": "2026-05-18T04:19:36Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 19,
          "created_at": "2026-05-18T04:19:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 45,
          "created_at": "2026-05-18T08:41:23Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 72,
          "created_at": "2026-05-21T08:59:34Z",
          "last_comment_at": "2026-05-21T09:02:54Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 73,
          "created_at": "2026-05-21T09:02:12Z",
          "last_comment_at": "2026-05-21T09:02:56Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 74,
          "created_at": "2026-05-21T09:02:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 97,
          "created_at": "2026-05-21T22:39:37Z",
          "last_comment_at": "2026-05-25T10:12:17Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 98,
          "created_at": "2026-05-21T22:39:39Z",
          "last_comment_at": "2026-05-25T10:12:21Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 99,
          "created_at": "2026-05-21T22:39:42Z",
          "last_comment_at": "2026-05-25T10:12:26Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 100,
          "created_at": "2026-05-21T22:39:44Z",
          "last_comment_at": "2026-05-25T10:12:30Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 101,
          "created_at": "2026-05-21T22:39:46Z",
          "last_comment_at": "2026-05-25T10:12:35Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 104,
          "created_at": "2026-05-22T07:39:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 105,
          "created_at": "2026-05-22T07:40:10Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 106,
          "created_at": "2026-05-22T07:40:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 113,
          "created_at": "2026-05-22T12:15:29Z",
          "last_comment_at": "2026-05-27T12:20:49Z",
          "last_comment_author": "ChrisonSimtian"
        },
        {
          "number": 121,
          "created_at": "2026-05-24T01:07:24Z",
          "last_comment_at": "2026-05-24T01:08:07Z",
          "last_comment_author": "ChrisonSimtian"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Fallout-build/Fallout",
    "host": "github.com",
    "name": "Fallout",
    "owner": "Fallout-build"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 63,
      "inputs": {
        "security": 54,
        "vitality": 74,
        "community": 64,
        "governance": 46,
        "engineering": 80
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 74,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "commits_last_year": 336,
              "human_commit_share": 0.99,
              "days_since_last_push": 0,
              "active_weeks_last_year": 13
            },
            "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": "13/52 weeks with commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 13
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "336 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 336
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 65,
              "latest_release_tag": "v10.4.0-rc.4",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 6.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "65 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 65
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~6.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 6.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 64,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 45,
            "inputs": {
              "forks": 13,
              "stars": 100,
              "watchers": 5,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "100 stars",
                "points": 32.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "13 forks",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "5 watchers",
                "points": 3.3,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 86,
            "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": "license file present, not a recognized license",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "license_custom",
                    "params": {}
                  }
                ],
                "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
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 46,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 36,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 99,
              "top_contributor_share": 0.831
            },
            "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 83% of commits",
                "points": 3.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 83
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "99 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 99
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 24 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "merged_prs": 225,
              "open_issues": 154,
              "closed_issues": 113,
              "issue_closed_ratio": 0.423,
              "closed_unmerged_prs": 38
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "42% of issues closed",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 42
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "225/263 decided PRs merged",
                "points": 32.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 225,
                      "decided": 263
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 11/14 approved changesets -- score normalized to 7",
                "points": 10.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 42,
            "inputs": {
              "followers": 3,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "Fallout-build",
              "public_repos": 8,
              "account_age_days": 59
            },
            "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": "3 followers of Fallout-build",
                "points": 4.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 3,
                      "login": "Fallout-build"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "8 public repos, account ~0 yr old",
                "points": 7.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 8
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 80,
        "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": "5 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "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": "14 out of 14 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": "https://fallout.build/",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://fallout.build/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 54,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 5.4
            },
            "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": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "14 out of 14 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 11/14 approved changesets -- score normalized to 7",
                "points": 5.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 24 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "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.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "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 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "moderate",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 311 resolved dependencies against OSV; 8 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"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 311
                }
              },
              {
                "code": "advisories_unassessed",
                "params": {
                  "count": 8
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 56,
            "inputs": {
              "source": "osv",
              "advisories": 9,
              "affected_packages": 3,
              "assessed_packages": 311,
              "unassessed_packages": 8,
              "affected_by_severity": "high 3",
              "direct_affected_packages": 3
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "3 affected: Microsoft.Build.Tasks.Core 17.11.48 (high 8.0), Scriban 7.2.0 (high 7.5), System.Security.Cryptography.Xml 10.0.6 (high 8.1)",
                "points": 8.9,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 3,
                      "packages": "Microsoft.Build.Tasks.Core 17.11.48 (high 8.0), Scriban 7.2.0 (high 7.5), System.Security.Cryptography.Xml 10.0.6 (high 8.1)"
                    }
                  }
                ],
                "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": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 438 days ago",
                "points": 33.3,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 1,
                      "oldest": 438
                    }
                  }
                ],
                "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": 311,
              "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": 15
            },
            "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": 82,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "good",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.737,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 12008
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "73 of 99 human commits state their intent (structured subject or explanatory body)",
                "points": 39.3,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 73,
                      "sampled": 99
                    }
                  }
                ],
                "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": [],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.47,
              "toolchain_manifests": [
                "build/_build.csproj",
                "src/Fallout.Build.Shared/Fallout.Build.Shared.csproj",
                "src/Fallout.Build/Fallout.Build.csproj",
                "src/Fallout.Cli/Fallout.Cli.csproj",
                "src/Fallout.Cli/templates/_build.csproj",
                "src/Fallout.Common/CI/TeamCity/Configuration/pom.xml",
                "src/Fallout.Common/Fallout.Common.csproj",
                "src/Fallout.Components/Fallout.Components.csproj",
                "src/Fallout.Core/Fallout.Core.csproj",
                "src/Fallout.MSBuildTasks/Fallout.MSBuildTasks.csproj",
                "src/Fallout.Migrate.Analyzers/Fallout.Migrate.Analyzers.csproj",
                "src/Fallout.Migrate/Fallout.Migrate.csproj",
                "src/Fallout.ProjectModel/Fallout.ProjectModel.csproj",
                "src/Fallout.SourceGenerators/Fallout.SourceGenerators.csproj",
                "src/Fallout.Tooling.Generator/Fallout.Tooling.Generator.csproj",
                "src/Fallout.Tooling/Fallout.Tooling.csproj",
                "src/Fallout.Utilities.IO.Compression/Fallout.Utilities.IO.Compression.csproj",
                "src/Fallout.Utilities.IO.Globbing/Fallout.Utilities.IO.Globbing.csproj",
                "src/Fallout.Utilities.Net/Fallout.Utilities.Net.csproj",
                "src/Fallout.Utilities.Text.Json/Fallout.Utilities.Text.Json.csproj",
                "src/Fallout.Utilities.Text.Yaml/Fallout.Utilities.Text.Yaml.csproj",
                "src/Fallout.Utilities/Fallout.Utilities.csproj",
                "src/Persistence/Fallout.Persistence.Solution/Fallout.Persistence.Solution.csproj",
                "src/Persistence/Fallout.Solution/Fallout.Solution.csproj",
                "src/Shims/Nuke.Build/Nuke.Build.csproj",
                "src/Shims/Nuke.Common/Nuke.Common.csproj",
                "src/Shims/Nuke.Components/Nuke.Components.csproj",
                "tests/Benchmarks/Fallout.Persistence.Solution.Benchmarks/Fallout.Persistence.Solution.Benchmarks.csproj",
                "tests/Consumers/Fallout.Consumer.Local/Fallout.Consumer.Local.csproj",
                "tests/Consumers/Fallout.Consumer.NuGet/Fallout.Consumer.NuGet.csproj",
                "tests/Consumers/Nuke.Consumer/Nuke.Consumer.csproj",
                "tests/Fallout.Build.Specs/Fallout.Build.Specs.csproj",
                "tests/Fallout.Cli.Specs/Fallout.Cli.Specs.csproj",
                "tests/Fallout.Common.Specs/Fallout.Common.Specs.csproj",
                "tests/Fallout.Components.Specs/Fallout.Components.Specs.csproj",
                "tests/Fallout.Core.Specs/Fallout.Core.Specs.csproj",
                "tests/Fallout.Migrate.Analyzers.Specs/Fallout.Migrate.Analyzers.Specs.csproj",
                "tests/Fallout.Migrate.Specs/Fallout.Migrate.Specs.csproj",
                "tests/Fallout.ProjectModel.Specs/Fallout.ProjectModel.Specs.csproj",
                "tests/Fallout.Solution.Specs/Fallout.Solution.Specs.csproj",
                "tests/Fallout.SourceGenerators.Specs/Fallout.SourceGenerators.Specs.csproj",
                "tests/Fallout.Tooling.Specs/Fallout.Tooling.Specs.csproj",
                "tests/Fallout.Utilities.Specs/Fallout.Utilities.Specs.csproj",
                "tests/Nuke.Common.Shim.Specs/Nuke.Common.Shim.Specs.csproj",
                "tests/Nuke.Components.Shim.Specs/Nuke.Components.Shim.Specs.csproj"
              ],
              "dependency_bot_commit_share": 0.01
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "build/_build.csproj, src/Fallout.Build.Shared/Fallout.Build.Shared.csproj, src/Fallout.Build/Fallout.Build.csproj (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "build/_build.csproj, src/Fallout.Build.Shared/Fallout.Build.Shared.csproj, src/Fallout.Build/Fallout.Build.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": "Dockerfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "47 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 47,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "1 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 1,
                      "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": 99,
            "inputs": {
              "primary_language": "C#",
              "largest_source_bytes": 2377944,
              "source_files_sampled": 865,
              "oversized_source_files": 20
            },
            "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": "20/865 source files over 60KB",
                "points": 53.7,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 865,
                      "oversized": 20
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "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 nuget package 'Fallout.GlobalTools' from its registry"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T13:22:14.798677Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/Fallout-build/Fallout.svg",
  "full_name": "Fallout-build/Fallout",
  "license_state": "custom",
  "license_spdx": null
}

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

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

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