dsh-fact-check 1.5.2 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,19 @@
3
3
  面向使用者的**版本间净变化**(修复 / 改进 / 新增)。只写最终结果,不写过程。
4
4
  判据、阈值、触发词的任何改动都必须同时更新 `MEASUREMENTS.md` 的数字与 `cases/` 的回归结果。
5
5
 
6
+ ## 1.5.3 — 2026-11-09
7
+
8
+ **新增**
9
+
10
+ - **Step 5「交付前回检(措辞与断言)」**:报告最容易在措辞层被放大——一旦被断章引用,错的不是结论,是读者以为的事实。工作流程末尾新增一步,交付前逐条过 8 项:① 单位没被偷换(条数 ≠ 人数、账号 ≠ 人、场次 ≠ 观众、人次 ≠ 人,凡给"多少人 / 多少参与方"先数**去重后**的主体标识);② 量词配得上对象(人用「位 / 个 / 名」,不用「条 / 只 / 头」);③ 覆盖面写清分母与口径;④ 百分比写清基准;⑤ 比较类数字标混杂因素;⑥ 未核实处显式标注;⑦ 一句话结论 / 标题 / 摘要单独再查一遍;⑧ 修辞不得改变事实。判据:任一条过不了就改数字或加限定词——不许把不确定写成确定。
11
+
12
+ **其它**
13
+
14
+ - `FOR-AI.md` 两处对 `SKILL.md` 步骤范围的引用同步到 **Step 0–5**:装载自检句(原「按 Step 0–4 走」)与「第 5 步 · 使用规范」里的流程链(补上「交付前回检措辞与断言(Step 5)」)。`FOR-AI.md` 自身第 0–4 步的任务书编号不受影响。
15
+ - `SKILL.md` frontmatter 与 `package.json` 版本号同步到 **1.5.3**;`INSTRUCTIONS.md` 由 `tools/make-instructions.mjs` 重新生成(正文未变,产物与改前逐字一致)。
16
+ - **判据层未动**:`tools/jev-verdict.mjs`、`engine-routes.json`、`tools/route.mjs` 的触发词与域路由表、`lib/`、`cases/` 本轮无改动,因此 `MEASUREMENTS.md` 的数字与回归结果不适用。
17
+ - 验收:`smoke-plugin 27/27`、`route selftest 44/44`、`jev-verdict selftest 25/25`、`regress 30/30` 全部通过。
18
+
6
19
  ## 1.5.2 — 2026-11-05
7
20
 
8
21
  **修复**
package/FOR-AI.md CHANGED
@@ -102,13 +102,13 @@ node tools/jev-verdict.mjs regress --file cases/injection-cases-neutral.json --c
102
102
 
103
103
  **同时必须做的一件事**:把 `SKILL.md` 开头那张「能力 → 常见实现」表里的**右列换成你环境里真实可调用的工具名**。左列(能力名)是规范,右列是本地绑定——**只改右列**,正文一个字都不要动。
104
104
 
105
- 装载完用一句话自检:"面对'核实 X 是否属实',我会按 SKILL.md 的 Step 0–4 走。"
105
+ 装载完用一句话自检:"面对'核实 X 是否属实',我会按 SKILL.md 的 Step 0–5 走。"
106
106
 
107
107
  ---
108
108
 
109
109
  ## 第 5 步 · 使用规范(每次核查都遵守)
110
110
 
111
- **流程**:拆事实点(Step 0)→ 并行搜索、中英+质疑词(Step 1)→ 抓一手原文(Step 2)→ 交叉比对与来源分级(Step 3)→ 出报告(Step 4)。细节在 `SKILL.md`,别跳过。
111
+ **流程**:拆事实点(Step 0)→ 并行搜索、中英+质疑词(Step 1)→ 抓一手原文(Step 2)→ 交叉比对与来源分级(Step 3)→ 出报告(Step 4)→ 交付前回检措辞与断言(Step 5)。细节在 `SKILL.md`,别跳过。
112
112
 
113
113
  **两个工具怎么用**:
114
114
 
package/INSTRUCTIONS.md CHANGED
@@ -173,6 +173,25 @@
173
173
 
174
174
  ---
175
175
 
