🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

交付双检 PerryLink/dsh-doublecheck

DeepSeek Harnessv0.9.29
PerryLink7 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek Harness 的交付质量闸门:盘问需求、测试实现、证明交付 —— 最后用「可交付 /…

51.7/100
综合分
60
GitHub 星标
1,061
npm 周下载
—/5
用户评分

数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-doublecheck
npm 源 · dsh-doublecheck 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · tool
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-doublecheck @ 0.9.29
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 22:39:17

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 3 处,展示前 3 条)
  • 读取本地文件
    lib/ci.js:54
    const raw = input !== null ? readFileSync(input, 'utf8') : readFileSync(0, 'utf8');
  • 读取本地文件
    lib/grill/provider.js:44
    const entries = await readdir(SKILLS_ROOT, { withFileTypes: true });
  • 读取本地文件
    lib/grill/provider.js:99
    raw = await readFile(file, { encoding: 'utf8', signal });
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-agent@deepseek-ai/dsh-commands@deepseek-ai/dsh-fs@deepseek-ai/dsh-invariants@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-session-projection@deepseek-ai/dsh-settings@deepseek-ai/dsh-skill@deepseek-ai/dsh-subagent
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

2 张 · 点击查看大图

功能亮点

  • 拷问需求
  • 测试实现
  • 验证交付

交付前双重把关:拷问需求、测试实现、验证交付。一套面向 DeepSeek Harness 的工程纪律插件包。

v0.9.292026-10-19
· [0.9.29] - 2026-10-19 · 修复 · 恢复 DSH 0.2.1 上的 CI 类型检查:旧版 subagents.start 回退现在走显式兼容接口,被移除的宿主方法不再让 tsc 报错,同时保留旧宿主回退行为。
v0.9.282026-10-18
· [0.9.28] - 2026-10-18 · 变更 · 把 tsdown/typescript(以及存在时的 @types/react)从运行时依赖移到 devDependencies。Git 安装仍能构建:pnpm 会为 git 依赖安装 devDependencies 并运行 prepare;npm 的 tarball 直接带上构建好的 lib/。运行时依赖树不再包含构建链。
v0.9.272026-10-18
· [0.9.27] - 2026-10-18 · 已修复 · 通用单行投影不再截断手机用户最先看的那两个字段。对象形式的线上值一直超出微信渲染器 120 单位的预算,导致 gateVerdict 和 gateRedCount 被截掉。现在投影只渲染一行有界文本,gate:、stage: 和 r 保持完整,只裁剪目标摘要,并补上了生命周期测试。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-doublecheck - 1024 store channel:先执行一次 npm i -g dsh1024,再执行 dsh1024 plugin --profile web add dsh-doublecheck(计入 deepseek1024.com 的安装排名)。 dshfind DeepSeek Harness 的交付质量闸门:盘问需求、测试实现、证明交付 —— 最后用「可交付 / 返工」的结论把住交接关。 第一次改动之前,需求先被盘问一遍;交付靠证明,不靠声称。 dsh-doctor DSH Market English · 简体中文 · Español · Português · हिन्दी dsh plugin --profile <name> add dsh-doublecheck 📖 生态知识库 —— 实测数据,不是营销话术:插件开发指南 · 插件选型数据 · 维护标准。 安装与卸载 - git 渠道(最新的 main):dsh plugin --profile web add github:PerryLink/dsh-doublecheck —— prepare 脚本只用生产依赖构建。 - npm 渠道(已发布版本):dsh plugin --profile web add dsh-doublecheck。
展开完整文档(README 剩余 1 节)
dsh-doublecheck

- 1024 store channel:先执行一次 npm i -g dsh1024,再执行 dsh1024 plugin --profile web add dsh-doublecheck(计入 deepseek1024.com 的安装排名)。

dshfind

DeepSeek Harness 的交付质量闸门:盘问需求、测试实现、证明交付 —— 最后用「可交付 / 返工」的结论把住交接关。

第一次改动之前,需求先被盘问一遍;交付靠证明,不靠声称。

dsh-doctor
DSH Market

English · 简体中文 · Español · Português · हिन्दी

dsh plugin --profile <name> add dsh-doublecheck

📖 生态知识库 —— 实测数据,不是营销话术:插件开发指南 · 插件选型数据 · 维护标准。

安装与卸载

