@godv61/dsh-task-engine 0.29.3 → 0.29.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.adaptive-test.mjs +302 -149
- package/.codex-project-test.mjs +18 -18
- package/.evidence-test.mjs +16 -3
- package/.hook-test.mjs +19 -19
- package/.resource-test.mjs +19 -2
- package/.roundtrip-test.mjs +8 -3
- package/.sonar-credential-test.mjs +38 -0
- package/.sonarlint-local-test.mjs +65 -0
- package/.workflow-test.mjs +29 -12
- package/README.md +22 -22
- package/docs/CHANGELOG.md +33 -19
- package/docs/README.md +6 -6
- package/docs/adaptive-workflows.md +85 -73
- package/docs/configuration.md +4 -4
- package/docs/faq.md +24 -18
- package/docs/getting-started.md +9 -9
- package/docs/manual-legacy.html +1 -1
- package/docs/manual.html +124 -117
- package/docs/roadmap.md +7 -7
- package/hooks/commit-msg +1 -1
- package/lib/adaptive.js +1 -1
- package/lib/adaptive.js.map +1 -1
- package/lib/client.js +289 -17
- package/lib/client.js.map +2 -2
- package/lib/controller.d.ts +35 -0
- package/lib/controller.js +68 -0
- package/lib/controller.js.map +1 -1
- package/lib/dev-task.d.ts +2 -0
- package/lib/dev-task.js +261 -31
- package/lib/dev-task.js.map +1 -1
- package/lib/engine.d.ts +1 -1
- package/lib/hook.js +3 -3
- package/lib/hook.js.map +1 -1
- package/lib/project-init.d.ts +4 -0
- package/lib/project-init.js +21 -2
- package/lib/project-init.js.map +1 -1
- package/lib/skill-audit.js +9 -1
- package/lib/skill-audit.js.map +1 -1
- package/lib/sonar-credential.d.ts +17 -0
- package/lib/sonar-credential.js +17 -0
- package/lib/sonar-credential.js.map +1 -0
- package/lib/sonar-report.d.ts +4 -0
- package/lib/sonar-report.js +40 -0
- package/lib/sonar-report.js.map +1 -0
- package/lib/sonar.d.ts +23 -2
- package/lib/sonar.js +55 -4
- package/lib/sonar.js.map +1 -1
- package/lib/sonarlint-local.d.ts +15 -0
- package/lib/sonarlint-local.js +307 -0
- package/lib/sonarlint-local.js.map +1 -0
- package/package.json +9 -7
- package/preset/enable.mjs +2 -2
- package/preset/persona.md +4 -4
- package/scripts/verify-dsh-compat.mjs +14 -14
- package/scripts/verify-package.mjs +7 -7
- package/skills/architecture-design/SKILL.md +11 -11
- package/skills/code-development/SKILL.md +11 -11
- package/skills/code-review/SKILL.md +11 -11
- package/skills/eng-delivery/SKILL.md +6 -4
- package/skills/requirements-analysis/SKILL.md +11 -11
- package/skills/task-orchestration/SKILL.md +11 -11
- package/skills/test-validation/SKILL.md +11 -11
package/docs/manual.html
CHANGED
|
@@ -1,122 +1,129 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="zh-CN">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<title>DSH Task Engine 使用手册</title>
|
|
7
|
-
<style>
|
|
8
|
-
:root{--ink:#172535;--muted:#526477;--line:#d8e1eb;--blue:#2155b4;--pale:#edf4ff;--paper:#f5f7fa;--white:#fff}
|
|
9
|
-
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.75 "Microsoft YaHei","PingFang SC",system-ui,sans-serif}
|
|
10
|
-
a{color:var(--blue)}code,pre{font-family:Consolas,"Cascadia Code",monospace}code{background:#eef2f6;padding:.1em .35em;border-radius:.25em}pre{overflow:auto;padding:1rem;background:#14243c;color:#fff;border-radius:.6rem}pre code{padding:0;background:none}
|
|
11
|
-
header{padding:2.5rem max(1rem,calc((100vw - 1120px)/2));background:linear-gradient(120deg,#143775,#2760bc);color:#fff}header h1{margin:.1rem 0;font-size:2.3rem}header p{max-width:850px;margin:.4rem 0}
|
|
12
|
-
.layout{width:min(1120px,calc(100% - 2rem));margin:2rem auto;display:grid;grid-template-columns:230px minmax(0,1fr);gap:1.5rem}nav{position:sticky;top:1rem;align-self:start;background:var(--white);border:1px solid var(--line);border-radius:.7rem;padding:1rem}nav a{display:block;padding:.25rem 0}
|
|
13
|
-
main{min-width:0}section{background:var(--white);border:1px solid var(--line);border-radius:.8rem;padding:1.4rem;margin-bottom:1rem}h2{margin:0 0 .8rem}h3{margin:1.35rem 0 .35rem}p{margin:.5rem 0 1rem}.note{background:var(--pale);border-left:4px solid var(--blue);padding:.75rem 1rem;border-radius:.3rem}.warn{background:#fff2dc;border-left-color:#bc7821}
|
|
14
|
-
table{border-collapse:collapse;width:100%;font-size:.94rem}th,td{border:1px solid var(--line);padding:.55rem;text-align:left;vertical-align:top}th{background:#edf4ff}ul,ol{padding-left:1.45rem}li+li{margin-top:.3rem}.scroll{overflow-x:auto}
|
|
15
|
-
@media(max-width:760px){.layout{display:block}nav{position:static;margin-bottom:1rem}nav a{display:inline-block;margin-right:.8rem}header{padding:1.5rem 1rem}}@media print{nav{display:none}.layout{display:block;width:100%}section{break-inside:avoid}}
|
|
16
|
-
</style>
|
|
17
|
-
</head>
|
|
18
|
-
<body>
|
|
19
|
-
<header>
|
|
20
|
-
<p>DeepSeek Harness · 0.29.3</p>
|
|
21
|
-
<h1>DSH Task Engine 使用手册</h1>
|
|
22
|
-
<p>按每个需求选择工程路径,用项目 Skill 和 Rule 复用团队规范;SonarQube 审核由项目自行选择。</p>
|
|
23
|
-
</header>
|
|
24
|
-
<div class="layout">
|
|
25
|
-
<nav aria-label="目录">
|
|
26
|
-
<strong>目录</strong>
|
|
27
|
-
<a href="#status">版本状态</a>
|
|
28
|
-
<a href="#start">开始使用</a>
|
|
29
|
-
<a href="#flows">四档任务流程</a>
|
|
30
|
-
<a href="#skills">元技能与规则</a>
|
|
31
|
-
<a href="#init">项目初始化</a>
|
|
32
|
-
<a href="#sonar">可选 SonarQube</a>
|
|
33
|
-
<a href="#commit">为什么当前要提交</a>
|
|
34
|
-
<a href="#limits">验证边界</a>
|
|
35
|
-
</nav>
|
|
36
|
-
<main>
|
|
37
|
-
<section id="status">
|
|
38
|
-
<h2>版本状态</h2>
|
|
39
|
-
<div class="note"
|
|
40
|
-
<p>本手册替换了旧版 HTML 说明。旧任务快照仍可读,工作台已移除旧版流程页。历史操作保存在<a href="manual-legacy.html">历史手册</a>,现行技术细节见<a href="adaptive-workflows.md">自适应流程说明</a>。</p>
|
|
41
|
-
</section>
|
|
42
|
-
<section id="start">
|
|
43
|
-
<h2>开始使用</h2>
|
|
44
|
-
<ol>
|
|
45
|
-
<li>在使用的 Web profile 中启用插件,重启 Harness Web。</li>
|
|
46
|
-
<li>进入「工程任务」工作台并选择项目工作区。「自适应流程」用于查看四档路径、给元技能挂载项目 Skill,以及设置可选 SonarQube。</li>
|
|
47
|
-
<li>新建「工程化开发引擎」会话并描述需求。模型先分析复杂度,用 <code>dev_task assess</code> 预览,再在创建任务时给出 <code>complexity</code> 和理由。</li>
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>DSH Task Engine 使用手册</title>
|
|
7
|
+
<style>
|
|
8
|
+
:root{--ink:#172535;--muted:#526477;--line:#d8e1eb;--blue:#2155b4;--pale:#edf4ff;--paper:#f5f7fa;--white:#fff}
|
|
9
|
+
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.75 "Microsoft YaHei","PingFang SC",system-ui,sans-serif}
|
|
10
|
+
a{color:var(--blue)}code,pre{font-family:Consolas,"Cascadia Code",monospace}code{background:#eef2f6;padding:.1em .35em;border-radius:.25em}pre{overflow:auto;padding:1rem;background:#14243c;color:#fff;border-radius:.6rem}pre code{padding:0;background:none}
|
|
11
|
+
header{padding:2.5rem max(1rem,calc((100vw - 1120px)/2));background:linear-gradient(120deg,#143775,#2760bc);color:#fff}header h1{margin:.1rem 0;font-size:2.3rem}header p{max-width:850px;margin:.4rem 0}
|
|
12
|
+
.layout{width:min(1120px,calc(100% - 2rem));margin:2rem auto;display:grid;grid-template-columns:230px minmax(0,1fr);gap:1.5rem}nav{position:sticky;top:1rem;align-self:start;background:var(--white);border:1px solid var(--line);border-radius:.7rem;padding:1rem}nav a{display:block;padding:.25rem 0}
|
|
13
|
+
main{min-width:0}section{background:var(--white);border:1px solid var(--line);border-radius:.8rem;padding:1.4rem;margin-bottom:1rem}h2{margin:0 0 .8rem}h3{margin:1.35rem 0 .35rem}p{margin:.5rem 0 1rem}.note{background:var(--pale);border-left:4px solid var(--blue);padding:.75rem 1rem;border-radius:.3rem}.warn{background:#fff2dc;border-left-color:#bc7821}
|
|
14
|
+
table{border-collapse:collapse;width:100%;font-size:.94rem}th,td{border:1px solid var(--line);padding:.55rem;text-align:left;vertical-align:top}th{background:#edf4ff}ul,ol{padding-left:1.45rem}li+li{margin-top:.3rem}.scroll{overflow-x:auto}
|
|
15
|
+
@media(max-width:760px){.layout{display:block}nav{position:static;margin-bottom:1rem}nav a{display:inline-block;margin-right:.8rem}header{padding:1.5rem 1rem}}@media print{nav{display:none}.layout{display:block;width:100%}section{break-inside:avoid}}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
<header>
|
|
20
|
+
<p>DeepSeek Harness · 0.29.3</p>
|
|
21
|
+
<h1>DSH Task Engine 使用手册</h1>
|
|
22
|
+
<p>按每个需求选择工程路径,用项目 Skill 和 Rule 复用团队规范;SonarQube 审核由项目自行选择。</p>
|
|
23
|
+
</header>
|
|
24
|
+
<div class="layout">
|
|
25
|
+
<nav aria-label="目录">
|
|
26
|
+
<strong>目录</strong>
|
|
27
|
+
<a href="#status">版本状态</a>
|
|
28
|
+
<a href="#start">开始使用</a>
|
|
29
|
+
<a href="#flows">四档任务流程</a>
|
|
30
|
+
<a href="#skills">元技能与规则</a>
|
|
31
|
+
<a href="#init">项目初始化</a>
|
|
32
|
+
<a href="#sonar">可选 SonarQube</a>
|
|
33
|
+
<a href="#commit">为什么当前要提交</a>
|
|
34
|
+
<a href="#limits">验证边界</a>
|
|
35
|
+
</nav>
|
|
36
|
+
<main>
|
|
37
|
+
<section id="status">
|
|
38
|
+
<h2>版本状态</h2>
|
|
39
|
+
<div class="note">本手册描述自适应流程、项目 Skill/Rule 初始化与可选 SonarQube 审核。可复用 CI 结果、上传式本机扫描,也可在未提交工作区运行本地规则审核;新代码范围由参考分支确定。</div>
|
|
40
|
+
<p>本手册替换了旧版 HTML 说明。旧任务快照仍可读,工作台已移除旧版流程页。历史操作保存在<a href="manual-legacy.html">历史手册</a>,现行技术细节见<a href="adaptive-workflows.md">自适应流程说明</a>。</p>
|
|
41
|
+
</section>
|
|
42
|
+
<section id="start">
|
|
43
|
+
<h2>开始使用</h2>
|
|
44
|
+
<ol>
|
|
45
|
+
<li>在使用的 Web profile 中启用插件,重启 Harness Web。</li>
|
|
46
|
+
<li>进入「工程任务」工作台并选择项目工作区。「自适应流程」用于查看四档路径、给元技能挂载项目 Skill,以及设置可选 SonarQube。</li>
|
|
47
|
+
<li>新建「工程化开发引擎」会话并描述需求。模型先分析复杂度,用 <code>dev_task assess</code> 预览,再在创建任务时给出 <code>complexity</code> 和理由。</li>
|
|
48
48
|
<li>在「任务台账」查看阶段、验证、审核及 Sonar 记录。每个任务独立选择流程;同一项目里的其他会话不会被统一推入同一流程。</li>
|
|
49
49
|
</ol>
|
|
50
|
-
<p
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
<
|
|
55
|
-
|
|
56
|
-
<
|
|
57
|
-
|
|
58
|
-
<tr><td
|
|
59
|
-
<tr><td
|
|
60
|
-
<tr><td
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
<
|
|
68
|
-
<p
|
|
69
|
-
<
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
"
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
<
|
|
80
|
-
<p
|
|
81
|
-
<
|
|
82
|
-
|
|
83
|
-
<li><code>phase=
|
|
50
|
+
<p>台账中的实施项按实现先后执行。“已开始”只记录该项进入开发,当前会话可以直接完成,无需派给其他开发者;“待审查”表示该实施项还没有规格与质量审查记录,它与最后的整项代码审核阶段不同。已完成或已有实施/审查记录的项,在重排列表时会保留。高、超高任务离开任务编排前,实施项 ID 必须与计划中逐行列出的 ID 一致。</p>
|
|
51
|
+
<p>工作台「项目初始化」页分开显示项目 Skill/Rule 初始化与 <code>AGENTS.md</code> 生成。前者可复制请求到工程化开发引擎会话,再由 <code>dev_task init_project</code> 执行;页面本身不会直接生成项目 Skill/Rule。</p>
|
|
52
|
+
</section>
|
|
53
|
+
<section id="flows">
|
|
54
|
+
<h2>四档任务流程</h2>
|
|
55
|
+
<div class="scroll"><table>
|
|
56
|
+
<thead><tr><th>档次</th><th>适用情况</th><th>阶段顺序</th></tr></thead>
|
|
57
|
+
<tbody>
|
|
58
|
+
<tr><td>低</td><td>边界明确的局部修改</td><td>代码开发 → 测试 → 代码审核 → 完成</td></tr>
|
|
59
|
+
<tr><td>中</td><td>常规功能或缺陷修复</td><td>需求分析 → 代码开发 → 测试 → 代码审核 → 完成</td></tr>
|
|
60
|
+
<tr><td>高</td><td>跨模块且存在实现先后依赖</td><td>需求分析 → 任务编排 → 代码开发 → 测试 → 代码审核 → 完成</td></tr>
|
|
61
|
+
<tr><td>超高</td><td>完整新模块或大范围重构</td><td>需求分析 → 架构设计 → 任务编排 → 代码开发 → 测试 → 代码审核 → 完成</td></tr>
|
|
62
|
+
</tbody>
|
|
63
|
+
</table></div>
|
|
64
|
+
<p>高档的任务编排按实现先后拆解,记录依赖和交接产物,不按人员分工。风险级别与复杂度分开判断。阶段顺序和门禁在任务创建时冻结,Skill/Rule 正文更新后会在下一次读取时生效并提示漂移。</p>
|
|
65
|
+
</section>
|
|
66
|
+
<section id="skills">
|
|
67
|
+
<h2>元技能、Skill 与 Rule</h2>
|
|
68
|
+
<p>内置六个通用元技能:需求分析、架构设计、任务编排、代码开发、测试、代码审核。每个阶段加载同名核心 Skill;使用者可为阶段增加项目 Skill。每个 Skill 的 <code>profile.json</code> 保存它引用的 Rule 和证据要求。</p>
|
|
69
|
+
<p>同名 Skill 的选择顺序是 <code>.dsh/skills</code> → <code>.agents/skills</code> → 用户目录 → 插件内置。项目同名 Skill 采用自己的 Rule,不混合用户级同名 Skill 的规则。点击“配置核心 Skill 的 Rule”即可编辑;若当前是内置或用户级 Skill,保存时先复制为同名项目 Skill,再写入规则档案。</p>
|
|
70
|
+
<pre><code>{
|
|
71
|
+
"meta_bindings": {
|
|
72
|
+
"requirements-analysis": ["my-project-map"],
|
|
73
|
+
"code-development": ["my-project-map", "my-code-backend"]
|
|
74
|
+
}
|
|
75
|
+
}</code></pre>
|
|
76
|
+
<p>这个配置位于项目根目录 <code>.dsh/meta.json</code>,只增加技能挂载;四档流程由每个任务自己的复杂度决定。</p>
|
|
77
|
+
</section>
|
|
78
|
+
<section id="init">
|
|
79
|
+
<h2>项目初始化</h2>
|
|
80
|
+
<p>从「自适应流程」页顶部点击「初始化项目 Skill / Rule」,或直接进入「项目初始化」页。点击「复制初始化请求」,在项目根工作区的新「工程化开发引擎」会话中粘贴发送。此页下方的 <code>AGENTS.md</code> 生成是另一项独立功能。</p>
|
|
81
|
+
<p>在项目工作区用 <code>dev_task init_project phase=inspect</code> 扫描目录和常见构建清单,取得项目结构、技术栈及可证实版本。扫描结果只提供证据和建议名称;模型再检查代表性源码,拟定项目地图、技术栈、后端或前端开发等 Skill 与 Rule。项目地图应总结整个仓库,供不同需求复用;当前需求的专属调用链与方案应写入任务产物或单独的领域 Skill。<code>phase=propose</code> 会检查草稿是否覆盖扫描发现的主要模块和构建清单;应用前仍需审阅职责、依赖与事实。</p>
|
|
82
|
+
<ol>
|
|
83
|
+
<li><code>phase=inspect</code>:只读扫描并返回建议。</li>
|
|
84
|
+
<li><code>phase=propose</code>:预览拟写入的资源及挂载关系。</li>
|
|
84
85
|
<li><code>phase=apply</code>:使用相同草稿与哈希写入项目目录;已有同名文件不会被覆盖。</li>
|
|
85
86
|
</ol>
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
<
|
|
90
|
-
<p><strong
|
|
91
|
-
<
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
"
|
|
95
|
-
"
|
|
87
|
+
<p>应用结果会列出团队配置文件。需要在团队中复用时,将 <code>.dsh/skills/</code>、<code>.dsh/rules/</code> 与 <code>.dsh/meta.json</code> 纳入 Git;任务审核报告可以继续留在本地。</p>
|
|
88
|
+
</section>
|
|
89
|
+
<section id="sonar">
|
|
90
|
+
<h2>可选 SonarQube 审核</h2>
|
|
91
|
+
<p><strong>不使用:</strong>「自适应流程」中的 SonarQube 开关保持关闭,或不在 <code>.dsh/meta.json</code> 写 <code>sonar</code>。不需要 Sonar 服务、Token 或扫描任务;代码审核仍按审核元技能及项目 Rule 进行。</p>
|
|
92
|
+
<p><strong>使用 SonarQube:</strong>打开开关,填写 SonarQube 地址、项目 Key、扫描来源和分析对象,保存配置。Token 可在同页单独输入并保存到 DSH 本机凭据存储,按项目工作区隔离,重启后仍可用;页面只显示是否已配置,不回显值。原有的 Token 环境变量仍可作为后备来源。新建任务会冻结该选项,已建任务不会被自动修改。</p>
|
|
93
|
+
<pre><code>{
|
|
94
|
+
"sonar": {
|
|
95
|
+
"enabled": true,
|
|
96
|
+
"host_url": "https://sonarqube.example.com",
|
|
97
|
+
"project_key": "my-project",
|
|
96
98
|
"mode": "branch",
|
|
97
|
-
"
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
<
|
|
105
|
-
<p
|
|
106
|
-
<p
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
<
|
|
112
|
-
<
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
<
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
</
|
|
122
|
-
|
|
99
|
+
"source": "ide-local",
|
|
100
|
+
"reference_branch": "main",
|
|
101
|
+
"token_env": "SONAR_TOKEN"
|
|
102
|
+
}
|
|
103
|
+
}</code></pre>
|
|
104
|
+
<p>Token 不写入项目仓库、任务台账,也不会在页面回显。DSH 的本地凭据是当前操作系统用户可读的本机文件,不能隔离同一用户运行的其他程序。功能验证通过后,在「代码审核」阶段调用 <code>dev_task sonar_check</code>。<strong>本地规则审核(<code>ide-local</code>):</strong>从项目 Quality Profile 同步可本地运行的规则,只审核当前任务登记文件中相对 Git 参考分支新增的 Java、JS/TS、Vue、CSS、HTML 和 XML 代码;无需 <code>ceTaskId</code>、提交或推送,审核通过后再提交。<strong>CI 结果(<code>ci</code>):</strong>测试后提交并推送,从 <code>report-task.txt</code> 取 <code>ceTaskId</code>。<strong>上传式本机扫描(<code>local</code>):</strong>测试后提交,本机运行扫描器并上传分析,无需推送;要求 Developer Edition 或更高版本。后两种方式仅用新代码问题和 <code>new_*</code> Gate 条件阻断;本地规则审核用本地中高级问题和未覆盖文件作为门禁,不代表服务端 Quality Gate。</p>
|
|
105
|
+
<p>本地规则审核需要在 DSH 服务进程配置 <code>DSH_SONARLINT_JAVA</code>、<code>DSH_SONARLINT_LIB</code> 和 <code>DSH_SONARLINT_PLUGINS</code>,分别指向 Java 运行时、SonarLint 后台 JAR 目录和内置分析器 JAR;Windows 多个插件路径以分号分隔。JS/TS、Vue 和 CSS 分析还需要本机 Node.js。其他语言文件只有在该项目的服务端 Quality Profile 存在生效规则、本地却无法分析时才列为未覆盖并阻止审核;QMS 项目目前没有 SQL 语言的 Quality Profile,SQL 迁移文件仍需单独数据库验证。部分服务端规则无法在本地执行,完整 Quality Gate 仍需 CI 扫描。</p>
|
|
106
|
+
<p>Quality Profile 决定规则,CI 扫描配置决定分析范围。本地规则审核可在项目配置的 <code>sonar.include_paths</code> 中逐行填写后端目录或文件,与 CI 范围对齐;留空时分析任务登记的全部代码。QMS 当前服务端分析索引只有后端 Java 和 XML 文件。</p>
|
|
107
|
+
<p>审核结果可在当前项目工作台的「任务台账」中展开“最近一次 SonarQube 审核”查看:包含通过状态、阻断数量、规则、严重程度和文件行号。每次 <code>sonar_check</code> 还会在项目 <code>.dsh/reviews/<任务 ID>/</code> 生成 Markdown 审核文件;结构化记录保存在 <code>.dsh/task-<任务 ID>.json</code>,不包含 Token。可以把报告目录加入项目 <code>.gitignore</code>。代码或 Skill/Rule 变更后须重新测试和审核;旧记录只代表当时的结果。</p>
|
|
108
|
+
<p><code>sonar_check</code> 和 <code>status</code> 会列出尚未沉淀的阻断案例。失败问题可用 <code>dev_task learn_rule phase=propose</code> 生成项目 Rule 草稿,人工核对是真实且可复用的问题后,再用 <code>phase=apply</code> 挂到项目代码 Skill。误报或一次性问题不会自动变成永久团队规范。</p>
|
|
109
|
+
</section>
|
|
110
|
+
<section id="commit">
|
|
111
|
+
<h2>分支与提交的关系</h2>
|
|
112
|
+
<p>CI 和上传式扫描把结果保存在 SonarQube 的分支或合并请求下,因此需要提交并按目标查询。<strong>本地规则审核只使用 Git 参考分支计算新增行,不在 Sonar 服务端创建分支分析。</strong>它可以在首次提交之前运行,适用于 Community Build。</p>
|
|
113
|
+
<p>上传式本机扫描需要本机扫描器和构建环境、SonarQube Server Developer Edition 或更高版本,并已分析参考分支;Community Build 会在上传前拒绝。本地规则审核使用独立 SonarLint 后台运行服务端 Quality Profile 可支持的规则,无需打开 IDEA。</p>
|
|
114
|
+
<div class="note warn">本地规则审核当前覆盖 Java、常见前端与 XML 差异,无法替代服务端 Quality Gate;如需与服务端规则执行结果完全一致,仍需使用 CI 扫描。</div>
|
|
115
|
+
<p>参考:<a href="https://docs.sonarsource.com/sonarqube-for-intellij/using/rules">SonarQube for IntelliJ 规则与 Connected Mode</a>、<a href="https://docs.sonarsource.com/sonarqube-server/2025.4/user-guide/connected-mode">SonarQube Server 的本地分析说明</a>。</p>
|
|
116
|
+
</section>
|
|
117
|
+
<section id="limits">
|
|
118
|
+
<h2>验证边界</h2>
|
|
119
|
+
<ul>
|
|
120
|
+
<li>本地规则审核已在 QMS 真实 SonarQube 项目用未提交的需求代码走到 <code>dev_task sonar_check</code>,发现中高级问题并正确阻止审核通过;SQL 迁移与安装包端到端验证仍待完成。</li>
|
|
121
|
+
<li>服务端扫描的新代码问题列表取自查询时的目标分支或请求;同一目标并发扫描时,应使用当前扫描的 <code>ceTaskId</code> 重新核对。</li>
|
|
122
|
+
<li>本地钩子与任务门禁只约束受控操作;远程合并、发布以及组织级 CI 策略由项目自行管理。</li>
|
|
123
|
+
</ul>
|
|
124
|
+
<p>详细的字段、交接契约和状态说明见<a href="adaptive-workflows.md">自适应工程任务</a>。最后更新:2026-10-02。</p>
|
|
125
|
+
</section>
|
|
126
|
+
</main>
|
|
127
|
+
</div>
|
|
128
|
+
</body>
|
|
129
|
+
</html>
|
package/docs/roadmap.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[← 文档导航](README.md)
|
|
4
4
|
|
|
5
|
-
本页记录已发布能力与后续方向;任务级流程见[自适应工程任务](adaptive-workflows.md)。
|
|
5
|
+
本页记录已发布能力与后续方向;任务级流程见[自适应工程任务](adaptive-workflows.md)。
|
|
6
6
|
已发布的能力与版本变化见[更新日志](CHANGELOG.md)。
|
|
7
7
|
|
|
8
8
|
## 当前能力边界
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
| 三个内置流程(`standard`、`agile`、`minimal`) | ✅ 已发布,开箱即用 |
|
|
13
13
|
| 阶段选择技能、规则归属技能 | ✅ 已发布 |
|
|
14
14
|
| 任务台账、验证与审核回执、提交门禁 | ✅ 已发布 |
|
|
15
|
-
| 项目级与个人级资源安装、来源保留 | ✅ 已发布 |
|
|
16
|
-
| 四档任务级流程、元技能、项目扫描 init、可选审核期 SonarQube CI 接入 | ✅ 0.29.0 |
|
|
17
|
-
| **自由编辑流程阶段与条件** | ❌ **不在计划内** |
|
|
15
|
+
| 项目级与个人级资源安装、来源保留 | ✅ 已发布 |
|
|
16
|
+
| 四档任务级流程、元技能、项目扫描 init、可选审核期 SonarQube CI 接入 | ✅ 0.29.0 |
|
|
17
|
+
| **自由编辑流程阶段与条件** | ❌ **不在计划内** |
|
|
18
18
|
|
|
19
19
|
**关于自定义流程**:让使用者自行设计阶段、条件与提交流程曾被评估,结论是**不列入计划**——
|
|
20
|
-
任务级四档流程覆盖常见开发复杂度,用户可挂载项目技能;自由编辑状态机仍不在当前范围。
|
|
20
|
+
任务级四档流程覆盖常见开发复杂度,用户可挂载项目技能;自由编辑状态机仍不在当前范围。
|
|
21
21
|
|
|
22
|
-
旧任务继续读取 `.dsh/eng.json`;新任务用 `.dsh/meta.json` 管理元技能挂载,复杂度在任务创建时确定。
|
|
22
|
+
旧任务继续读取 `.dsh/eng.json`;新任务用 `.dsh/meta.json` 管理元技能挂载,复杂度在任务创建时确定。
|
|
23
23
|
|
|
24
24
|
## 后续体验方向
|
|
25
25
|
|
|
@@ -30,4 +30,4 @@
|
|
|
30
30
|
|
|
31
31
|
## 产品范围
|
|
32
32
|
|
|
33
|
-
本项目服务本机与团队分支开发中的个人会话。多用户服务器的会话权限架构不列为当前版本的必修项。日常改进优先解决工作区目标清晰、文件误操作、任务连续性和操作反馈。
|
|
33
|
+
本项目服务本机与团队分支开发中的个人会话。多用户服务器的会话权限架构不列为当前版本的必修项。日常改进优先解决工作区目标清晰、文件误操作、任务连续性和操作反馈。
|
package/hooks/commit-msg
CHANGED
|
@@ -603,7 +603,7 @@ if (state.sonar_policy?.enabled && ["\u4EE3\u7801\u5BA1\u6838", "\u5B8C\u6210"].
|
|
|
603
603
|
const audit = state.sonar_audit;
|
|
604
604
|
const lastCommit = state.commits.findLast((entry) => entry.hash !== void 0)?.hash;
|
|
605
605
|
if (!audit || audit.gate !== "OK" || audit.blocking.length > 0 || audit.scope_hash !== scopeHash(state, cwd) || !lastCommit || audit.commit_hash !== lastCommit) {
|
|
606
|
-
refuse("SonarQube \u5BA1\u6838\u672A\u901A\u8FC7\u6216\u5DF2\u8FC7\u671F\u2014\u2014\u5728\u4EE3\u7801\u5BA1\u6838\u9636\u6BB5\
|
|
606
|
+
refuse("SonarQube \u5BA1\u6838\u672A\u901A\u8FC7\u6216\u5DF2\u8FC7\u671F\u2014\u2014\u5728\u4EE3\u7801\u5BA1\u6838\u9636\u6BB5\u91CD\u65B0\u626B\u63CF\u5E76\u8C03\u7528 dev_task operation=sonar_check");
|
|
607
607
|
}
|
|
608
608
|
}
|
|
609
609
|
var entries = stagedEntries();
|
package/lib/adaptive.js
CHANGED
|
@@ -39,7 +39,7 @@ export function adaptiveWorkflow(grade) {
|
|
|
39
39
|
start_stage: stages[0],
|
|
40
40
|
transitions,
|
|
41
41
|
artifacts: COMMON_ARTIFACTS.filter(artifact => stages.includes(artifact.stage)),
|
|
42
|
-
//
|
|
42
|
+
// CI and scanner review need a tested commit; local IDE-style review overrides this per task.
|
|
43
43
|
commit: { policy: 'task', message_pattern: '', message_hint: '无格式要求', checkpoints: ['测试'], file_scope: true },
|
|
44
44
|
high_risk_requires_verification: true,
|
|
45
45
|
review_depth: grade === 'low' ? 'single' : 'two-stage',
|
package/lib/adaptive.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adaptive.js","sourceRoot":"","sources":["../src/adaptive.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,kBAAkB,GAAmE;IAChG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,wBAAwB,EAAE;IAC7D,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,uBAAuB,EAAE;IAC/D,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,8BAA8B,EAAE;IACpE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,+BAA+B,EAAE;CACxE,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAwC;IAC9D,uBAAuB,EAAE,MAAM;IAC/B,qBAAqB,EAAE,MAAM;IAC7B,oBAAoB,EAAE,MAAM;IAC5B,kBAAkB,EAAE,MAAM;IAC1B,iBAAiB,EAAE,IAAI;IACvB,aAAa,EAAE,MAAM;CACtB,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAA;AAEjC,MAAM,gBAAgB,GAAkB;IACtC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE;IAC9F,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE;IAChG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE;CACtG,CAAA;AAED,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,MAAM,MAAM,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE;QACjC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7B,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC;gBACnC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC1D,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAE,CAAA;QAC7B,MAAM,QAAQ,GAAG,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM;YACpE,CAAC,CAAC,CAAC,mBAA4B,CAAC;YAChC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,YAAqB,CAAC;gBACzC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,UAAmB,CAAC;oBACrC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,eAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACzD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAA;IAC/B,CAAC,CAAC,CAAA;IACF,OAAO;QACL,MAAM;QACN,WAAW,EAAE,MAAM,CAAC,CAAC,CAAE;QACvB,WAAW;QACX,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/E,
|
|
1
|
+
{"version":3,"file":"adaptive.js","sourceRoot":"","sources":["../src/adaptive.ts"],"names":[],"mappings":"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"}
|