dsh-doublecheck

September 3, 2026 · View on GitHub

dsh-doublecheck

  • 1024 商店渠道:先 npm i -g dsh1024,再 dsh1024 plugin --profile web add dsh-doublecheck(计入 deepseek1024.com 安装排行)。

DeepSeek Harness 的交付质量门禁:先拷问需求,再测试实现,最后证明交付——并用「可交付 / 需要返工」的裁决来把关交接。

需求在第一次改动之前就被拷问清楚;交付是被证明的,而不是被口头宣称的。

License DSH plugin Node CI Version npm version npm downloads

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


兼容性

方面状态
HarnessDeepSeek Harness 0.1.2-alpha.5
Node^22.19.0 || >=24.0.0
平台全部(纯宿主;无原生代码,自身无直接网络请求)
模型任意(守卫本身从不调用模型;评审与批评阶段作为宿主 subagent 运行)

你会得到什么

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

  1. doublecheck-grill —— 需求熔炉:内置的 grill-requirements 技能,加上面向模型的 doublecheck_skillsdoublecheck_specdoublecheck_report 工具,以及按维度执行的验证工作流。
  2. doublecheck-guard —— 纪律守卫:grill 门禁、红/绿证据门禁、对抗式评审、/doublecheck/gate 命令、doublecheck.gate 设置命名空间,以及四阶段交付门禁。

两者共同执行纪律闭环 —— grill → design → red → green → review → verify

grill ──▶ design ──▶ red ──▶ green ──▶ review ──▶ verify

   └─ 六个需求维度、共识门禁,
      结构化 spec 提交到会话 + 工作区
阶段含义
grill拷问六个需求维度;在达成共识之前拒绝实现。
design通过 doublecheck_spec 提交已确定的 spec。
red在实现改动之前,用一次失败的测试运行来证明差距。
green改动之后一次通过的测试运行闭合闭环。
review一个分叉的对抗式批评者对照 spec 审计交付。
verifydoublecheck_report + 按维度的验证工作流证明交付。

快速开始

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

# 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-grilldoublecheck-guard)随配置文件自动激活。

安装与卸载

  • git 渠道(最新 main):dsh plugin --profile web add "github:PerryLink/dsh-doublecheck#main" —— 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 强度开启、要求门禁覆盖率),在捆绑补丁之上应用随附的覆盖层:dsh --profile web --patch ./node_modules/dsh-doublecheck/strict.patch.yml

配置

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