- git 渠道(最新的 main):dsh plugin --profile web add github:PerryLink/dsh-doublecheck —— prepare 脚本只用生产依赖构建。
- npm 渠道(已发布版本):dsh plugin --profile web add dsh-doublecheck。
- tarball 渠道:在本仓库执行 pnpm pack,再执行 dsh plugin --profile web add ./dsh-doublecheck-<version>.tgz。
- 卸载:dsh plugin --profile web remove dsh-doublecheck(或从配置档补丁中删掉对应行)。

想要零配置的严格模式(所有关卡都设为 block 强度,并要求关卡覆盖),在 bundle 补丁之上叠加随包附带的 overlay:dsh --profile web --patch ./node_modules/dsh-doublecheck/strict.patch.yml。

⭐ 如果它帮到了你

这个插件是 DSH 插件家族的一员(95 个,全部 Apache-2.0)。如果你在用,给个 star —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。

English: part of a 95 plugin family for DeepSeek Harness. If it is useful, a star helps the next person find it — nothing is gated behind it.

dsh-doublecheck 是什么?

DeepSeek Harness 的交付质量关卡:拷问需求,测试实现,证明交付 —— 然后用「可交付 / 返工」的判定把住交接。

第一次编辑之前先盘问需求;交付靠证明,不靠声称。

dsh-doublecheck 的工作流示意图:请求 → 策略 / 评审 → 判定。

工作流概览:请求 → 策略 / 评审 → 判定。下面的示例用的都是真实的命令接口。

兼容性

| 层面 | 状态 |
| Harness | DeepSeek Harness dsh-v0.2.1-rc.2(2026-10-18 验证):engines.dsh >=0.2.1-0 <0.3.0;关卡与投影路径由 rc.2 测试套件覆盖。 |
| Node | ^22.19.0 \|\| >=24.0.0 |
| 平台 | 全部(纯宿主;无原生代码,自身不直接发起网络请求) |
| 模型 | 任意(守卫本身从不调用模型;critic 与 reviewer 阶段以 harness 子代理运行) |

你会得到什么

dsh-doublecheck 安装两行插件,它们从同一份持久会话日志读取并执行:

1. doublecheck-grill —— 需求熔炉:内置 grill-requirements 技能,加上面向模型的 doublecheck_skills、doublecheck_spec、doublecheck_report 工具,以及按维度验证的工作流。
2. doublecheck-guard —— 纪律守卫:grill 关卡、红/绿证据关卡、对手评审、/doublecheck 与 /gate 命令、实时 gate 设置卡片,以及四阶段交付关卡。

两者合力执行纪律循环 —— grill → design → red → green → review → verify:

grill ──▶ design ──▶ red ──▶ green ──▶ review ──▶ verify
│
└─ six requirement dimensions, consensus gate,
structured spec committed to the session + workspace

| 阶段 | 含义 |
| grill | 盘问六个需求维度;达成共识前拒绝实现。 |
| design | 定稿的规格通过 doublecheck_spec 提交。 |
| red | 一次失败的测试运行,在动手改实现之前证明缺口存在。 |
| green | 改动之后一次通过的测试运行,闭合循环。 |
| review | 分叉出的对手 critic 对照规格审计交付。 |
| verify | doublecheck_report 加上按维度验证的工作流,证明交付。 |

快速开始

dsh plugin --profile web add github:PerryLink/dsh-doublecheck

1. install the bundle into your profile
dsh plugin --profile web add github:PerryLink/dsh-doublecheck

or from npm (published releases)
dsh plugin --profile web add dsh-doublecheck

2. restart and verify the row
dsh --profile web --dump-config | grep -E -A3 'id: doublecheck-(grill|guard)'

两行配置(doublecheck-grill 和 doublecheck-guard)会随配置档自动激活。

示例

下面是插件的真实入口;安装一次,之后按需调用。

详细示例

命令

~~~sh
/gate run

输出

~~~text

Delivery gate report

Verdict: rework required — 2 red item(s) The gate is red. Re-open the work in plan mode to re-check the open items before delivering.

摘自 README.md §Example report (lines 243-251)

失败分支

输入

~~~text
/doublecheck maybe

输出

~~~text
Unknown /doublecheck argument "maybe". Usage: /doublecheck status|report|on|off

