dsh-dv-triage:把回归日志收成带证据的失败簇

前言

数字验证回归跑完后,常见情况是目录里躺着几千条 *.log,失败 test 数量一大,人就要在 UVM 报错、编译错误和 assertion 之间来回翻。按单条 test 修往往抓不住根因;同一处 RTL 或 TB 问题还会被算成几十条独立失败。DeepSeek Harness(DSH)里可以加插件,把「读目录、聚类、排序、出报告」做成可复用工具,会话里直接调用,而不是每次手写脚本。

下面介绍社区维护的 dsh-dv-triage(维护者 yyyyukari,分类:工作流):只读回归结果目录,不启动仿真器、不改 RTL、不替代 Verdi,目标是把大量日志压成少量带证据、可复现、排好序的失败簇。

这是什么

dsh-dv-triage 是 DSH 插件,bundle 包含 5 个工具、1 个技能,以及独立 CLI dv-triage。自述能力是:evidence-first regression triage for digital verification——把回归目录中的日志变成带排序的失败簇,并给出经过校验的源码指针(verified source pointers)。

与「逐 test 看 log」相比,它的工作单元是簇:一次修一个根因。与只靠大模型猜错因相比,解析、归一化、聚类、排序在确定性内核里完成并可单测;模型侧主要用于解释(技能 playbook),无证据则标 unknown。

核心功能

扫描、聚类与排序

dv_scan 扫描回归根目录,解析日志、聚类、排序并落索引,返回 run_id 与排名靠前的簇。后续可用 dv_clusters、dv_cluster 翻页或查看单簇详情,包括证据日志行号、repro、fine 变体,以及重新读文件校验后的源码指针(行不存在或标识符对不上则标 unverified,不当事实展示)。

回归对比与报告

dv_diff 对比两次回归:新增失败、已修复、持续失败。dv_report 可按 md 或 html 输出报告。

日志与仿真器画像

支持自动探测;也可用 --profile 强制。README 列出的格式包括:

  • VCS:Error-[...]、"file.sv", 42: ...、UVM_ERROR/FATAL、assertion 失败块
  • Questa:# ** Error/Fatal、# UVM_*(去 # 前缀后解析)
  • Verilator:%Error: file.sv:42: ...
  • Icarus:file.v:42: error: ...

设计要点(与 triage 行为直接相关)

  1. 编译传染标 blocked:同一 compile unit 下的 test 在编译失败时不再计为 fail,减轻「一条编译错 → 数百条假失败」。
  2. 证据优先:源码指针会回读文件校验。
  3. 不碰波形解析:不解析 FSDB;若存在同名 .vcd/.fst/.fsdb 仅记录路径,波形分析交给其他插件。

v0.1 已知限制

  • 日志整文件读入,单文件上限 64 MiB;流式解析计划在 v0.2。
  • 仅发现 *.log;manifest / results.xml 计划在 v0.2。
  • 覆盖率关联(URG/LCOV/UCDB)计划在 v0.3。
  • 排序中的 novel/known 字段已预留,尚未接 baseline。

安装与启用

在 DSH 中安装(命令来自官方 README):

dsh plugin --profile web add github:yyyyukari/dsh-dv-triage

安装后需重启 dsh web 或桌面端,会话里可使用 dv_* 工具与 dv-triage 技能。

本地开发挂载目录时(README 示例为 Windows 路径,按本机改写):

dsh plugin --profile web add D:\DS插件\dsh-dv-triage

可先确认 profile 是否加载插件:

dsh --profile web --dump-config | findstr dv-triage

插件在当前 dsh 进程权限下运行,安装前请自行查看仓库源码与 MIT 许可证,确认可读路径范围符合团队安全要求。

典型用法

独立 CLI 快速体验

进入插件目录后执行 demo,会生成两天的合成回归(60 个 test)并打印摘要(README 示例输出如下):

cd dsh-dv-triage
node bin/dv-triage.js demo

示例控制台摘要形态:

60 tests | 27 pass | 21 fail | 12 blocked | 5 clusters | profile: vcs

c01   12 tests  compile · SE · arbiter.sv:212                          score=13.7  rtl/arbiter.sv:212 (verified)
c02    4 tests  timeout · TIMEOUT · uvm_test_top.env.agent             score=11.32  -
...

同时会写出 Markdown / HTML 报告,并演示 diff(例如新增 5 个失败、修复 1 个)。

DSH 工具与 CLI 子命令对照

工具 作用
dv_scan {root, profile?, top?} 扫描回归目录,解析、聚类、排序,落索引
dv_clusters {root, run_id?, top?} 读取已落盘的 run,列出簇
dv_cluster {root, cluster_id, run_id?} 单簇详情
dv_diff {before, after} 两次回归对比
dv_report {root, format: md\|html, out?} 出报告

CLI 子命令:demo、scan、clusters、cluster、diff、report。

在 DSH 会话中,可结合 skills/dv-triage/ 下的 triage playbook,由智能体按「先 scan、再看 top 簇、拉 cluster 证据、必要时 diff」推进;具体参数以工具 schema 为准。

开发与自测

node --test          # README 注明 15 个测试
node bin/dv-triage.js demo

主要代码路径:lib/core/parse.js(解析)、cluster.js(聚类与证据)、verify.js(源码校验)、bin/dv-triage.js(CLI)。

适用场景与注意

适合谁:经常跑 VCS / Questa / Verilator / Icarus 回归、需要在不打开 Verdi 的前提下先收敛失败面的验证工程师,或在 DSH 里编排「读 log → 分诊 → 出报告」工作流的智能体开发者。

不适合当作什么:不能替代仿真重跑、RTL 修改或波形 debug;也不能把未校验指针当成已证实根因。

生态说明:DSH 的理念是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文档事实以 GitHub 仓库 README 为准。

结尾

经过上面的步骤可以理解:dsh-dv-triage 把回归 triage 收成「簇 + 证据 + 排序 + 可选 diff/报告」,并嵌进 DSH 工具与会话技能。若要在本机试用,可从 node bin/dv-triage.js demo 或官方 dsh plugin --profile web add 命令开始。

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

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

小夜