radiology-skills发布治理全解析:release-allowlist、校验脚本与行为评测harness详解
【免费下载链接】radiology-skills项目地址: https://gitcode.com/gh_mirrors/ra/radiology-skills
radiology-skills 是面向医学影像科研的 40 技能包(清单版本 1.10.1),它的发布治理由三件套保障:release-allowlist发布白名单、发布边界校验脚本,以及behavior-evals行为评测 harness。本文带你从零看懂这套"质量门"如何确保发布出去的每一版都是干净、可验证、不过度承诺的。🛡️
一、先看仓库结构:什么是"发布面"
仓库分两层:外层是仓库根目录(含 README.md 与 install.md),内层radiology-skills/才是完整插件包,包含 40 个radiology-*技能目录、插件清单、scripts/校验脚本和behavior-evals/评测目录。
这里有一个关键概念:发布面(release surface)——只有白名单里列出的内容才允许进入发行包。本地研究语料(research/)、临时文件(tmp/)、下载的 PDF、OCR 中间产物、依赖缓存都是"开发证据",不属于产品,更不能随包再分发。完整规则见 radiology-skills/RELEASE.md。
二、release-allowlist 发布白名单:只放行 11 个顶层入口
单一事实源是 radiology-skills/release-allowlist.txt,内容非常克制——只有 11 个顶层条目:
| 条目 | 作用 |
|---|---|
.claude-plugin/、.codex-plugin/ | 两套插件清单,三处清单的 name/version/description 必须一致 |
skills/ | 全部 40 个可安装技能,每个必须含SKILL.md+agents/openai.yaml |
behavior-evals/ | 行为评测 harness(用例注册表、评分标准、schema、脚本) |
README.md、install.md、LICENSE、.gitignore、RELEASE.md | 文档与法律边界 |
release-allowlist.txt、scripts/ | 白名单自身与发布校验脚本 |
白名单是精确匹配(exact top-level set),任何未批准的添加都会让门禁失败(fail-closed),常见拦截场景包括:
- ⛔ 路径以根目录、
..父路径或隐藏点开头(防目录穿越); - ⛔ reparse point(Windows 符号链接)、隐藏/系统文件混入;
- ⛔
__pycache__、node_modules、.pyc/.dll/.log等编译与运行产物; - ⛔ 同一目标被不同写法重复列入(归一化后去重)。
.gitignore也被要求必须排除/research/、/tmp/、**/__pycache__/、*.py[cod]——防止开发痕迹被顺手提交进发布面。
三、发布边界校验脚本:一条命令跑完全部门禁
核心入口是 radiology-skills/scripts/validate_release_boundary.ps1,在打 tag 或打包前运行:
pwsh -NoProfile -File scripts/validate_release_boundary.ps1 ` -ProductRoot '<产品根目录>' -PythonExecutable '<Python 3.10+ 解释器>'它依次执行这些门禁(任一失败即整体 FAIL):
- 清单一致性:Claude 插件、marketplace、Codex 插件三份清单的 name/version/description/作者/许可证逐一比对;
- 技能完整性:恰好 40 个
radiology-*技能,且各自SKILL.md与agents/openai.yaml齐全; - 白名单审计:逐条解析、归一化、检查路径逃逸与禁止产物(见上一节);
- 资产校验:调用 validate_release_assets.py,检查所有 JSON/YAML 无重复键、每个技能的 frontmatter 名称与目录一致、全部本地 Markdown 链接不悬空;
- 回归测试:扫描出所有
test_*.py与validate_*.ps1,并与冻结清单 release-test-inventory.json 双向比对——当前冻结了27 个 Python 回归测试和 28 个 PowerShell 契约校验器。少了、多了、路径改了都会失败,杜绝"零测试通过"的假阳性。
环境要求:Python 3.10+(含yaml、pypdf、Pillow)+ PowerShell 7+。
构建器:双重验证 + 确定性打包
radiology-skills/scripts/build_release.py 在正式构建时做到"三重保险":
- 先在源树跑一遍完整门禁,再把白名单内容拷入全新的 staging 目录(拒绝复用已存在路径),在干净副本里重跑完整门禁;
- 输出逐文件 size/SHA-256 清单与整树摘要,并记录 Python 依赖版本、外部校验器路径及其哈希,生成发布 receipt;
- 打出的 ZIP 是确定性的(固定时间戳、排序条目、统一权限位),同样内容必然得到相同压缩包与 SHA-256,便于第三方复核身份。
注意:receipt 只是"结构身份记录",不等同于行为或科学层面的发布批准。
四、behavior-evals 行为评测 harness:静态检查证明不了模型行为
静态校验只能证明"契约格式正确",证明不了"模型真的会照做"。radiology-skills/behavior-evals/ 目录就是为真实前向行为评测设计的发布级 harness:
- 冻结用例注册表:cases.json 收录 64 个冻结提示(覆盖口语化、模糊、复合、跨界四类),每条用例绑定 UTF-8 提示词的 SHA-256、声明必须/禁止行为、标记
release_blocking旗标,并要求 40 个技能全部有覆盖——改一个字提示词就必须升版本号、重新采集输出; - 评分标准:rubric.md 要求评审者逐条引用输出行号给分(2/1/0),出现任一禁止行为即 FAIL,并给出路由、执行真实性、证据拓扑、授权治理等 9 个跨用例维度;
- 收据机制:build_behavior_eval_receipt.py 对"目标技能+依赖技能"的完整文件树逐一哈希,生成哈希绑定的收据(schema 见 behavior-eval-receipt.schema.json)。任何 harness 或技能文件变动都会使旧收据失效。
⚠️证据边界(新手最容易误读的地方):机器校验器只做结构完整性检查,永远不会把模型输出或自评变成"人工行为 PASS";release_claim_eligible在 schema 中被恒定为false,因为本 harness 无法认证评审者身份与签名。发布级行为结论必须由合格人工裁决者对release_blocking用例完成裁决后,在 harness 之外做出——当前 40 个技能的 behavior receipt 均为NOT_ADJUDICATED,所以没有任何技能标为VALIDATED。🧪
五、能力成熟度:状态标签怎么来的
README 里 CONTRACTED / EXPERIMENTAL / VALIDATED 三个状态不是人工拍脑袋,而是由机器事实源 capability-maturity-registry.json 按独立状态轴推导,规则固化在 capability-maturity-and-release-governance.md。升级VALIDATED需要同时闭合六道证据(专属可执行门、合格人工行为裁决、来源时效核验、发布制品哈希身份等),任一缺失即降级——静态PASS、字符串命中或模型自评都不算数。
六、新手上手清单
- ✅ 只复制白名单内容安装技能,完整步骤见 install.md;不要把外层仓库目录当成单个技能;
- ✅ 发布/打包前跑一次
validate_release_boundary.ps1,看输出是PASS还是FAIL及具体原因; - ✅ 遇到 FAIL 先读错误前缀定位门禁(
Missing required release path/Gate failed: ...),再对照 RELEASE.md 的"明确排除项"清理开发产物; - ✅ 想理解某条规则为何存在,直接读对应校验脚本,如白名单逻辑在 test_release_boundary_allowlist.py 中有对应的失败路径用例。
一句话总结:release-allowlist 决定"发什么",校验脚本决定"发得干不干净",behavior-evals 决定"敢不敢为行为下结论"——三者叠加,才构成 radiology-skills 可信的发布治理闭环。📦
【免费下载链接】radiology-skills项目地址: https://gitcode.com/gh_mirrors/ra/radiology-skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考