dsh-claimcheck:把「做完了」變成可過期、可機讀的驗收取證

前言

在 DSH(DeepSeek Harness)裏跑 agent,收尾時常見一句「測試都過了」——模型可以這麼說,讀者卻無法確認它是否真的執行過命令、針對的是哪一次工作區狀態。改完 A 又改 B 時,舊的通過結論也可能被靜默沿用。現有做法多停在 system prompt 裏提醒「記得跑測試」,或事後翻日誌,執行權仍在模型轉述層。

dsh-claimcheck 是維護者 Daphne999 發佈的 DSH 工作流類插件:由插件自己跑項目的驗收命令,把退出碼與輸出寫入帶 digest 的 JSON 證據,並把結果釘在當前工作區指紋上;樹一變,證據即過期;若本輪改了文件卻沒有新鮮證據,收尾會被閘門攔下,提示先取證再宣稱完成。社區目錄頁:https://www.skillhub.cn/plugins/Daphne999/dsh-claimcheck;源碼與說明:https://github.com/Daphne999/dsh-claimcheck。

這是什麼

一句話定位:可審計的完成閘門 + 本地證據鏈——不替代測試框架,負責執行、記錄、過期判定與輪次攔截。

插件是零運行時依賴的 Host-only bundle(無 @deepseek-ai/* 導入),許可證 MIT,要求 Node ≥ 22。與生態裏只提醒不攔截的 dsh-dod、不執行測試的 dsh-acceptance、偏回歸評測的 dsh-eval-harness 等不同,claimcheck 強調自己執行、結果綁定工作區、會過期,產物是普通 JSON,可被其他工具消費。

核心功能

執行權與結論三態

  1. command 類檢查通過 DSH 的 shell seam(ctx.shell)真實執行;退出碼、信號、超時、輸出來自真實進程,模型不能僞造 pass。
  2. verdict 只有 pass / fail / incomplete;缺證據永遠是 incomplete,不是 pass。manual 類檢查記爲 unknown,不會自動折算成通過。
  3. 工作區指紋(git HEAD + 工作區狀態,或非 git 時的有界文件掃描)寫入證據;指紋變化後 claim_status 返回 stale。若檢查命令運行期間改動了工作區,本次結論降級爲 incomplete 並說明原因。

四個工具

工具 作用
claim_plan 聲明「什麼算完成」;校驗檢查樣式;拒絕危險命令與越界路徑;最多 12 條
claim_verify 真正執行並寫證據;無計劃時可按項目形狀自動發現測試命令
claim_status 只讀判斷證據是否仍有效(fresh / 過期原因),不執行、不寫盤
claim_report 從最新證據渲染交接用 Markdown,含 digest 與工作區指紋

檢查類型示例(來自 README):

{ "id": "unit", "kind": "command", "title": "單元測試通過", "command": "pnpm run test", "timeoutMs": 180000 }
{ "id": "doc", "kind": "file", "title": "README 更新", "path": "README.md", "contains": "claimcheck" }
{ "id": "ux", "kind": "manual", "title": "交互已人工確認", "requirement": "產品負責人簽字" }

未提供計劃時,claim_verify 可自動發現例如 package.json 的 test / typecheck / lint / build(按鎖文件選包管理器)、pytest、cargo test、go test ./... 等。

證據落盤與完成閘門

證據寫在會話工作區 .dsh/claimcheck/:runs/<runId>.json、latest.json、index.jsonl。schema 爲 dsh-claimcheck/evidence@1,含 artifactDigest(覆蓋除 digest 自身外字段)、每條檢查的輸出摘要、outputTruncated 等,CI 或腳本可直接讀取。

每輪結束時,若本輪產生文件變更(write/edit、刪改移、裝依賴、帶 --write/--fix 的 shell 等)而當前沒有新鮮證據,插件會注入提醒並通過 agent.followup 讓該輪繼續。配置項 mode:warn(默認)、strict、off;maxNudgesPerSession 默認 3;純問答、只讀輪不觸發。

誠實邊界:插件提高僞造成本並讓結果可審計,並非密碼學意義上的不可僞造;人不裝插件仍可跑任意命令,但每份證據指向插件實際執行的那次進程與那棵樹。

安裝與啓用

方式 A · 市場/桌面端:搜索 dsh-claimcheck 安裝(倉庫帶 dsh-plugin topic,由社區索引收錄)。

方式 B · Release 離線包(v0.1.0,帶 sha256):

curl -LO https://github.com/Daphne999/dsh-claimcheck/releases/download/v0.1.0/dsh-claimcheck-0.1.0.tgz
curl -LO https://github.com/Daphne999/dsh-claimcheck/releases/download/v0.1.0/dsh-claimcheck-0.1.0.tgz.sha256
sha256sum -c dsh-claimcheck-0.1.0.tgz.sha256

mkdir -p ~/dsh-plugins/dsh-claimcheck && tar -xzf dsh-claimcheck-0.1.0.tgz -C ~/dsh-plugins/dsh-claimcheck
dsh plugin --profile <profile> add link:"$HOME/dsh-plugins/dsh-claimcheck"

方式 D · 寫進 profile:

// ~/.dsh/profiles/<profile>/package.json
"dependencies": { "dsh-claimcheck": "link:/abs/path/to/dsh-claimcheck" },
"dsh": { "profile": { "bundles": [ /* ... */ "dsh-claimcheck" ] } }

裝完重啓宿主;列表中應出現「Claimcheck 驗收取證」,會話中可用 claim_* 四個工具。

profile 的 cordis.patch.yml 可調整行爲:

- id: dsh-claimcheck
  config:
    mode: warn              # warn | strict | off
    maxNudgesPerSession: 3
    maxOutputBytes: 16384
    evidenceDir: .dsh/claimcheck
    autoDiscover: true
    requireGateAfterWrite: true

典型用法

  1. 用 claim_plan 聲明 required 檢查(或依賴 autoDiscover 讓 claim_verify 發現命令)。
  2. 調用 claim_verify 執行並生成證據;需要交接時用 claim_report 輸出 Markdown。
  3. 改代碼後先用 claim_status 確認是否 stale;過期則重新 claim_verify,再結束 agent 輪次。

安全方面:claim_plan / claim_verify 會拒絕 README 中列出的紅線命令模式;file 檢查拒絕絕對路徑與 ..;執行策略與 DSH shell 工具一致。插件不聯網、不上報遙測。

適用場景與注意

適合:希望 agent 在改代碼後必須用真實命令退出碼支撐「完成」、且證據能跟 git/工作區狀態綁定的團隊流程;需要把 JSON 證據交給 CI 或評審腳本的場景。

注意:檢查命令以當前 DSH 宿主進程權限在本地工作區執行,安裝前應閱讀源碼與 MIT 許可證,確認 RED_LINE_PATTERNS 與項目命令是否匹配你的安全策略。DSH 社區目錄(如 skillhub.cn)與 DeepSeek / 幻方無官方從屬關係,屬「一切皆插件」生態下的第三方工作流擴展。

結尾

dsh-claimcheck 把「已完成」從一句自稱,變成釘在工作區指紋上、會過期的可機讀證據,並在無證據收尾時攔住輪次。目錄:https://www.skillhub.cn/plugins/Daphne999/dsh-claimcheck;倉庫:https://github.com/Daphne999/dsh-claimcheck。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