176
+ ### Step 5 交付前回检(措辞与断言)
177
+
178
+ **写完报告不等于可以交。** 这一步查的不是"证据够不够"(那是 Step 3),而是**写出来的每个字是否还等于证据**。报告最容易在措辞层被放大——一旦被断章引用,错的不是结论,是读者以为的事实。
179
+
180
+ 逐条过:
181
+
182
+ 1. **单位没被偷换**:条数 ≠ 人数、账号 ≠ 人、场次 ≠ 观众、人次 ≠ 人。凡给出"多少人 / 多少参与方",先数**去重后**的主体标识。
183
+ 2. **量词配得上对象**:人用「位 / 个 / 名」,不用「条 / 只 / 头」。
184
+ 3. **覆盖面写清分母与口径**:「X% 没有某待遇」要指明哪一类人、什么统计范围。「没有带薪年假」不等于「一天带薪假都没有」(可能仍有带薪节假日)。
185
+ 4. **百分比写清基准**:「增长 / 超出 X%」必须说明相对哪个基数;换个基数,结论可能差一倍。
186
+ 5. **比较类数字标混杂因素**:自动标注、篇幅差异、样本选择造成的偏差写在括号里,否则加「约」。
187
+ 6. **未核实处显式标注**:写进「本次未能核实到的」,或就地加「(未验证)」;不用「据说 / 普遍认为」糊过去。
188
+ 7. **一句话结论、标题、摘要单独再查一遍**:它们被引用的概率最高、被读的字最少,也最容易被写成"更响亮但不准确"的地方。改完回头与 Step 3 的来源档位对一次。
189
+ 8. **修辞不得改变事实**:为了让判断更锋利而改动词汇,即使每个字都能查证,也已经是错的。
190
+
191
+ > **判据**:任一条过不了,就改数字或加限定词——不许把不确定写成确定。
192
+
193
+ ---
194
+
176
195
  ## 利益相关与污染面(标注制、不降权、双轨呈现)
177
196
 
178
197
  **本节只标注,不降权。** 一个来源是否存在利益关联、是否处在大规模投毒污染的信息链上,**本技能不做判定**;它只把能拿出来看的东西标出来,并给出两套固定口径下的结论,由读报告的人自己裁定。
package/README.md CHANGED
@@ -68,7 +68,7 @@ are kept in their own sections — *unverified* and *undecidable* never sit in t
68
68
  The skill body is not bound to any host, product or tool chain: it names *capabilities*, and
69
69
  [`ADAPTING.md`](./ADAPTING.md) maps them onto your environment.
70
70
 
71
- **Verified hosts: DSH 0.1.7-rc.2, 0.2.0-rc.2, 0.2.1-rc.2, 0.2.1-rc.3 and 0.2.1-rc.5.** DSH 0.1.7-rc.2 was checked end to end on 2026-09-25 (Node 24.21.0, WSL/Linux): the host discovers the skill
71
+ **Verified hosts: DSH 0.1.7-rc.2, 0.2.0-rc.2, 0.2.1-rc.2, 0.2.1-rc.3, 0.2.1-rc.5 and 0.2.2-rc.1.** DSH 0.1.7-rc.2 was checked end to end on 2026-09-25 (Node 24.21.0, WSL/Linux): the host discovers the skill
72
72
  and loads its body; the plugin form mounts on the host's own skill registry with `source: bundled`, its
73
73
  description read from `SKILL.md` and `get()` returning that body verbatim; `npm run selftest` passes
74
74
  (plugin mount 27/27, `jev-verdict` 25/25, `route` 37/37); `route.mjs regress` is 26/26 offline; and the
@@ -89,6 +89,8 @@ forbidden.
89
89
 
90
90
  One host behaviour added in this release decides whether *any* plugin loads, so it is recorded here. `@deepseek-ai/dsh-app-boot` gained a plugin↔runtime compatibility gate: a plugin that declares `engines.dsh` must satisfy it; a plugin that declares no `engines.dsh` but *does* declare `peerDependencies` must satisfy every `@deepseek-ai/dsh` / `@deepseek-ai/dsh-*` peer; **a plugin with neither passes unconditionally**. Incompatible profile bundles are skipped without printing anything, and incompatible `cordis.patch.yml` rows are set `disabled`. This package declares only `engines.node` and no `peerDependencies`, so the gate cannot deny it on any runtime — a second reason, after the plugin-market one above, to keep the manifest free of host versions.
91
91
 
