六层管线的实现说明。部署拓扑(节点地址、代理、凭据)不随文档开源;本文只描述与仓内产物对应的机制本身。术语与 overview.md 一致。
候选仓库来自两条互补的路:
- GitHub 搜索路:按星数区间检索,命中过多时递归下钻时间分片(年→月→日→时),饱和分片显式记录,不静默截断。
- npm 交叉路:检索 npm 注册表中
dsh-*命名与dsh-plugin关键词的包,经package.repository字段映射回 GitHub 仓库——这条路覆盖 GitHub 搜索盲区(不发 README、纯包发布)的作者。
两路均有单轮新增上限,防止候选池瞬时打爆测试队列;发现失败不阻塞其他层(fail-open),但会留痕。
两条登记轨并行,渲染层取并集:
- 手工登记轨:
PLUGINS.md单插件表一行即一条登记,人工提交(guard 审查惯例同先例)。 - 快照自动轨:测试引擎产出的判定快照。
登记即可见:表行存在而快照未覆盖的仓库按登记信息补行,标注 [未测];已消亡的登记仓进空仓监测,不剔除。
自托管集群(kind)内按 pod 逐仓库执行,pod 自备源码并源自克隆被测仓库,四层递进、失败短路:
| 层级 | 内容 | 失败归类 |
|---|---|---|
| L0 | 静态检查(manifest、结构) | ❌ fail |
| L1 | 真实安装(dsh plugin add) |
安装类失败归 |
| L2 | 插件加载(dsh plugin list 确认) |
同上 |
| L3 | 对话级实测(本地化模型驱动的行为验证) | 证据落盘当日报告 |
判定语义(自上而下短路):
pass/fail— 终态结论;infra-fail— 环境问题(网络、权限、磁盘),冷却后重试,不计入插件质量;not-published— 归skipped,不占用结论位;inconclusive— 限时重试,超时转终态。
输入哈希(conclusive 语义):input_hash = sha256(canonical_id + head + tree + 主线SHA + RESULT_CONTRACT_REVISION)。任一因子变化即触发重测;全部不变则沿用既有结论。契约版本号升级会触发全量重测——这是判定口径演进的显式机制。
复核四路:输入哈希变化自动重测、inconclusive 限时重试、issue 申诉快捷复测、跨环境交叉复验(证人样本仅供复核,不直接改判)。
同一仓库可能在多条轨道、多种键名(登记轨的仓库名、快照轨的 owner-repo 形态名、改名前旧名)下出现。聚合以 GitHub 仓库全名三源归一合并:
- 真实 URL(最高优先);
data/repo-map.json(canonical_id ↔ 全名映射,含改名 aliases);data/locate-cache.json(定位缓存)。
合并规则:URL 取真实值、星数取实时值、✅/❌ 冲突降 [待定]、nameWithOwner 变化时联动改写链接、同名文本与星数,旧名进 aliases。
死链审计(data/url-audit.json):对全部呈现过的仓库 URL 做存在性审计,gone 判定带 7 天 TTL 防抖;消亡仓库降 [空仓监测] 不再呈现链接。私有 org 仓在认证身份下可见、匿名 404,审计口径判 located 而非 gone。
全部人读产物从快照重建而非增量维护,脚本即源码(见 scripts/):
gen_plugins_all.py— 聚合归一 + PLUGINS-ALL 生成 + 登记表兜底补行;resolve_placeholders.py— 占位键反查、星数回填、批量补齐星缓存;render-readme-from-snapshot.py— 双语 README 与 CHANGELOG 渲染;classify.py— 分类规则引擎(与 CATALOGING.md 声明同源,声明顺序首个命中者胜)。
判定标记语义:✅ 通过 / ❌ 失败 / [待定] 结论冲突 / [未测] 登记未覆盖 / [空仓监测] 仓库消亡。
- 快照推送:机器可读快照(
data/snapshots/)按轮次提交,schema 见 schema/; - 自动渲染:GitHub Actions 在快照推送后重建 README/PLUGINS-ALL/CHANGELOG(产物白名单守卫 + 自动合并);
- 星数日更:每日定时刷新全部呈现星数,捕获改名;
- 双仓分工:本仓(个人镜像)为文档登记轨主阵地,组织仓为自动化轨主阵地;两轨周期性对齐,快照数据同口径。
| 节拍 | 动作 |
|---|---|
| 每轮(分钟级) | 巡检 + 派发测试 + 心跳写盘 |
| 每日 | 星数/改名刷新、链接审计复核、自动渲染兜底 |
| 每轮手动 sync | PLUGINS-ALL 提交更新(区别于自动渲染白名单) |
单例锁保证派发与推送互斥;「提交消息与 diff 文件不符」「渲染无变化」分别作为载荷串写与链路冻结的故障指纹,监控按此设防。