dsh-done-check:給 DSH 加一份可執行的驗收清單

前言

用 DSH 做編碼任務時,最常出現的情形是:Agent 說做完了,但你看不到它到底跑了什麼、結果是什麼。信號是一句 done,代價是一次人工複覈。dsh-done-check 針對的是這個環節:把任務約定好的檢查項寫成 done-check.yaml,插件通過 DSH 真的把命令跑一遍,記錄退出碼、輸出、耗時和文件指紋;代碼一變,舊結果自動標記爲需要重驗。沒有執行記錄的「通過」不算通過。

下面介紹這個插件的來源、安裝、用法和結果語義。

這是什麼

dsh-done-check 是一個 DSH 插件,由 BeforeLanding 維護,屬於工作流類。它把驗收清單變成可執行、可追溯的對象:

  1. 清單寫在項目的 git 根目錄 done-check.yaml。
  2. 插件通過 DSH 的 shell 工具執行清單裏的命令,記錄命令和結果。
  3. 清單確認、人工項結論必須由你來做,Agent 不能代替。
  4. 被監控的文件變化後,舊結果失效並提示重新檢查。

倉庫地址:https://github.com/BeforeLanding/dsh-done-check ,目錄頁:https://www.skillhub.cn/plugins/BeforeLanding/dsh-done-check ,npm 包 dsh-done-check。

安裝與啓用

要求 DSH >=0.1.5-rc.1 <0.3.0、Node.js >=22.19,並且項目是一個 git 項目。

安裝命令來自 README:

dsh plugin --profile web add dsh-done-check

使用其他由 CLI 管理的 profile 時,把 web 換成對應名稱。裝完按宿主提示重新加載或重啓。

需要留意一點:初始化與英文輸出是 v0.2.1 源碼中的新功能,npm 尚未發佈該版本,所以當前要按源碼安裝方式體驗。項目 development 狀態標註爲 v0.2.1 源碼,npm 待發布。

快速開始

下面三步復現一遍完整流程。

第一步,在 git 根目錄生成清單草稿。 在 DSH 對話裏依次發送:

/done-check lang en
/done-check init

第一條把當前會話輸出切到英文;第二條讓 Agent 探測項目腳本並起草 done-check.yaml。初始化不會執行命令、不會確認清單,也不會覆蓋已有的清單文件。你也可以直接讓 Agent 起草:

Draft and save done-check.yaml for this task. Use the project’s actual test commands and name what each one verifies. Add a manual item with instructions for anything I need to inspect myself.

第二步,預覽、確認、執行。 分三條消息發送:

/done-check
/done-check confirm
/done-check

第一次只展示清單和將要執行的命令,不運行任何東西。confirm 記錄你接受的是剛預覽的那份內容。再發一次 /done-check 才真正執行自動檢查項。

第三步,按結果處理。 測試失敗時查看 Agent 給出的報告,讓它修復後重跑 /done-check。人工項由你自己按說明驗證,然後記錄結論:

/done-check ok [n]
/done-check no [n] [note]

只有一項待人工確認時可以省略 n。

默認輸出是中文,用 /done-check lang en 或 /done-check lang zh 切換當前會話。命令接受中英文別名,例如 確認 / confirm、詳情 / details。

試用示例

倉庫裏的 CSV 導出示例包含一個故意留了缺陷的導出函數、兩項自動檢查、一項人工檢查和一份現成修復。運行測試只需 Node.js 和 git,不需要安裝依賴或配置 API key。setup 命令會新生成一個獨立 git 目錄:

git clone https://github.com/BeforeLanding/dsh-done-check.git
cd dsh-done-check
node examples/csv-export/demo.mjs setup

在生成的目錄打開 DSH 會話,按示例 README 可以復現 失敗 → 修復 → 通過 → 過期 的完整鏈路。

結果說明了什麼

插件把結果分成四類,這四類是判斷能不能相信報告的關鍵:

  1. 通過或失敗:命令真的執行了,退出碼、輸出、耗時和文件內容指紋一起記錄。
  2. 沒能運行:權限拒絕、超時或執行器問題導致沒有可用結果。它既不算通過也不算失敗。
  3. 等待你確認:人工項需要你的結論,Agent 不能確認清單或記錄人工決定。
  4. 需要重新檢查:被監控的文件已不同於保存結果時的版本;修改檢查定義或清單結構則需要重新確認。

有一點要說清楚:通過只代表約定的檢查通過了,不代表需求的每一部分都被覆蓋。插件不提供完成度百分比,也不做需求追蹤。

文件指紋的範圍分兩種情況。不寫 watch 時,指紋覆蓋已跟蹤和未被忽略的未跟蹤文件,清單本身除外;寫了 watch,就只覆蓋聲明匹配到的文件。相關的配置和鎖文件要自己納入,插件不會推斷依賴。

命令參考

常用命令如下:

/done-check status       # 只看當前狀態,不運行檢查
/done-check details [n]  # 查看命令、輸出和變化的文件
/done-check run          # 強制重跑全部已確認的自動項,包括內容未變的失敗項
/done-check init         # 起草清單,不執行、不覆蓋
/done-check confirm      # 記錄你接受剛預覽的清單
/done-check ok [n]       # 記錄人工項結論爲通過
/done-check no [n] [note]  # 記錄人工項結論爲不通過

適用場景與注意

適合的場景:單個任務的驗收邊界明確,有真實可跑的測試命令,且你願意把「約定檢查」寫成清單。它本質上是對既有測試的封存和留痕,不是替代測試框架,也不是需求管理工具。

使用前要注意:

  1. 插件在當前 dsh 進程權限下運行,檢查經由已註冊的 shell 工具執行,本地執行器不提供隔離。確認清單不會繞過 DSH 命令權限。
  2. 它防的是隨手修改檢查和結論,不防擁有不受限 shell 的 Agent。
  3. 安裝第三方插件前,應打開倉庫覈對源碼與許可證。本項目許可證爲 MIT。
  4. 項目較新,GitHub 倉庫創建於 2026-11-04,當前 star 爲 0,README 標註 npm 尚未發佈 v0.2.1。在升級前建議先看 changelog 和設計文檔。

小結

dsh-done-check 的價值在於把「做完了」變成可覈對的證據:每一項檢查都有實際執行記錄,代碼變化後舊結果自動失配。它不替開發者判斷需求覆蓋度,只忠實報告約定檢查的結果。

目錄頁:https://www.skillhub.cn/plugins/BeforeLanding/dsh-done-check

GitHub:https://github.com/BeforeLanding/dsh-done-check

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

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

小夜