摘自 plugins/dsh-doublecheck/src/guard/prose.ts:191-192; plugins/dsh-doublecheck/src/guard/command.ts:156; plugins/dsh-doublecheck/tests/command.spec.ts:201-208

简要示例

- doublecheck_skills
- doublecheck_spec

配置

所有可调项都是 Schemastery 的 Config 字段(可在 cordis.yml 中修改)。按 id 定向的覆盖会替换整行——你需要把用到的每个键都重新写一遍。cordis.patch.yml 在每个键旁都有行内说明;Schema 默认值就是调优默认值的唯一来源。

| 键 | 默认值 | 含义 |
| specFile | 'doublecheck-spec.md' | 提交的 spec markdown 所在的工作区文件(grill 行)。 |
| reportFile | 'doublecheck-report.md' | 交付报告所在的工作区文件(grill 行)。 |
| reportVerify | true | 默认运行验证工作流(grill 行)。 |
| verifyProvider | 'fork' | 各维度检查器所用的子代理服务商(grill 行)。 |
| verifyMode | 'all' | all = 每个维度一个并行检查器;single = 一个合并检查器(grill 行)。 |
| intensity | 'remind' | grill、红/绿和评审门禁的执行强度(remind / warn / block)。 |
| enableByDefault | true | 对没有 /doublecheck on\|off 记录的会话生效的总开关。 |
| language | 'en' | 注入的提醒/拒绝/评审/门禁文案语言(en / zh)。 |
| guardTools | ['edit', 'write'] | 两道门禁都监视的变更类工具名。 |
| vagueTaskMaxChars | 200 | 超过这个长度的任务不再视为含糊任务。 |
| remindOnce | true | 每条提醒在每个会话中最多注入一次(重启后仍然有效)。 |
| testToolNames | ['bash', 'pwsh'] | 能运行测试的 shell 工具名。 |
| testCommandPatterns | (pnpm/npm/yarn/bun test, pytest, go/cargo/make test, node --test, deno test, uv run pytest) | 命令必须匹配这些正则,才算一次测试运行。 |
| testFilePatterns | (测试目录,.test. / .spec.) | 识别测试文件的正则,始终可编辑,不受红灯门禁约束。 |
| modules.grill | true | 关闭后停用 grill 门禁。 |
| modules.tdd | true | 开启后启用红/绿证据门禁。 |
| modules.adversary | false | 开启后在绿灯时启用分叉评审批评者。 |
| adversaryModel | null | 批评者模型路由;null = 主模型自审。 |
| adversaryProvider | 'fork' | 批评者运行所用的子代理服务商。 |
| adversaryMaxFindings | 5 | 注入会话的发现条数上限(1–20)。 |
| adversaryTools | ['read', 'glob', 'grep'] | 批评者工具白名单;保持只读。 |
| adversaryTimeoutMs | 120000 | 单次批评者运行的硬性时间预算。 |
| gate.enabled | true | 门禁面板与轮次边界红灯提示的总开关。 |
| gate.planSuggestion | true | 在红灯报告中追加计划模式复查建议。 |
| gate.reportFile | 'gate-report.md' | 门禁报告的工作区文件。 |
| gate.requirements.checklist | (六个规格维度问题) | 可插拔关键问题清单:{ id, question, specDimension, required }。 |
| gate.requirements.minConfirmed | 6 | 必须通过的最少问题数(1..required 数量)。 |
| gate.requirements.interrogateTool | 'ask_user_question' | 工具名,其调用计为问询证据。 |
| gate.tests.requirePassingRun | true | 最近一次测试运行未通过(或缺失)即红灯。 |
| gate.tests.allowFailingRuns | 0 | 最近一次绿灯之后允许的失败运行次数,超过即红灯。 |
| gate.tests.requireCoverage | false | 开启后要求测试输出中包含覆盖率证据。 |
| gate.tests.minCoveragePct | 80 | 最低覆盖率百分比(0–100)。 |
| gate.tests.evalReports.enabled | false | 开启后将 dsh-eval 报告(dsh-auto-review 的 eval 引擎)并入测试证据。 |
| gate.tests.evalReports.dir | '.eval-reports' | 存放引擎报告的工作区相对目录。 |
| gate.tests.evalReports.file | 'report.json' | 目录内的报告文件名。 |
| gate.tests.evalReports.required | false | 为 true 时报告缺失即红灯(否则跳过)。 |
| gate.consistency. | provider: 'fork'、model: null、tools: ['read','glob','grep']、timeoutMs: 120000、maxFindings: 5 | 本地一致性审查器的各项参数(model: null = 主模型)。 |
| gate.review.engine | 'auto' | auto = 有 dsh-auto-review 判定记录时用记录,否则用本地审查器;local = 始终本地。 |
| gate.review.provider | 'fork' | 本地审查审查器的服务商(其 model/tools/timeoutMs/maxFindings 与 gate.consistency. 一致)。 |