92
+ **DSH 0.2.2-rc.1 was checked on 2026-11-06** (Node 26.13.0, Windows; the shipped `app.asar`'s `@deepseek-ai/dsh-desktop` and `@deepseek-ai/dsh-desktop-runtime` both declare `0.2.2-rc.1`, and `dsh --version` reports the same). This round is **behavioural evidence rather than a line-by-line diff**: the host was updated in place, so the 0.2.1-rc.5 counterpart of each package no longer exists on disk to diff against. What the shipped build still declares was checked directly: `@deepseek-ai/dsh-skill`'s `lib/index.js` still has `const BUNDLED_SKILL_RANK = 600;` (line 23) and still hands `registerProvider()` the same `control` (`{ signal, invalidate }`), whose `invalidate()` consults `active.layer.providers.get(active.name)?.provider === provider` before invalidating the catalogue; the export list at line 566 is unchanged. On the running host the plugin is installed as `link:T:/fact-check-skill`; the plugin market reports its activation as `live` ("已热加载(bundle patch)") with an empty `diagnostics.findings`, and the session's own skill catalogue lists `fact-check` with this repository's `SKILL.md` description — the only possible source, since neither `$DSH_HOME/skills` nor the profile's `skills/` directory contains a `fact-check` copy. The bundled suite re-ran green on this host: `smoke-plugin` 27/27, `jev-verdict selftest` 25/25, `route selftest` 44/44. Not covered this round: the edit→`control.invalidate()` watcher (it requires touching `SKILL.md` in the live repository), and the registry's `validateCandidate` / `toSummary` internals, which were not re-read against a previous build.
93
+
92
94
  ## Install
93
95
 
94
96
  ### As a DSH plugin
package/README.zh-CN.md CHANGED
@@ -62,7 +62,7 @@
62
62
  技能正文不绑定任何产品、主机或工具链:它只写**能力名**,由 [`ADAPTING.md`](./ADAPTING.md) 把能力
63
63
  落到你的环境里。
64
64
 
65
- **已验证宿主:DSH 0.1.7-rc.2、0.2.0-rc.2、0.2.1-rc.2、0.2.1-rc.3 与 0.2.1-rc.5。** 0.1.7-rc.2 于 2026-09-25 完整跑过一遍(Node 24.21.0,WSL/Linux):宿主能发现本技能并读入正文;
65
+ **已验证宿主:DSH 0.1.7-rc.2、0.2.0-rc.2、0.2.1-rc.2、0.2.1-rc.3、0.2.1-rc.5 与 0.2.2-rc.1。** 0.1.7-rc.2 于 2026-09-25 完整跑过一遍(Node 24.21.0,WSL/Linux):宿主能发现本技能并读入正文;
66
66
  插件形态能挂到宿主自己的技能注册表上,`source: bundled`,描述取自 `SKILL.md`,`get()` 交出的正文
67
67
  与 `SKILL.md` 逐字一致;`npm run selftest` 全过(插件挂载 27/27、`jev-verdict` 25/25、`route` 37/37);
68
68
  `route.mjs regress` 离线 26/26;判据语料复现 [`MEASUREMENTS.md`](./MEASUREMENTS.md) §6 的预期 ——
@@ -81,6 +81,8 @@
81
81
 
82
82
  这一版新增的一条宿主行为决定**任何**插件能不能加载,所以记在这里。`@deepseek-ai/dsh-app-boot` 加了插件↔运行时兼容门禁:声明了 `engines.dsh` 的插件必须满足它;没有 `engines.dsh` 但**有** `peerDependencies` 的插件,其中凡是 `@deepseek-ai/dsh` / `@deepseek-ai/dsh-*` 的 peer 都必须满足;**两者都没有的插件无条件通过**。不兼容的 profile bundle 会被静默跳过、不打印任何东西,不兼容的 `cordis.patch.yml` 行会被置 `disabled`。本包只声明 `engines.node`、没有 `peerDependencies`,所以门禁在任何运行时上都无法拒载它 —— 这是除上面那条插件市场理由之外,又一条把 manifest 保持为「不声明宿主版本」的理由。
83
83
 
84
+ **DSH 0.2.2-rc.1 于 2026-11-06 完整跑过一遍**(Node 26.13.0,Windows;宿主版本以随宿主发布的 `app.asar` 里 `@deepseek-ai/dsh-desktop` / `@deepseek-ai/dsh-desktop-runtime` 声明的为准,`dsh --version` 报的也是同一个 `0.2.2-rc.1`)。这一轮以**运行时证据为主,而非逐行 diff**:宿主是原地升级,磁盘上已没有 0.2.1-rc.5 的对应文件可作对照。仍直接核对了随宿主发布的构建里留下的契约:`@deepseek-ai/dsh-skill` 的 `lib/index.js` 第 23 行仍是 `const BUNDLED_SKILL_RANK = 600;`;`registerProvider()` 交出的 `control` 仍是 `{ signal, invalidate }`,`invalidate()` 仍先确认 `active.layer.providers.get(active.name)?.provider === provider` 再刷新目录;第 566 行的导出清单不变。运行中的宿主上,插件以 `link:T:/fact-check-skill` 挂载;插件市场把它的激活状态报成 `live`(「已热加载(bundle patch)」),`diagnostics.findings` 为空;会话自己的技能目录列出了 `fact-check`、描述与本仓 `SKILL.md` 一致 —— 而且 `$DSH_HOME/skills` 与 profile 的 `skills/` 下都没有 fact-check 副本,所以它只能来自插件。仓库自带套件在该宿主上复跑全绿:`smoke-plugin` 27/27、`jev-verdict selftest` 25/25、`route selftest` 44/44。这一轮**没有**覆盖:改 `SKILL.md` → `control.invalidate()` 的热刷新(需要在真实仓库里改文件才能验),以及 `validateCandidate` / `toSummary` 的内部行为(没有旧构建可逐行对照)。
85
+
84
86
  ## 安装
85
87
 
86
88
  ### 作为 DSH 插件
package/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fact-check
3
- version: 1.5.2
3
+ version: 1.5.3
4
4
  description: 事实核查与资料搜索。当用户要求核实事实/传闻/新闻/数据/情况的真伪、查证信息、确认现状、补充资料时使用——即使用户只说了"查一下""确认一下""核实""这是不是真的""帮我看看",也应触发。核心行为:不依赖自身知识库,所有关键信息一律通过互联网搜索获取,搜索途径与信息来源尽量多样以便交叉核实,并同时覆盖国内与国外信息生态。执行模式按工作量自动选择:轻量核查由主对话直连完成,渠道多或需抓取大量长文时自动分派并行子代理。
5
5
  ---
6
6
 
@@ -174,6 +174,25 @@ description: 事实核查与资料搜索。当用户要求核实事实/传闻/
174
174
 
175
175
  ---
176
176
 
177
+ ### Step 5 交付前回检(措辞与断言)
178
+
179
+ **写完报告不等于可以交。** 这一步查的不是"证据够不够"(那是 Step 3),而是**写出来的每个字是否还等于证据**。报告最容易在措辞层被放大——一旦被断章引用,错的不是结论,是读者以为的事实。
180
+
181
+ 逐条过:
182
+
183
+ 1. **单位没被偷换**:条数 ≠ 人数、账号 ≠ 人、场次 ≠ 观众、人次 ≠ 人。凡给出"多少人 / 多少参与方",先数**去重后**的主体标识。
184
+ 2. **量词配得上对象**:人用「位 / 个 / 名」,不用「条 / 只 / 头」。
185
+ 3. **覆盖面写清分母与口径**:「X% 没有某待遇」要指明哪一类人、什么统计范围。「没有带薪年假」不等于「一天带薪假都没有」(可能仍有带薪节假日)。
186
+ 4. **百分比写清基准**:「增长 / 超出 X%」必须说明相对哪个基数;换个基数,结论可能差一倍。
187
+ 5. **比较类数字标混杂因素**:自动标注、篇幅差异、样本选择造成的偏差写在括号里,否则加「约」。
188
+ 6. **未核实处显式标注**:写进「本次未能核实到的」,或就地加「(未验证)」;不用「据说 / 普遍认为」糊过去。
189
+ 7. **一句话结论、标题、摘要单独再查一遍**:它们被引用的概率最高、被读的字最少,也最容易被写成"更响亮但不准确"的地方。改完回头与 Step 3 的来源档位对一次。
190
+ 8. **修辞不得改变事实**:为了让判断更锋利而改动词汇,即使每个字都能查证,也已经是错的。
191
+
192
+ > **判据**:任一条过不了,就改数字或加限定词——不许把不确定写成确定。
193
+
194
+ ---
195
+
177
196
  ## 利益相关与污染面(标注制、不降权、双轨呈现)
178
197
 
179
198
  **本节只标注,不降权。** 一个来源是否存在利益关联、是否处在大规模投毒污染的信息链上,**本技能不做判定**;它只把能拿出来看的东西标出来,并给出两套固定口径下的结论,由读报告的人自己裁定。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-fact-check",
3
- "version": "1.5.2",
3
+ "version": "1.5.3",
4
4
  "description": "Fact-checking skill for DeepSeek Harness: verifies claims against the open web instead of model memory, cross-checks independent sources across domestic and international search ecosystems, and can route three factual judgements (does the evidence support the claim / is this source primary / does this page carry usable text) to a TypeSafe Jev (System One) decision model when a key is configured, falling back to the skill's deterministic rules when it is not.",
5
5
  "keywords": [
6
6
  "deepseek-harness",