Repository navigation
Releases: 7starsseeker/dsh-fact-check
Releases · 7starsseeker/dsh-fact-check
Release list
v1.5.0 — 利益相关与污染面(标注制 · 不降权 · 双轨)
新增
- 「利益相关与污染面」:标注制、不降权、双轨呈现。 此前来源分级表只有一条轴(来源类型),并把"一手"隐含当成"可信"。真实缺口是 provenance(这条说法的源头在哪) 与 incentive(说它的人会不会因为"它为真"而获益) 是两个不同问题,原表只问了前者。新节不判定来源是否存在利益关联、是否被投毒,只做三件事:① 按 L1 客观可查 / L2 可推断 / L3 不可判定 三层标注;② 拆开同一来源的两个角色——角色 A「它确实说过」(事实级,发布行为可单独判已证实)与角色 B「所以说的是真的」(受关联与污染影响的那一半);③ 给出**甲轨(标注不参与定档,正式结论)与乙轨(剔除标注源后重算)**两套固定口径,差额交给读者裁定。
- 报告模板新增「利益相关与污染面」一节,并在「一句话结论」里加一行乙轨档位;标注表为空时只写一行「两轨一致」,成本随证据量伸缩。
- 污染面只声明攻击面,不承诺识别投毒:给出首发时序 / 引用链形状 / 跨生态痕迹 / 结论冗余度四项结构性检查,明写它们不构成"被投毒"的判定;并承认"一手源本身被投毒"这一类不可解,要求如实写"查不出"。
为什么不写成降权
- 非单调:任何"没有替代源就不降权"式的条件降权,会让新增一条独立佐证反而触发降权。要做到单调就等价于降权无效,二者不可兼得。
- 奖励信息垄断:若"唯一来源"能拿全权重,则"确保别人无法核实"成为拿高置信度的最优策略——正是投毒与宣传想要的性质。
- 全局降档:投毒永远无法排除,把它接进降档条件等价于给全技能统一减一档,判定力归零。
其它
SKILL.mdfrontmatter 与package.json同步到 1.5.0;INSTRUCTIONS.md由make-instructions.mjs重新生成。- 判定逻辑未变:档位仍只由「独立源头数」决定;
tools/三个工具与cases/回归语料本轮未改动。
验证(本提交实测)
node tools/smoke-plugin.mjs→ 27/27 通过,EXIT=0node tools/route.mjs selftest→ 37/37 通过,EXIT=0node tools/jev-verdict.mjs selftest→ 25/25 通过,EXIT=0node tools/route.mjs regress --file cases/route-cases-neutral.json→ 26/26 通过,EXIT=0node tools/doctor.mjs→ EXIT=0(仅缺决策模型密钥与 4 个占位符,属预期)
dsh-fact-check v1.4.0
新增
- 接入 DSH 0.2.1-rc.2 的两项技能注册表能力:
- 候选与定义带
path(SKILL.md的绝对路径,catalog 摘要保留),宿主可据此按文件定位; - provider 监听
SKILL.md,保存后调用control.invalidate(),会话中的技能目录无需重启即刷新(150 ms 去抖;watcher 在control.signalabort 或 context dispose 时关闭;宿主不传control时退回「重启生效」)。
- 候选与定义带
- 这是增量接入而非适配:
@deepseek-ai/dsh-skill的lib/index.js在 0.2.0-rc.2 与 0.2.1-rc.2 之间逐字节一致(差异仅换行与版本元数据),registerProvider的签名没有变,新能力都在既有的control = { signal, invalidate() }里。
兼容性与证据
- 同一份代码在 0.2.0-rc.2(已发布包) 与 0.2.1-rc.2(宿主 asar 里抽出的注册表) 上各 21/21 通过,向前兼容。
snapshot.complete === true、get()返回正文逐字、provider.list()rank 600、两轮「改 SKILL.md → 目录刷新」均实测。- 离线门:
selftest27/27 · 25/25 · 37/37,regress26/26,arms一致率 28/35(代理指标),tarball 35 文件、无本机状态。
安装
dsh plugin add dsh-fact-check