上表中每个 gate. 键都是一个实时字段:守卫行把整个 gate 块标记为 .volatile(),因此它就是该行的可编辑设置卡片(表单命名空间即该行的配置档条目 id)。其余键是普通从配置档补丁读取 composition 配置。这个块在加载时只读一次,所以改动要到下次加载才生效——gate.enabled 决定是否安装轮次边界红色提醒。如果宿主行的 schemastery 早于 .volatile(),这一行仍然会挂载:卡片不出现,块照旧来自配置档补丁。

配置错误会在加载时直接报错:无效正则、空或重复的名称列表、越界阈值、重复的检查清单 id 都会抛错,而不是静默什么都不做。strict.patch.yml 是全部闸门拦截的覆盖层,它把守卫行重述为 intensity: block,所有模块全开,并启用覆盖要求。

工具与界面

| 界面 | 类型 | 说明 |
| doublecheck_skills | 工具 | 通过技能注册表接缝列出并加载包内四个内置技能。 |
| doublecheck_spec | 工具 | 把经过拷问的六维规格提交到会话日志,并写一份工作区 markdown 副本。 |
| doublecheck_report | 工具 | 把纪律证据汇总成交付报告(可选按维度验证工作流)。 |
| /doublecheck status\|report\|on\|off | 命令 | 开关、模块、强度、阶段事实、汇总报告,以及持久化的开关覆盖。 |
| /gate status\|run\|config | 命令 | 实时检查清单进度、已定稿的交付物/返工报告,以及生效配置。 |
| grill-requirements、red-green-tdd、delivery-review、delivery-proof | 技能 | 内置纪律技能,覆盖全部六个循环阶段。 |
| gate | 实时配置字段 | 可插拔检查清单是守卫行唯一的 .volatile() 字段:从该行的设置卡片编辑(命名空间 = 该行的配置档条目 id),加载时只读一次。 |
| strict.patch.yml | 覆盖层 | 一个补丁层里,所有闸门以 block 强度开启,并加上覆盖要求。 |
| dsh-doublecheck/invariant | 伴随行 | 通过宿主 invariants 注册表报告包内自有的写入路径矛盾。 |
| doublecheck | 会话投影 | 客户端渲染的一行有界状态:阶段、最新闸门判定、红灯数、编辑数、规格/审查标记。见读取状态行。 |

读取状态行

doublecheck 会话投影是纯字符串,而且刻意只有一行——重点就是客户端能完整显示,不用截断。聊天桥的 /status、状态栏或任何自定义消费者都原样渲染它:

gate:rework r2 | stage:green | test:green edits:12 spec:yes review:yes | goal:ship parser fix

| 片段 | 含义 |
| gate:<verdict> r<n> | 最新交付闸门判定——任何运行之前是 none,之后是 deliverable 或 rework——以及它的红灯数 r<n>。 |
| stage:<stage> | 基于持久证据到达的纪律阶段:grill、design、red、green、review、verify。 |
| test:<color> | 最近一次测试运行的颜色:none、red、green。 |
| edits:<n> | 从会话日志折算出的实现改动数(写测试文件不计入)。 |
| spec:yes / spec:no | 是否存在已提交的 doublecheck_spec。 |
| review:yes / review:no | 是否存在对抗性审查记录。 |
| goal:<excerpt> | 已提交的 spec 目标,截断显示。仅当 spec:yes 时出现。 |

这一行从构造上就有长度上限,所以任何渲染器都不会截断它:

