# dsh-approval-chime · 独立验证报告(任务 t3 · verifier) > ⚠️ **rev-7 横幅(t4 文档修复加入)**:本报告是 **rev-1** 的独立验证记录(锁定哈希见 §0、`CHANGELOG.md:5-6`)。 > **入口路径已迁移**:rev-7 起本插件的设置入口是独立的「设置 → 通知提醒」分区(`settings.section`), > 合同与 `文件:行号` 见 `docs/契约调研.md` §K,操作口径见 `README.md` §3 与 `docs/挂载与验收.md` §7; > **本报告 §8 的人工清单描述的是 rev-1 的插件页卡片形态**(「设置 → 可配置插件 / 卡片」), > 其步骤编号与判据已不适用于 rev-7(rev-7 的浏览器侧端到端仍未证实),仅作历史记录保留。 > 本页之后的 rev-4/rev-5/rev-6/rev-7 各轮记录见 `docs/rev4-*.md`、`docs/rev5-*.md`、`docs/rev6-复验.md`、 > `docs/rev7-独立验证.md` 与 `docs/rev7-需求符合性审查.md`。 > 结论(一句话):**t2 的实现通过了本轮全部独立验证** —— dev 自测 3 个 harness 复跑全绿(51+103+20 = 174 项断言),本人另写的 5 个独立探针全绿(52+86+58+57+78 = 331 项断言),未发现实现缺陷;剩下一批只能在「重启 DSH + 浏览器实机」中确认的项已单列(见 §8),未证实项一律未计入通过。 > > 本任务的**独立**含义:探针代码(`verify-independent/`)与本报告作者均为 verifier,**未复用** `verify/_harness.mjs` 的任何断言代码;被测对象只有真实文件 `lib/index.js`、`lib/client.js`、`package.json`、`cordis.patch.yml`。 > 全程**未修改** `dsh-approval-chime/lib/**`、未碰 profile、未安装任何 npm 包、未重启 DSH、未改团队状态文件。 --- ## 0. 取证环境与被测修订 | 项 | 值 | | --- | --- | | 节点 | `node v24.21.0`(`node --version`) | | 工作区 | `` | | DSH 包目录 | `\node_modules\@deepseek-ai\*` | | profile | `$DSH_HOME\profiles\web`(**只读**,本次未改) | | 运行中的 dsh | 与本 npx 安装同源(workspace 插件为 `link:` 挂载) | 被测文件 SHA-256(验证期间未发生变化,验证前后一致): ``` dsh-approval-chime\lib\index.js E5E2008A6857F823C1C39F9FF78E17C01DF3A0DDCE8E7A897FE2DFAD1BF5F980 dsh-approval-chime\lib\client.js 1F3E5B6081EE8DEF6F1EA0D51724F280565B7DCB8697BF088B199A9B1D406966 dsh-approval-chime\package.json 7C633060952F899B9CB872362034DA82F272963DBD2E350347B63C529CCE938E dsh-approval-chime\cordis.patch.yml 2DC7C5B13AC9A121180DB19F5EC563DAAFE26D655766A0A2579C6B1BFF147850 ``` 原始输出全部落盘,本报告的每条结论都能在下列文件里找到原文: ``` dsh-approval-chime/verify-independent/_raw/dev-host-half.txt dsh-approval-chime/verify-independent/_raw/dev-client-half.txt dsh-approval-chime/verify-independent/_raw/dev-waterfall.txt dsh-approval-chime/verify-independent/_raw/ind-probe-1-approval.txt dsh-approval-chime/verify-independent/_raw/ind-probe-2-gain-and-resources.txt dsh-approval-chime/verify-independent/_raw/ind-probe-3-card-and-scope.txt dsh-approval-chime/verify-independent/_raw/ind-probe-4-host-half.txt dsh-approval-chime/verify-independent/_raw/ind-probe-5-contract.txt ``` 执行命令(可原样复现): ```powershell cd '' node --check dsh-approval-chime/lib/index.js # exit 0 node --check dsh-approval-chime/lib/client.js # exit 0 node dsh-approval-chime/verify/host-half.test.mjs # exit 0 node dsh-approval-chime/verify/client-half.test.mjs # exit 0 node dsh-approval-chime/verify/waterfall.test.mjs # exit 0 node dsh-approval-chime/verify-independent/probe-1-approval.mjs node dsh-approval-chime/verify-independent/probe-2-gain-and-resources.mjs node dsh-approval-chime/verify-independent/probe-3-card-and-scope.mjs node dsh-approval-chime/verify-independent/probe-4-host-half.mjs node dsh-approval-chime/verify-independent/probe-5-contract.mjs ``` --- ## 1. captain 修正的落地:哪条 acceptance 被改写,哪条不适用 修正与原文冲突时以修正为准,逐条登记: | 原文表述 | 处置 | 原因(含证据) | | --- | --- | --- | | 「证明 (a) 审批请求经 `waterfall` 链后**内置处理器仍能拿到请求**(构造一个下游 fake 监听,断言它被调用且返回值被透传)」 | **括号内的做法不适用,前半句照测** | 「下游 fake 监听被调用」在真实语义下是**假命题**:内置 ui-approval 正常路径 `return await pending.result`(`dsh-client-ui-approval/lib/client.js:252`,probe-5 A.6c 原文取证),而「不调用 next() 的监听器会切断链条」已用 DSH 真 cordis 复现(probe-1 §2:trace 只有 `builtin-panel`)。断言它会「被调用」等于断言一件不会发生的事。因此改为:**用 DSH 真 cordis 证明内置监听器拿到的是同一个请求对象、返回值原样透传,且本插件在这条链上注册了 0 个监听器**(差分类断言:`apply()` 前后 trace 与 answer 逐字节相同)。 | | 「不要验证 waterfall 中 `next()` 的通行性」 | **遵守** | 探针只做「不介入」的双向断言(静态 + 运行时 + 差分),不含任何 `next()` 通行性测试。 | | 「卡片是自绘的,按 settingsScope 写路径与 range 滑块的实际接线验证」 | **遵守** | probe-3 只验证 `settings.plugin.item` 的 key/写路径/滑块接线,不要求官方 `CardForm` 形态。 | | 「schemastery junction 必须实测,原始输出进报告」 | **遵守** | 见 §2.3 与 §5。 | 补充说明:`verify/waterfall.test.mjs`(dev 自测)里确有 `prepend 优先 / 注册序 / 不 next 切断` 的真 cordis 实验,那是在**证明「旧方案不可行」**,不是在给本插件的行为背书;本人复跑通过(20/20),并在 probe-1 §2 用**自己写的**同语义实验重复得到同一结论。 --- ## 2. 逐条 acceptance 结果 ### 2.1 acceptance #1 —— 独立复跑 dev 三个 harness ✅ passed 命令与输出(原文摘录,完整见 `_raw/dev-*.txt`): ``` > node dsh-approval-chime/verify/host-half.test.mjs === host-half.test.mjs: 51/51 checks passed === exit 0 > node dsh-approval-chime/verify/client-half.test.mjs === client-half.test.mjs: 103/103 checks passed === exit 0 > node dsh-approval-chime/verify/waterfall.test.mjs === waterfall.test.mjs: 20/20 checks passed === exit 0 ``` **没有失败项,因此没有「最小复现」需要给。** 三个 harness 的结果我按「证据强度」而非「是否通过」做了复核,指出两处需要注意的口径(不构成失败): * `waterfall.test.mjs` 里 `$on`/事件名/`.on(` 的静态断言是**文本级**的,我另做了「剥离注释后的代码级」版本(probe-1 §1),结论一致:代码级 0 命中,唯一 `next(` 出现在解释性注释第 24 行。 * `client-half.test.mjs` 用自家 `_harness.mjs` 的 React/音频 stub;我用**自己写的** stub 复现了同样的行为面(probe-2/3),因此这些断言不是「自我印证」。 ### 2.2 acceptance #2 —— 自写独立探针 ✅ passed(含一处按 captain 修正改写) 探针位置:`dsh-approval-chime/verify-independent/`,kit 为 `verify-independent/kit/platform.mjs`(自写 vm 经典脚本装载器、自写 React 钩子运行时、自写 WebAudio 记录器、自写 fake ctx、自写 reporter),**不 import `verify/` 任何文件**。 | 子项 | 探针 | 结果与原始证据 | | --- | --- | --- | | (a) 内置处理器仍能拿到请求 | probe-1 §2/§3 | 真 cordis:`the first listener receives the exact request object (identity) — same object: true`;`its answer is returned unchanged — {"decision":"allow-once"}`;差分:`zero remote-event subscriptions were created — 0`、`the answer is byte-identical to the pre-apply run`、`the execution trace is identical to the pre-apply run — ["builtin-panel"]` | | (b) 增益语义 volume=0/50/100、enabled=false、各音色 | probe-2 §a/§b | `volume 100: master gain = value/100 × 0.6 — 0.6`;`volume 50 — 0.3`;`volume 70 — 0.42`;`volume 0: no AudioContext instance is created — 0`;`enabled false: no AudioContext instance is created — 0`;`chime/bell/beep` 波表分别为 `sine/triangle/square`,且三种音色下音量→增益一致 | | (c) 卡片 key 与 DSH namespace 完全一致 | probe-3 §a | 四路一致:DSH `register` 实参 `approval-chime` == 浏览器 `settingsScope.bind({namespace})` 实参 == `slots.register` 的 `key` == `diagnostics.namespace`;`the card key IS the Host settings namespace` | | (d) 全程无外部资源请求 | probe-2 §d | 运行时:`no outbound-resource trap fired — []`(fetch/XHR/WebSocket/Audio/Image/Worker 全部设陷阱)、`the only DOM element created is the