文章正文按原文语言展示。
本次核验了固定提交下的13,267条Radar记录,完成字段检查、仓库去重、CSV导出与回读。验证对象是数据流程,不是插件安装、安全审计或新版DSH兼容性。
下载清单容易,解释清单需要证据
插件目录里的“ok”能帮你 缩小检索范围,却不能保证最新版本可用,更不能代替权限审查。本篇把DSH Plugin Radar的公开JSON变成一份能回读、能对账的CSV,解决的是选型前的数据整理问题,不执行任何插件代码。
需求来自项目自己的接口说明 :公开记录可用于下游工具,但每条记录尚未给出完整的插件提交、测试时间、版本与日志。我们因此固定来源提交,核对字段与统计,再把“记录状态”与“我实际验证过的功能”分开。
本次实测在macOS与项目 Python环境完成;固定输入SHA-256、完整提交、脚本及输出保存于包内。处理与回读耗时0.1075秒,脚本无付费API成本;这不包含前置研究、网络下载和人工检查的时间。
验证到CSV最终输出为止 。Excel中的显示、插件安装与Profile重启均未测试,也不以其他操作的终端画面证明本次过程。
开始之前:目标、前提与验收标准
目标是得到result/p lugins.csv及result/acceptance.json。验收要求为:输入和CSV都含13,267条记录,仓库标识集合一致,verdict统计一致;坏JSON、缺verdict、重复仓库三项反例被拒绝。数据状态只能按项目口径解释。
需要Python 3.12 及以上、终端、网络下载工具curl和一个新建工作目录。脚本使用标准库,不要求DSH账号、API Key、Docker、Kubernetes或管理员权限;不要在现有生产目录运行或覆盖自己的表格。
本包tools/audit _radar_snapshot.py是本次核验脚本,输入样本在test_input/plugins-all.json。脚本不联网、不安装依赖、不读取Profile;只读指定输入,在指定输出目录写CSV和验收报告。运行前可打开源码检查这些边界。
第三方描述字段可能含电子表 格公式。脚本对以等号、加号、减号和@开头的值加文本前缀,降低CSV打开时执行公式的风险。因此它保留的是仓库集合与统计,不承诺每个描述字符与原JSON逐字相同。
第一步:建立隔离目录并固定来源
在终端创建一个新目录 :mkdir radar-check-20261010,然后cd radar-check-20261010。把稿件包的tools目录复制到这个目录。不要把项目自己的虚拟环境或真实账号文件一起复制。
本次来源提交是c4321f 15b7b83a13d7aa73615fd2163f042539b4。执行curl --fail --location --max-time 30 'https://raw.githubusercontent.com/AdamPlatin123/dsh-plugin-radar/c4321f15b7b83a13d7aa73615fd2163f042539b4/data/plugins-all.json' --output plugins-all.json。命令返回只是下载完成,还没有证明数据可用。
预期中间结果是当前目录出现 plugins-all.json。若网络不可用,可以使用包内同名固定样本,并记录它是本次保存的快照;不能把失败后下载到的错误页面改名为JSON继续运行。
第二步:核对文件身份与数据日期
macOS执行shasum -a 256 plugins-all.json。本次固定样本的结果为4da4552f3565ac12fb49bfa4e3789023bdb02df7cc34d22142d792924fd4e447。不同结果时停止,不用“内容差不多”作为继续条件;先核对提交和下载文件。
Windows可用Powe rShell的Get-FileHash -Algorithm SHA256 ./plugins-all.json核对同一摘要。哈希只说明文件与本次样本一致,不证明作者测试结论为真;新快照需要新记录,不能沿用今天的验收数字。
本次JSON的schema 为dsh-radar/v1,generated_at为2026-10-09T23:15:47Z,即北京时间10月10日07:15:47。它是数据生成时间,不是每一款插件的测试时间。
第三步:运行字段与仓库检查
执行python3 too ls/audit_radar_snapshot.py --input plugins-all.json --output result。脚本检查plugins是非空数组,每条包含repo、name、verdict、stars、desc,仓库名符合owner/repo形式,stars为非负整数。
仓库标识转小写、去掉末尾斜 杠后参与重复检查。发现重复时脚本拒绝输入,不自行保留某一条,因为冲突条目的状态需要回到上游判定。安装更多包或提高权限不会修复数据冲突。
预期终端输出包含passe d: true、input_rows: 13267与csv_rows: 13267。若报missing required field或invalid canonical repo,保存行号与输入摘要,检查是否换了上游schema,不通过修改计数让结果变绿。
第四步:打开结果,核对四档合计
脚本生成UTF-8带BOM 的CSV,可供电子表格导入。统计应为ok 8,216、incompatible 3,117、pending 1,900、untested 34,四档合计13,267。这里的英文状态是上游字段,不是本篇新的审计评级。
先在文本编辑器查看CSV表 头,再打开acceptance.json。报告应含input_sha256、csv_sha256、verdict_counts与generated_at。文件存在不是验收,数目、集合与状态统计都要匹配。
本次脚本写完CSV后 ,用csv.DictReader读回文件,比较记录数、仓库集合与verdict分布。三个检查通过,才证明导出没有丢行或改坏分类;本篇没有测试Excel某个版本的筛选界面。
第五步:看反例报告,确认失败会被阻止
验收文件failure_t ests中,broken_json、missing_verdict、duplicate_repo三项应为rejected: true。坏JSON抛解析错误,缺字段提示位置,重复仓库提示标识;这些输出来自本次真实运行。
若某个反例不再被拒绝 ,不应在生产目录更新数据;先固定脚本版本并查变更。另一个风险是CSV被外部编辑器修改,输入摘要仍相同却输出摘要变化。应再执行一次脚本,而不是沿用旧报告证明新文件。
脚本不覆盖上游 ,不修改Profile,也不删除旧目录。恢复办法是保留原文件,另建输出目录再运行;不要对包含私人文件的目录执行递归清理,以免把数据排错变成数据丢失。
第六步:从数据筛选走向单项验证
CSV可以按需求和状态筛选 候选,但进入安装前仍需回原仓库核对固定版本、许可证、Bundle、网络目标、文件路径、命令执行和卸载方式。ok记录缺少逐条证据时,标为待复核,而不是“已审计”。
本次没有安装插件 ,没有重启一次性Profile,没有验收插件最终任务输出。数据方法可以复现,插件可用性不能据此声明;想升级到运行验证,需在隔离Profile完成安装、重启、任务验收与精确回滚并保存日志。
下游长期接入还要补超时、有 限重试、缓存与schema变化检测。今天的固定样本验证不了明天每次刷新都成功;只有新数据通过同样检查,才应替换旧缓存,并向使用者显示数据日期。
把一万多条记录变成可核对表 格,收益是减少重复整理和误读状态,不是得到一万多张安全证书。让数字有来源,让输出有回读,让未知保持未知,才是这个小工具能节省的工作。
原稿日期:2026-10-10。