默认值含义
specFile'doublecheck-spec.md'已提交 spec markdown 的工作区文件(grill 行)。
reportFile'doublecheck-report.md'交付报告的工作区文件(grill 行)。
reportVerifytrue默认运行验证工作流(grill 行)。
verifyProvider'fork'各维度检查器运行的 subagent 提供者(grill 行)。
verifyMode'all'all = 每个维度一个并行检查器;single = 一个合并检查器(grill 行)。
intensity'remind'grill、红/绿和评审门禁的执行强度(remind / warn / block)。
enableByDefaulttrue没有 /doublecheck on|off 记录的会话的主开关。
language'en'注入的提醒/拒绝/评审/门禁文案语言(en / zh)。
guardTools['edit', 'write']两个门禁监视的修改工具名称。
vagueTaskMaxChars200超过此长度的任务绝不会被视为模糊。
remindOncetrue每个提醒每会话最多注入一次(跨重启持久)。
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.grilltrue关闭则禁用 grill 门禁。
modules.tddtrue开启则启用红/绿证据门禁。
modules.adversaryfalse开启则在绿色后启用分叉批评者评审。
adversaryModelnull批评者模型路由;null = 主模型自评。
adversaryProvider'fork'批评者运行的 subagent 提供者。
adversaryMaxFindings5注入会话的发现上限(1–20)。
adversaryTools['read', 'glob', 'grep']批评者工具允许列表;请保持只读。
adversaryTimeoutMs120000一次批评者运行的硬性时间预算。
gate.enabledtrue门禁面板与回合边界红色通知的主开关。
gate.planSuggestiontrue在红色报告中附加计划模式复查建议。
gate.reportFile'gate-report.md'门禁报告的工作区文件。
gate.requirements.checklist(六个 spec 维度问题)可插拔的关键问题清单:{ id, question, specDimension, required }
gate.requirements.minConfirmed6必须通过的最少必答问题数(1..必答数量)。
gate.requirements.interrogateTool'ask_user_question'其调用计为询问证据的工具名称。
gate.tests.requirePassingRuntrue最近一次测试运行未通过(或缺失)即为红灯。
gate.tests.allowFailingRuns0最近一次绿色之后允许的失败运行次数,超过则红灯。
gate.tests.requireCoveragefalse开启则要求在测试输出中有覆盖率证据。
gate.tests.minCoveragePct80最低覆盖率百分比(0–100)。
gate.tests.evalReports.enabledfalse开启则把 dsh-eval 报告(dsh-auto-review 的评测引擎)并入测试证据。
gate.tests.evalReports.dir'.eval-reports'存放引擎报告的工作区相对目录。
gate.tests.evalReports.file'report.json'目录内的报告文件名。
gate.tests.evalReports.requiredfalse为 true 时缺失报告即为红灯(否则跳过)。
gate.consistency.*provider: 'fork'model: nulltools: ['read','glob','grep']timeoutMs: 120000maxFindings: 5本地一致性评审者的旋钮(model: null = 主模型)。
gate.review.engine'auto'auto = 存在时使用 dsh-auto-review 的裁决记录,否则使用本地评审者;local = 始终使用本地评审者。
gate.review.provider'fork'本地评审评审者的提供者(其 model/tools/timeoutMs/maxFindingsgate.consistency.* 相同)。

配置错误会在加载时大声失败:无效的正则、空或重复的名称列表、越界阈值、重复的清单 id 都会抛错,而不是悄无声息地什么都不做。strict.patch.yml 是全门禁阻断覆盖层,以 intensity: block 重新声明守卫行,开启所有模块并要求覆盖率。

工具与界面

界面类型说明
doublecheck_skills工具通过技能注册表接口列出并加载包内四个内置技能。
doublecheck_spec工具将拷问得出的六维 spec 提交到会话日志和工作区 markdown 副本。
doublecheck_report工具将纪律证据折叠为交付报告(可选的按维度验证工作流)。
/doublecheck status|report|on|off命令开关、模块、强度、阶段事实、折叠报告,以及持久的开/关覆盖。
/gate status|run|config命令实时清单进度、已确定的可交付/返工报告,以及生效配置。
grill-requirementsred-green-tdddelivery-reviewdelivery-proof技能覆盖全部六个闭环阶段的内置纪律技能。
doublecheck.gate设置命名空间可插拔清单,暴露给支持设置的 UI(expose: trueapplies: restart)。
strict.patch.yml覆盖层一个补丁层内以 block 强度开启每个门禁并启用覆盖率要求。
dsh-doublecheck/invariant伴生行通过宿主 invariants 注册表报告包自有写路径矛盾。

门禁阶段

交付门禁把会话的持久证据聚合为可配置的四阶段清单,并确定一个 可交付 / 需要返工 的裁决。每个阶段只折叠会话日志(重放即状态),因此一次运行在恢复或分叉后会得到相同的结果。

阶段检查证据来源模型成本
需求询问逐项确认的关键问题清单(默认六个 spec 维度问题)已提交的 doublecheck_spec + ask_user_question 调用
测试证据最近运行颜色、绿色后的失败运行、可选覆盖率阈值、可选 dsh-eval 报告会话日志中的 shell 测试运行([exit code: N]、覆盖率百分比);开启 gate.tests.evalReports.enabled 时的 dsh-eval 报告文件
实现一致性差异 ↔ 需求映射:每次改动都必须服务于某个 spec 维度本地分叉评审者(结构化发现、只读工具)一个 subagent
评审结论交付裁决;engine: auto 在存在时消费 dsh-auto-review 的持久裁决记录,否则使用本地评审者autoReview/verdict / autoReview/rejection 事件,或本地分叉评审者一个 subagent(本地)