- 硬性预算:120 个字符。只要渲染器能容纳 120 个字符以内的值——微信桥接的通用投影渲染器就是其中之一——就能显示完整的一行。旧的对象形载荷在空状态下就有 131 个字符,这就是以前判定结果和红灯数会被截掉的原因。
- 前三段无损。红灯数超过 9999、改动数超过 99999 时,分别打印为 9999+ / 99999+,不会无限增长;非有限值或负数打印为 0。
- goal: 是唯一有损的一段。它会被压成一行(换行符和控制字符变成空格,| 变成 /),再按剩余预算截断,最多 40 个字符,被截断时以 … 结尾。完整目标见 /doublecheck status 和交付报告。
- 这只是速览,不是记录本身:/gate status 和 /doublecheck status 会渲染完整状态。

投影的 stateVersion 是 3。提升版本号会丢弃旧版本写入的持久化投影缓存行,并从会话日志重新折算该键,因此升级后的会话会重新计算这一行,而不是显示过期内容。持久化的折算状态本身不变,升级前的会话也绝不会加载失败。

门禁阶段

交付门禁把会话中的持久证据汇总成一份可配置的四阶段清单,并给出一个 可交付 / 需返工 的判定。每个阶段都只折算会话日志(重放即状态),所以恢复或分叉之后重新运行,推导结果完全一致。

| 阶段 | 检查项 | 证据来源 | 模型开销 |
| 需求质询 | 逐项确认关键问题清单(默认是六个 spec 维度的问题) | 已提交的 doublecheck_spec + ask_user_question 调用 | 无 |
| 测试证据 | 最近一次运行的颜色、绿灯之后的失败运行、可选的覆盖率阈值、可选的 dsh-eval 报告 | 会话日志中的 shell 测试运行([exit code: N]、覆盖率百分比);启用 gate.tests.evalReports.enabled 时的 dsh-eval 报告文件 | 无 |
| 实现一致性 | 差异 ↔ 需求映射:每处改动都必须服务于某个 spec 维度 | 本地分叉的审查者(结构化发现,只读工具) | 一个子代理 |
| 审查结论 | 交付判定;engine: auto 在存在 dsh-auto-review 的持久判定记录时消费这些记录,否则用本地审查者 | autoReview/verdict / autoReview/rejection 事件,或本地分叉的审查者 | 一个子代理(本地) |
红灯就是未通过的检查项(缺少规格、最近一次运行失败、覆盖率低于下限、改动没有对应需求、阻断级或严重级问题)——每一项都附带返工建议。警告和跳过项从不改变最终判定。门禁把 dsh-auto-review 作为弱依赖集成进来:review.engine: auto 在存在评审结论记录时将其并入,否则降级为本地评审器;gate.tests.evalReports.enabled 把评估引擎的 dsh-eval 报告(提示词回归 / 压力 / 公平性套件)并入测试证据,没有报告时如实跳过。门禁从不自行生成审批请求。

报告示例

/gate run 返回下面这段 markdown —— 直接粘进 PR 描述即可:

Delivery gate report

Verdict: rework required — 2 red item(s) The gate is red. Re-open the work in plan mode to re-check the open items before delivering.

1. Requirements interrogation — PASS
- [✔] What outcome must the delivery produce? — spec dimension "goal" committed
- [✔] What is in scope, and what is out of scope? — spec dimension "scope" committed
- [✔] Which observable checks prove the work is done? — spec dimension "acceptanceCriteria" committed
- [✔] What can go wrong, and what is the correct behavior in each case? — spec dimension "failureModes" committed
- [✔] What is traded when goals conflict; what is optional? — spec dimension "priorities" committed
- [✔] What does the user explicitly not want? — spec dimension "nonGoals" committed

2. Test evidence — FAIL
- [✔] passing test run — latest test run passed
- [✔] failing cases after green — 0 failing run(s) after green (allowed: 0)
- [✖] coverage evidence — 61% coverage below the 80% minimum — rework: raise coverage above the configured minimum

3. Implementation consistency — WARN
- [⚠] [minor] src/telemetry.ts touched without a requirement — [minor] the edit adds a metric no spec dimension covers

4. Review conclusion — PASS
- [✔] dsh-auto-review conclusion — 3 call(s) approved by dsh-auto-review (latest risk: low)

Red items
1. tests/coverage — 61% coverage below the 80% minimum — rework: raise coverage above the configured minimum*
2. consistency/finding-1 — [minor] the edit adds a metric no spec dimension covers — rework: src/telemetry.ts touched without a requirement

Audit
- review engine: dsh-auto-review
- generated at: 2026-08-14T12:00:00.000Z
- counts, ids, and verdicts only: no file contents or session text are embedded, and recognized secrets are redacted.

