dsh-lint-loop:面向改動的質量閉環,只修代理引入的新問題

前言

在 DeepSeek Harness(DSH)裏讓智能體改代碼,常見困境是:倉庫裏本來就有 lint 警告、類型錯誤或失敗用例,普通 lint 包裝會把「舊賬」和「本次改動引入的迴歸」混在一起展示;智能體要麼被歷史噪音牽着走,要麼 lint 一過就宣稱完成,卻漏掉類型或受影響測試的退化。

下面介紹社區插件 dsh-lint-loop(維護者 lemonxiny55,分類:工作流)。它在首次編輯前抓取基線證據,只讓可歸因的新迴歸驅動修復與續跑,歷史失敗仍記錄在案但不當作本次必須清零的目標,並在結束時給出可覈查的 Quality Receipt。

這是什麼

dsh-lint-loop 是面向 DeepSeek Harness 的 change-aware quality loop(改動感知質量閉環)。官方簡介概括爲:Fix what the agent broke. Ignore what was already broken. Prove the change is clean.

與「每次全量 lint、新舊問題不分」的做法相比,它對比代理改動與第一次編輯前捕獲的證據:保留歷史失敗可見,安全修復新的 lint 迴歸,並在完成前校驗類型與受影響測試。當前 npm 版本爲 0.6.0(Quality Loop)。插件不捆綁 linter、編譯器或測試框架,依賴倉庫已安裝的工具;支持 Node 22/24,DSH peer 策略見倉庫說明。

核心功能

只 steer 新迴歸

舊 lint、類型、測試失敗會繼續記錄爲歷史債務;默認門禁只對可歸因的新迴歸發起 bounded continuation(每輪默認最多兩次強制續跑、兩次 autofix)。讀操作與失敗的寫入不會進入變更集;不用 stash、worktree reset 等方式「僞造」基線。

雙車道(Two speeds)

Fast Lane: 沿用「編輯 → lint delta → 提示反饋」;lint_repair 僅安全修復本回合的 lint 迴歸,不會通過改代碼去修類型/測試失敗。

Completion Lane: 在 agent/turn-stopping 檢查點或調用 quality_verify 時,用原始基線對本回合文件做完成校驗;首次編輯前一次性捕獲 Node/TS typecheck 與測試基線(初捕可能有獨立預算)。同一回合內的 completion-gate 續跑保留整回合範圍;用戶新回合不會繼承已結束回合的基線。

Quality Receipt

完成態會輸出結構化 Quality Receipt:實際執行的命令、跑過的測試、修復項、忽略的債務、缺失證據等。clean 表示在執行範圍內沒有新迴歸,不等於整個倉庫全部通過;缺基線、不支持的 runner、跳過測試、發現上限、畸形輸出或超時會得到 incomplete,不會冒充全綠。

演示倉庫 dsh-lint-loop-demo 公開了桌面端實測收據與 provenance(例如:保留 17 條歷史 lint、2 條新迴歸被安全 autofix、受影響測試 12/12、lint/types/tests 爲 clean)。

模式預設

默認使用 balanced;可在 profile patch 裏覆蓋 lint-loop 插件行:

- id: lint-loop
  config:
    mode: balanced
預設 Fast Lane Completion Lane Sweep budget
fast lint delta + 按需安全修復 僅 lint;顯式跳過 types/tests 60s
balanced(默認) 同上 lint delta、倉庫包 typecheck、保守 fallback 的 impacted tests 60s
strict 同上 lint delta、倉庫包 typecheck 與倉庫包測試套件 120s

fast 會刻意產生 incomplete 的「全質量」收據;strict 擴大測試範圍,仍忽略歷史失敗且不做無限工作量。

工具一覽

工具 用途
quality_verify 只讀 Completion Lane,返回完整 Quality Receipt
quality_receipt 取本會話/倉庫最近一次收據,不重新跑檢查
lint_status 本回合 lint 迴歸與 ignored debt
lint_repair 有界、僅迴歸範圍的安全 autofix;編輯後調用
lint_diagnostics 文件級發現;scope: all / introduced / preexisting 等
lint_workspace_errors 本會話檢查過的文件中的 error,含迴歸範圍
lint_fix 單文件修復;有基線時強制 regression-only

關鍵詞顯示插件可與 eslint、biome、ruff 等生態配合(具體選擇由倉庫與 linters / linterPath 配置決定)。

安裝與啓用

將 npm 包裝入你的 DSH profile(把 web 換成實際 profile 名):

dsh plugin --profile web add dsh-lint-loop@0.6.0

桌面用戶也可通過 DSH 的 plugin_manager 安裝 發佈包 v0.6.0。本地開發時可在倉庫內 pnpm install --frozen-lockfile 與 pnpm build 後,用絕對路徑 dsh plugin --profile web add /absolute/path/to/dsh-lint-loop 掛載。

典型用法

1、安裝插件並確認倉庫內已有項目自帶的 lint / typecheck / test 命令(插件不自帶這些工具)。

2、在智能體開始改文件前,插件會在首次編輯前捕獲基線;之後每次編輯走 Fast Lane 的 lint delta 與可選 lint_repair。

3、回合結束前依賴 Completion Lane 或主動調用 quality_verify,閱讀 tool result 中的 Quality Receipt;需要回顧時可用 quality_receipt 讀取最近一次結果。

4、若要復現 README 中的 walkthrough,可參考 dsh-lint-loop-demo 與倉庫 assets/quality-loop-walkthrough.gif 對應說明。

Before → after 對比(README 摘要):

普通 lint 包裝:舊債 + 新錯一起展示,易漏 type/test 迴歸,lint 通過即可能宣稱 done。

Quality Loop:Fast Lane 處理新 lint → 安全修復;Completion Lane 做 lint delta + types + impacted tests;
僅對新迴歸 steer(默認每回合最多兩次);舊失敗保留爲歷史債務;輸出驗證範圍與最終裁決。

適用場景與注意

適合: 在 DSH 中做智能體編碼、希望「別爲歷史 lint/測試背鍋,但本次改動必須可證明乾淨」的團隊;Node/TS monorepo 或帶 eslint/biome/ruff 的多語言倉庫(以倉庫實際工具爲準)。

注意:

  • 插件以當前 DSH 進程權限運行,安裝前請閱讀 GitHub 源碼 與 MIT 許可證(見 package.json),確認符合你的安全與合規要求。
  • 社區目錄 SkillHub 插件頁 與 GitHub 爲獨立信息源;DSH 生態強調「一切皆插件」,該目錄站點與 DeepSeek / 幻方無官方從屬關係,勿當作官方應用商店。
  • 高級項(如 completionChecks、qualityTimeoutMs、gateMaxSteers 等)會覆蓋預設;詳見 README 的 Modes 與 Options 表。

結尾

dsh-lint-loop 把「代理改壞了什麼、什麼本來就是壞的、本次改動是否乾淨」拆開處理,用基線 + 雙車道 + Quality Receipt 把質量閉環落到可覈查的命令與測試範圍上。若你在 DSH 工作流分類裏找回歸感知的質量門禁,可從目錄頁與倉庫 README 入手安裝 0.6.0 並按 demo 復現收據。

  • 目錄頁:https://www.skillhub.cn/plugins/lemonxiny55/dsh-lint-loop
  • GitHub:https://github.com/lemonxiny55/dsh-lint-loop
羽毛球分组比赛记分
小程序二维码

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

小夜