红灯是失败的检查(缺失 spec、最近运行失败、覆盖率低于下限、未映射的改动、blocker/major 发现)——每一项都附带返工建议。警告与跳过永远不会翻转裁决。门禁将 dsh-auto-review 作为弱依赖集成:review.engine: auto 在存在时折叠其裁决记录,否则降级到本地评审者;gate.tests.evalReports.enabled 把其评测引擎的 dsh-eval 报告(prompt 回归 / 压测 / 公平性套件)并入测试证据,并在报告不存在时如实跳过。门禁从不合成审批请求。

示例报告

/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(与无损 JSON 相同的已定状态,位于 gate-report.md 旁边)。doublecheck-gate CLI 把该文件转成可供 GitHub Actions 使用的机器可读输出:

# JSON(PR 评论 / 状态载荷)
doublecheck-gate --format json --input gate-report.json
# SARIF 2.1.0(code-scanning 上传 / 状态检查)
doublecheck-gate --format sarif < gate-report.json

CLI 只序列化已定的 GateState —— 它从不重新运行四阶段门禁或证据折叠。其退出码映射裁决:0 = 可交付,1 = 返工,2 = 用法/解析错误。

权限与数据

  • 读取:仅进程内读取会话日志(tool/call / tool/result / tool/code-dispatch、注入的 user/message 来源,以及外部的 autoReview/* 裁决记录);可选的计划模式服务状态。
  • 写入:会话工作区中的 doublecheck-spec.mddoublecheck-report.mdgate-report.md(路径可配置),通过 ctx.fs 接口;持久的 doublecheck/statedoublecheck/gate 会话事件。
  • 模型调用:门禁的一致性阶段和本地评审阶段(每次 /gate run 各一个 subagent)、可选的对抗式评审,以及 doublecheck_report 验证工作流会启动 subagent 运行;除此之外不调用模型或网络。
  • 绝不触碰:凭据、环境变量,或会话工作区之外的任何文件。workshop 清单只声明 filesystem:readfilesystem:write。门禁报告只携带计数、id 和裁决;评审文本中被识别的机密在存储或显示之前会被脱敏。

安全边界

  • 模型可见 ⟺ 已记录。 每条注入的提醒、评审和门禁通知都经由标准通道并落入会话日志;持久的 spec/state/gate 事实经由工具结果或 SessionEventMap 成员。
  • 失败关闭 / 大声失败。 守卫和门禁配置在 apply 中校验(断言抛错);无法运行的评审者或对抗式接口会退化为诚实的 "unavailable"/跳过通知,而非伪造裁决。
  • 审计安全报告。 门禁和交付报告只记录计数、id 和裁决——不含文件内容或会话文本——模型生成的发现文本在存储或显示之前会经过机密脱敏器。
  • 自身无网络。 该插件不发起直接网络请求;批评者和评审者 subagent 经由宿主的 subagent 接口运行。
  • 对 dsh-auto-review 的弱依赖。 它从不被 import 或硬性要求;门禁折叠其持久裁决记录并降级到本地评审者,且从不合成审批请求。

已知限制

  • 持久写入。 /doublecheck on\|offdoublecheck/state/gate rundoublecheck/gate 需要宿主的 ignorable 追加接口(rc.6 之后至 0.1.1-rc.2)。在无此接口的宿主上(rc.6/rc.8,以及移除该信封的 0.1.2-alpha.1——0.1.2-alpha.5 仅恢复存量日志读取兼容字段、仍无法盖章),写入被跳过、开关保持进程内状态。 0.1.2-alpha.5(2026-09-02 已适配):会话信封保留 ignorable 字段但仅用于存量日志读取兼容——Session.append 仍无法盖章,门控行为不变。
  • 可选接口。 doublecheck.gate 设置命名空间仅在挂载设置服务时注册;/gate status 的计划模式行读取可选的 ctx.planMode(没有则显示 unknown);对抗式评审需要 ctx.subagents;验证需要 workflowEngine
  • 本地降级。 当 dsh-auto-review 缺失或本会话没有裁决记录时,gate.review.engine: auto 会降级到本地评审者——报告会写明原因,而不是捏造裁决。
  • dsh-eval 证据基于文件。 dsh-auto-review 评测引擎(dsh-eval)把其 prompt 回归 / 压测 / 公平性结果写入工作区报告文件,而非会话日志。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-plugin, deepseek-harness, engineering-discipline, requirements, guard, skill, quality-gate, delivery-gate

贡献者

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

这是 PerryLink 维护的 33 个 DeepSeek Harness 插件 之一。如果它能帮到你,其他的也会:

PluginOne-liner
dsh-dsh-auto-review审批链上的第二模型自动审查,默认失败关闭
dsh-dsh-background-agents带 Web UI 侧栏、消息与中断的持久后台子代理
dsh-dsh-budgetDeepSeek Harness 的成本治理:预算、碳排与延迟一屏呈现。
dsh-dsh-checkpoint-rewindClaude Code /rewind 等价:快照、会话 fork、一次性恢复
dsh-dsh-claude-move把 Claude Code 会话、记忆、技能与 CLAUDE.md 迁入 DSH
dsh-dsh-click跨平台原生桌面控制(DeepSeek Harness),Windows 优先。
dsh-dsh-composer-historyWeb 输入框的终端式历史:方向键、Ctrl+R 搜索
dsh-dsh-data-quality数据集质量检查与引文核查(本插件可选消费的数字核查桥)
dsh-dsh-defendDeepSeek Harness 的提示注入、越狱与密钥泄露防护。
dsh-dsh-drawDeepSeek Harness 的统一静态图像生成路由。
dsh-dsh-fastDeepSeek Harness 只读性能诊断。
dsh-dsh-fund-research面向中国公募基金的确定性研究报告
dsh-dsh-github面向 DSH 的 GitHub PR/issues 集成,每次写入经审批门控
dsh-dsh-industry-research行业研究编排,经本插件的 ctx.researchReport.assemble 封存交付物
dsh-dsh-libraryDeepSeek Harness 的本地文档知识库。
dsh-dsh-local-aiDeepSeek Harness 的本地模型(Ollama)接入。
dsh-dsh-lsp-actions通过语言服务器的 LSP 诊断、格式化、补全、代码操作与重命名
dsh-dsh-maskPII 脱敏中间件:模型边界匿名化、展示层还原
dsh-dsh-mcp-panel只读 MCP 运行时面板:/mcp 命令 + 带状态、工具与错误的 Settings 标签页
dsh-dsh-memento审批门控的跨会话记忆:ctx.memory 接缝 + SQLite + 记忆工具
dsh-dsh-observeDeepSeek Harness 的 OpenTelemetry 与 Langfuse 可观测导出器。
dsh-dsh-output-stylesClaude Code outputStyles 等价的运行时风格切换
dsh-dsh-permission-rulesClaude Code 风格声明式 allow/deny/ask 权限规则,带审计
dsh-dsh-plugin-guide作为按需代理技能的插件开发知识库
dsh-dsh-research-report可验证研究报告引擎:内容寻址证据账本与封存版本
dsh-dsh-scoreDeepSeek Harness 插件的多维质量评分。
dsh-dsh-session-pin在 Web 侧栏置顶会话,带持久排序
dsh-dsh-session-syncDeepSeek Harness 的跨设备会话同步——会话存储的专用 git 镜像。
dsh-dsh-skill-pack-security安全审计技能包:密钥扫描、依赖与供应链审查
dsh-dsh-talkDeepSeek Harness 的语音优先会话闭环:对它说,听它答。
dsh-dsh-test-driveDeepSeek Harness 插件的隔离试装冒烟。
dsh-dsh-translateDeepSeek Harness 的厂商参数翻译与确定性 JSON 修复。

从 DSH Desktop 市场安装

所有 PerryLink 插件均可在 DSH Desktop 内置市场中浏览:市场 → 来源 → 添加来源 → 粘贴 https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → 选中。安装仍需通过市场的 npm 身份校验与你的确认。

许可证

Apache License 2.0 © 2026 dsh-doublecheck contributors