CI 输出

/gate run 还会写出一个 gate-report.json(与 gate-report.md 并列,内容是与报告相同的最终状态,以无损 JSON 表示)。doublecheck-gate 命令行把这个文件转成机器可读输出,供 GitHub Actions 使用:

JSON (PR comment / status payload)
doublecheck-gate --format json --input gate-report.json
SARIF 2.1.0 (code-scanning upload / status check)
doublecheck-gate --format sarif < gate-report.json

命令行只序列化已经定稿的 GateState,从不重跑四阶段门禁或证据折叠。退出码对应结论:0 = 可交付,1 = 返工,2 = 用法或解析错误。

权限与数据

- 读取:会话日志(tool/call / tool/result / tool/ptc-dispatch、注入的 user/message 来源,以及外来的 autoReview/* 结论记录),仅在进程内读取;可选的 plan 模式服务状态。在 V3 改名之前的主机上,PTC 子派发携带前身 tool/code-dispatch 标签;两种标签折叠结果一致。注入的通知携带生产者自有的 dsh-doublecheck 消息来源类型;在该类型出现之前记录的日志,会以 plugin:dsh-doublecheck(harness 在已发布的 catch-all 包装器上做的 V3→V4 迁移)或已发布的 plugin 包装器形式到达,三者折叠结果一致。
- 写入:会话工作区内的 doublecheck-spec.md、doublecheck-report.md、gate-report.md 和 gate-report.json(路径可配置),经由 ctx.fs 接缝写入;持久的 doublecheck/state 和 doublecheck/gate 会话事件。
- 模型调用:门禁的一致性与本地评审阶段(每次 /gate run 各一个子代理)、可选的对抗评审,以及 doublecheck_report 验证工作流会启动子代理运行;除此之外不调用模型,也不访问网络。
- 绝不触碰:凭据、环境变量,或会话工作区之外的任何文件。workshop 清单只声明 filesystem:read 和 filesystem:write。门禁报告只携带计数、id 和结论;评审文本中识别出的密钥在存储或展示前会被脱敏。

安全边界

- 模型可见 ⟺ 已记录。 每条注入的提醒、评审和门禁通知都走标准通道,并落入会话日志;持久的 spec/state/gate 事实走工具结果或 SessionEventMap 成员。
- 失败即关闭 / 失败即报错。 守卫与门禁配置在 apply 中校验(断言会抛错);无法运行的评审或对抗接缝会落定为诚实的「不可用」或跳过通知,而不是伪造结论。
- 审计安全的报告。 门禁与交付报告只记录计数、id 和结论——不含文件内容或会话文本——模型产出的发现文本在存储或展示前会经过密钥脱敏器。
- 自身不联网。 插件不发起任何直接网络请求;critic 与评审子代理走 harness 子代理接缝。
- 对 dsh-auto-review 弱依赖。 从不导入,也不硬性要求;门禁折叠其持久结论记录,并降级到本地评审,且从不合成审批请求。

已知限制

- 持久化写入。 /doublecheck on\|off → doublecheck/state 和 /gate run → doublecheck/gate 走宿主提供的 ignorable 追加接口(rc.6 之后到 0.1.1-rc.2)。宿主没有这个接口时(rc.6/rc.8,以及 0.1.2-alpha.1——它移除了信封;0.1.2-rc.1 只为存储日志的读取兼容恢复了该字段,仍然无法写入它),写入会被跳过,开关只留在进程内。
0.1.2-rc.1(适配于 2026-09-02):会话信封保留 ignorable 字段,只为存储日志的读取兼容——Session.append 仍然无法写入它,所以审计门行为不变。
0.1.5-alpha.1(适配于 2026-09-09):会话格式 V3 把持久化子分发事件 tool/code-dispatch 改名为 tool/ptc-dispatch(载荷不变;两个标签折叠结果相同)。Session.append 仍然不暴露 ignorable 通道,所以持久化写入继续跳过,开关只留在进程内——行为不变。(此条目引入的 doublecheck-gate 设置命名空间在 0.1.7-alpha.1 中被移除,当时 harness 删掉了命名空间注册表。)
0.1.5-rc.1(适配于 2026-09-10):依赖固定版本移到已发布的 0.1.5-rc.1 线;没有接缝变更影响此插件的行为。
0.1.5-rc.2(适配于 2026-09-11):依赖固定版本移到已发布的 0.1.5-rc.2 线;没有接缝变更影响此插件的行为。
0.1.7-alpha.1(适配于 2026-10-04):harness 删掉了共享的兜底 plugin 消息来源类型(通知现在携带生产者自有的 dsh-doublecheck 类型,remindOnce 折叠仍然读取持久化日志可能保存的两种升级前形态),并用 SettingsForms 替换了设置命名空间注册表(doublecheck-gate 命名空间已不存在;门检查清单现在是守卫行唯一的 .volatile() 字段,仍在加载时读取一次)。@deepseek-ai/cordis 和 @deepseek-ai/schemastery 的开发/测试固定版本移到 ^4.0.3 / ^3.18.3,Volatile 和 .volatile() 最早出现在这两个版本;peer 范围保持 ^4.0.2 / ^3.18.2,live-field 接口在加载时探测,所以较旧的宿主线挂载该行时没有设置卡片。除设置存储位置外,没有行为变化。
- 可选接缝。 设置服务挂载后,守卫行的设置卡片才会出现;卡片就是这一行自己的 Config(命名空间 = 它的配置档条目 id),gate 块在加载时读取一次,所以它的值在下次加载时作用于 /gate 面板和门红通知。live-field 接口在加载时探测,所以在 schemastery 早于 .volatile() 的宿主线上,该行照样挂载——没有卡片,gate 块取自配置档补丁。/gate status 的计划模式行读取可选的 ctx.planMode(没有它时显示 unknown);对抗性审查需要 ctx.subagents;验证需要 workflowEngine。
- 本地降级。 当 dsh-auto-review 不存在,或本次会话没有裁决记录时,gate.review.engine: auto 会降级到本地审查器——报告会写明原因,而不是编造一个裁决。
- dsh-eval 证据基于文件。 dsh-auto-review 的 eval 引擎(dsh-eval)把提示词回归 / 压力 / 公平性结果写入工作区报告文件,而不是会话日志。gate.tests.evalReports.enabled 会折叠该文件(默认关闭;文件不存在时跳过),折叠后的计数会随持久化的 doublecheck/gate 记录一起保存,因此已结算的运行仍可重放。

开发

pnpm install # node ^22.19 || >=24
pnpm run build # tsc --noEmitOnError (lib/ is committed)
pnpm run prepare # tsc --noEmitOnError (git-install channel)
pnpm run prepublishOnly # build + full test suite
pnpm run typecheck # tsc --noEmit + tests tsconfig
pnpm run lint # eslint src tests
pnpm test # vitest run
pnpm run test:coverage # vitest run --coverage
pnpm run pack:check # build + pack the tarball

与其他 DSH 插件的互操作性

已针对 DSH 0.2.0-rc.2(本 README 面向的运行时)以及 2026-10-05 调研的高星插件集验证。

本插件不会干扰其他插件,包括广泛安装的高星插件:

- 无工具名冲突。 每个工具都带命名空间;不注册任何已发布工具或其他插件占用的裸名称。
- 无服务键冲突。 它完全不提供服务键,因此不可能在服务键上冲突。
- 无槽位冲突。 它不注册客户端槽位键,因此不会争抢 shadows-shipped-ui 的席位。
- 无 HTTP 路由冲突。 它不注册 webServer 前缀。
- 无补丁层冲突。 打包补丁只 insert 自己的一行;从不覆盖内置行的 config。
- 无全局改动。 它不改原型、不改写 process.env、不替换全局 fetch 调度器。

共享事件监听器在构造上互不干扰。 它用 ctx.on() 观察对顺序敏感的事件 agent/turn-stopping、tools/post-execute、tools/pre-execute——这是 Cordis 的广播注册方式,每个监听器都会执行,谁也无法饿死别人。这里的每个监听器都通过 next() 委托,因此调用链绝不会被短路,改动施加在 next() 产出的值上,而不是取而代之返回:
- tools/post-execute —— cc-safety-net(1576★)也在用。
- tools/pre-execute —— cc-safety-net(1576★)也在用。

静态证据:dsh-plugin-doctor 的 K10–K13 对本仓库的每项检查都报告 pass。

主题

dsh, dsh-plugin, deepseek-harness, engineering-discipline, requirements, guard, skill, quality-gate, delivery-gate

贡献者

- @PerryLink — 创建者与维护者:grill → design → red → green → review → verify 纪律循环、四阶段交付门禁、五语言文档,以及 CI/发布流水线。

PerryLink DSH 插件家族

本项目属于 PerryLink 的 DeepSeek Harness 插件家族。下方名单默认折叠,让每个 README 的首屏保持简短;展开即可查看每一行及其状态。

展开全部插件

| 插件 | 状态 |
| dsh-aqua-input-check | |
| dsh-archive-check | |
| dsh-auto-review | |

| dsh-autotier | |
| dsh-bid-ca-precheck | |
| dsh-bid-qual-check | |
| dsh-cert-mcp | |
| dsh-checkpoint-rewind | |
| dsh-click | |
| dsh-composer-history | |
| dsh-contract-stance | |
| dsh-customs-doc-check | |
| dsh-data-quality | |
| dsh-demurrage-ledger | |
| dsh-doublecheck | |
| dsh-drill-script-check | |
| dsh-eia-guide-check | |
| dsh-emergency-plan | |
| dsh-essay-rubric-check | |
| dsh-evidence-check | |
| dsh-export-ctl-check | |
| dsh-fast | |
| dsh-fmea-table-check | |
| dsh-forecast-penalty | |
| dsh-fund-research | |
| dsh-github | |
| dsh-gongwen-flow-check | |
| dsh-gongwen-word-check | |
| dsh-guard-plan-qc | |
| dsh-hazchem-check | |
| dsh-hazplan-check | |
| dsh-hidden-risk-map | |
| dsh-hs-classify | |
| dsh-icd-rule-check | |
| dsh-industry-research | |
| dsh-lawcite-adapter | |
| dsh-laya | |
| dsh-lc-doc-check | |
| dsh-learning-gap-check | |
| dsh-library | |
| dsh-local-ai | |
| dsh-lsp-actions | |
| dsh-mask | |
| dsh-mcp-panel | |
| dsh-medrec-qc | |
| dsh-memento | |
| dsh-nsfc-form-check | |
| dsh-nurse-record-check | |
| dsh-observe | |
| dsh-origin-rvc-check | |
| dsh-ota-review-check | |
| dsh-output-styles | |
| dsh-paper-doc-adapter | |
| dsh-permission-rules | |
| dsh-permit-report-check | |
| dsh-pipeline-check | |
| dsh-pleading-draft | |
| dsh-plugin-doctor | |
| dsh-plugin-guide | |
| dsh-plugin-kit | |
| dsh-plugin-upgrade | |
| dsh-policy-brief-draft | |
| dsh-power-loss-split | |
| dsh-power-ticket-check | |
| dsh-ppap-check | |
| dsh-protest-deadline | |
| dsh-railway-window | |
| dsh-repair-order-qc | |
| dsh-research-report | |
| dsh-review-reply-check | |
| dsh-rulefile-check | |
| dsh-safety-brief-check | |
| dsh-score | |
| dsh-session-sync | |
| dsh-site-log-check | |
| dsh-skill-pack-security | |
| dsh-soe-decision-check | |
| dsh-soilwater-check | |
| dsh-sop-sync-check | |
| dsh-spc-gbt-adapter | |
| dsh-talk | |
| dsh-tender-extract | |
| dsh-tender-matrix | |
| dsh-test-drive | |
| dsh-ticktick | |
| dsh-translate | |
| dsh-warranty-calc | |
| dsh-budget | 🧊 FROZEN — see the repo README |
| dsh-claude-move | 🧊 FROZEN — see the repo README |
| dsh-defend | 🧊 FROZEN — see the repo README |
| dsh-draw | 🧊 FROZEN — see the repo README |
| dsh-reach | 🧊 FROZEN — see the repo README |
| dsh-background-agents | 🚫 RETIRED — see the repo README |
| dsh-session-pin | 🚫 RETIRED — see the repo README |
| dsh-team-rooms | 🚫 RETIRED — see the repo README |

License

Apache License 2.0 © 2026 dsh-doublecheck contributors
预览分享卡片长什么样 ↓PerryLink/dsh-doublecheck
分享 · DeepSeek Harness Hub
PerryLink/dsh-doublecheck

DeepSeek Harness 的交付质量闸门:盘问需求、测试实现、证明交付 —— 最后用「可交付 /…

回到顶部