jsharness 1.0.0

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.
Files changed (68) hide show
  1. package/.harness/README.md +199 -0
  2. package/.harness/agents/code-reviewer/contract.yaml +64 -0
  3. package/.harness/agents/developer/contract.yaml +72 -0
  4. package/.harness/agents/gate-controller/contract.yaml +64 -0
  5. package/.harness/agents/project-manager/contract.yaml +77 -0
  6. package/.harness/agents/prompt-templates.md +352 -0
  7. package/.harness/agents/requirements-analyst/contract.yaml +64 -0
  8. package/.harness/agents/solution-designer/contract.yaml +75 -0
  9. package/.harness/agents/tester/contract.yaml +92 -0
  10. package/.harness/config/models.yaml +67 -0
  11. package/.harness/dev-map/backend/api-definition.md +131 -0
  12. package/.harness/dev-map/backend/auth-security.md +131 -0
  13. package/.harness/dev-map/backend/conventions-java.md +471 -0
  14. package/.harness/dev-map/backend/conventions.md +192 -0
  15. package/.harness/dev-map/backend/database.md +106 -0
  16. package/.harness/dev-map/backend/structure.md +140 -0
  17. package/.harness/dev-map/decisions.md +275 -0
  18. package/.harness/dev-map/frontend/api-integration.md +139 -0
  19. package/.harness/dev-map/frontend/components.md +178 -0
  20. package/.harness/dev-map/frontend/conventions.md +416 -0
  21. package/.harness/dev-map/frontend/state-management.md +170 -0
  22. package/.harness/dev-map/frontend/structure.md +103 -0
  23. package/.harness/dev-map/overview.md +267 -0
  24. package/.harness/docs/integration-test-plan.md +248 -0
  25. package/.harness/docs/team-guidelines/README.md +161 -0
  26. package/.harness/docs/team-guidelines/arch-team.md +811 -0
  27. package/.harness/docs/team-guidelines/collaboration.md +556 -0
  28. package/.harness/docs/team-guidelines/pm-team.md +337 -0
  29. package/.harness/docs/team-guidelines/qa-team.md +562 -0
  30. package/.harness/docs/team-guidelines/rd-team.md +714 -0
  31. package/.harness/docs/training-materials.md +280 -0
  32. package/.harness/gate/baseline.js +220 -0
  33. package/.harness/gate/checks/build-gates-frontend.js +152 -0
  34. package/.harness/gate/checks/build-gates-java.js +155 -0
  35. package/.harness/gate/checks/build-gates.js +119 -0
  36. package/.harness/gate/checks/engineering-consistency.js +138 -0
  37. package/.harness/gate/checks/security-quality.js +129 -0
  38. package/.harness/gate/checks/static-compliance.js +313 -0
  39. package/.harness/gate/checks/test-compliance.js +114 -0
  40. package/.harness/gate/index.js +315 -0
  41. package/.harness/mcp/config.yaml +435 -0
  42. package/.harness/rules/global/coding-standard.md +232 -0
  43. package/.harness/rules/global/commit-convention.md +165 -0
  44. package/.harness/rules/global/process-discipline.md +192 -0
  45. package/.harness/rules/global/security-baseline.md +306 -0
  46. package/.harness/rules/project/frontend-vue3.md +293 -0
  47. package/.harness/rules/project/java-backend.md +460 -0
  48. package/.harness/rules/project/web-specific.md +231 -0
  49. package/.harness/skills/build.md +192 -0
  50. package/.harness/skills/code-review.md +251 -0
  51. package/.harness/skills/docker-build.md +227 -0
  52. package/.harness/skills/docs-update.md +164 -0
  53. package/.harness/skills/java-build.md +261 -0
  54. package/.harness/skills/lint-check.md +482 -0
  55. package/.harness/skills/task-board-maintenance.md +105 -0
  56. package/.harness/skills/test-api.md +461 -0
  57. package/.harness/skills/test-e2e.md +431 -0
  58. package/.harness/skills/test-unit.md +649 -0
  59. package/.harness/skills/vue-frontend-build.md +344 -0
  60. package/.harness/specs/quality-feedback/implementation-guide.md +350 -0
  61. package/.harness/task-board.md +121 -0
  62. package/.harness/workflow/definition.yaml +504 -0
  63. package/.harness/workflow/validate.js +320 -0
  64. package/.harness/workflow/variants.yaml +253 -0
  65. package/README.md +237 -0
  66. package/bin/jsharness.js +53 -0
  67. package/lib/index.mjs +778 -0
  68. package/package.json +1 -0
@@ -0,0 +1,482 @@
1
+ # 静态检查技能 (lint-check)
2
+
3
+ > **执行角色**: 开发实现 Agent / 代码审查 Agent / Gate Scripts
4
+ > **触发时机**: 每次 commit 前、PR 提交时、Gate 门禁检查时
5
+
6
+ ---
7
+
8
+ ## ESLint / Prettier 执行
9
+
10
+ ### 基础命令
11
+
12
+ ```bash
13
+ # ESLint 全量检查
14
+ npx eslint . --ext .ts,.tsx,.js,.jsx --max-warnings 0
15
+
16
+ # 只检查变更文件(推荐用于 Git Hooks)
17
+ npx eslint $(git diff --name-only --diff-filter=ACM | grep -E '\.(ts|tsx|js|jsx)$')
18
+
19
+ # Prettier 格式化检查
20
+ npx prettier --check "src/**/*.{ts,tsx,js,jsx,css,json,md}"
21
+
22
+ # 自动修复
23
+ npx eslint . --fix && npx prettier --write "src/**/*.{ts,tsx,js,jsx}"
24
+ ```
25
+
26
+ ### ESLint 配置基准(flat config 示例)
27
+
28
+ ```javascript
29
+ // eslint.config.js
30
+ import js from '@eslint/js';
31
+ import tseslint from 'typescript-eslint';
32
+ import vuePlugin from 'eslint-plugin-vue';
33
+
34
+ export default tseslint.config(
35
+ js.configs.recommended,
36
+ ...tseslint.configs.recommended,
37
+ ...vuePlugin.configs['flat/recommended'],
38
+ {
39
+ plugins: {
40
+ 'vue': vuePlugin,
41
+ },
42
+ rules: {
43
+ // === 错误级别 ===
44
+ 'no-console': 'error',
45
+ 'no-debugger': 'error',
46
+ 'no-unused-vars': 'error',
47
+ '@typescript-eslint/no-explicit-any': 'error',
48
+ '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
49
+
50
+ // === Vue3 核心规则 ===
51
+ 'vue/multi-word-component-names': 'off',
52
+ 'vue/require-default-prop': 'off',
53
+ 'vue/no-unused-vars': 'error',
54
+ 'vue/no-mutating-props': 'error',
55
+ 'vue/require-v-for-key': 'error',
56
+
57
+ // === 风格一致性 ===
58
+ 'eqeqeq': ['error', 'always'],
59
+ 'curly': ['error', 'all'],
60
+ 'prefer-const': 'error',
61
+ 'no-var': 'error',
62
+ },
63
+ ignores: [
64
+ 'dist/**',
65
+ 'node_modules/**',
66
+ 'coverage/**',
67
+ '*.config.js',
68
+ '*.config.ts',
69
+ ],
70
+ }
71
+ );
72
+ ```
73
+
74
+ ---
75
+
76
+ ## 安全扫描(npm audit / SAST)
77
+
78
+ ### npm Audit
79
+
80
+ ```bash
81
+ # 扫描依赖漏洞
82
+ npm audit
83
+
84
+ # JSON 格式输出(供 Gate 脚本解析)
85
+ npm audit --json
86
+
87
+ # 按级别过滤
88
+ # 门禁标准:HIGH 和 CRITICAL 必须 = 0
89
+ ```
90
+
91
+ ### 漏洞分级处理
92
+
93
+ | 严重程度 | 数量限制 | 处理方式 |
94
+ |----------|---------|----------|
95
+ | CRITICAL | **= 0** | 门禁 FAIL,立即修复 |
96
+ | HIGH | **= 0** | 门禁 FAIL,24 小时内修复 |
97
+ | MODERATE | ≤ 5 | 记录警告,下次迭代修复 |
98
+ | LOW | 不限 | 记录,低优先级跟踪 |
99
+
100
+ ### Secret 扫描(Git History 检测)
101
+
102
+ ```bash
103
+ # 检测 git 历史中的密钥泄露
104
+ npx detect-secrets scan [--baseline .secrets.baseline]
105
+
106
+ # 或者使用 Gitleaks
107
+ gitleaks detect --source . -v
108
+ ```
109
+
110
+ **检测目标**:
111
+ - AWS Access Key / Secret Key
112
+ - GitHub Personal Access Token
113
+ - JWT Secret
114
+ - Database Connection Strings
115
+ - Private Keys (.pem, .key)
116
+ - API Keys (Google, Stripe, etc.)
117
+ - Passwords in URLs
118
+
119
+ ---
120
+
121
+ ## 结果汇总与分级
122
+
123
+ ### 输出格式
124
+
125
+ ```yaml
126
+ lint_result:
127
+ timestamp: "2026-05-20T22:00:00Z"
128
+ tool: "eslint + prettier + npm-audit + gitleaks"
129
+ overall_status: pass | warning | fail
130
+
131
+ categories:
132
+ eslint:
133
+ status: pass
134
+ errors: 0
135
+ warnings: 0
136
+ files_scanned: 142
137
+
138
+ prettier:
139
+ status: pass
140
+ unformatted_files: 0
141
+
142
+ security:
143
+ npm_audit:
144
+ critical: 0
145
+ high: 0
146
+ moderate: 2
147
+ low: 8
148
+ secret_scan:
149
+ findings: 0
150
+ secrets_found: []
151
+
152
+ details:
153
+ issues: [] # 空 = 通过
154
+ # issues:
155
+ # - file: "src/utils/helper.ts"
156
+ # line: 23
157
+ # rule: "no-console"
158
+ # severity: "error"
159
+ # message: "Unexpected console.log"
160
+ ```
161
+
162
+ ### 状态判定规则
163
+
164
+ ```javascript
165
+ function determineStatus(result) {
166
+ // FAIL 条件(任一满足即 FAIL)
167
+ if (result.eslint.errors > 0) return 'fail';
168
+ if (result.security.npm_audit.critical > 0) return 'fail';
169
+ if (result.security.npm_audit.high > 0) return 'fail';
170
+ if (result.security.secret_scan.findings > 0) return 'fail';
171
+
172
+ // WARNING 条件
173
+ if (result.eslint.warnings > 0) return 'warning';
174
+ if (result.prettier.unformatted_files > 0) return 'warning';
175
+ if (result.security.npm_audit.moderate > 5) return 'warning';
176
+
177
+ // PASS
178
+ return 'pass';
179
+ }
180
+ ```
181
+
182
+ ### 白名单机制
183
+
184
+ 某些情况允许例外(需在 `.harness/config/lint-whitelist.yaml` 中登记):
185
+
186
+ ```yaml
187
+ whitelist:
188
+ rules:
189
+ - rule: "no-console"
190
+ reason: "CLI 工具入口文件需要 console 输出"
191
+ files: ["src/cli/index.ts"]
192
+ expires: "2026-06-30" # 白名单必须有到期日
193
+
194
+ paths:
195
+ - path: "src/legacy/"
196
+ reason: "遗留代码重构中,计划 Q3 完成"
197
+ expires: "2026-09-30"
198
+ ```
199
+
200
+ ---
201
+
202
+ # ════════════════════════════════════════════════════════
203
+ # Java 后端静态检查(Checkstyle + PMD + SpotBugs)
204
+ # ════════════════════════════════════════════════════════
205
+
206
+ > **适用技术栈**: Spring Boot / JDK21
207
+ > **参考规则**: `rules/project/java-backend.md` §命名规范
208
+
209
+ ---
210
+
211
+ ## Checkstyle — 代码风格检查
212
+
213
+ ### Maven 执行
214
+
215
+ ```bash
216
+ # 运行 Checkstyle 检查
217
+ mvn checkstyle:check
218
+
219
+ # 查看详细报告(不阻塞)
220
+ mvn checkstyle:checkstyle
221
+
222
+ # 报告位置
223
+ # target/site/checkstyle.html # HTML 可视化报告
224
+ # target/site/checkstyle-result.xml # XML 格式原始数据
225
+ ```
226
+
227
+ ### 推荐规则集配置
228
+
229
+ | 规则集 | 适用场景 | 严格度 |
230
+ |--------|---------|--------|
231
+ | `google_checks.xml` | 通用 Java 项目 | 中等 |
232
+ | `sun_checks.xml` | Sun/Oracle 风格 | 较松 |
233
+ | **自定义** (推荐) | 公司内部标准 | **按规范** |
234
+
235
+ ### pom.xml 插件配置(推荐)
236
+
237
+ ```xml
238
+ <plugin>
239
+ <groupId>org.apache.maven.plugins</groupId>
240
+ <artifactId>maven-checkstyle-plugin</artifactId>
241
+ <version>3.3.1</version>
242
+ <configuration>
243
+ <configLocation>checkstyle/custom-checks.xml</configLocation>
244
+ <encoding>UTF-8</encoding>
245
+ <consoleOutput>true</consoleOutput>
246
+ <failsOnError>true</failsOnError>
247
+ <!-- 排除自动生成的代码 -->
248
+ <excludes>**/entity/**,**/dto/**,**/vo/**</excludes>
249
+ </configuration>
250
+ <executions>
251
+ <execution>
252
+ <id>validate</id>
253
+ <phase>validate</phase>
254
+ <goals><goal>check</goal></goals>
255
+ </execution>
256
+ </executions>
257
+ </plugin>
258
+ ```
259
+
260
+ ### 常见违规及修复
261
+
262
+ | 违规 ID | 说明 | 修复方式 |
263
+ |---------|------|----------|
264
+ | `FileLength` | 单文件过长 (>1000 行) | 拆分职责到多个类 |
265
+ | `MethodLength` | 方法过长 (>50 行) | 提取子方法 |
266
+ | `LineLength` | 行超长 (>120 字符) | 换行或提取变量 |
267
+ | `JavadocMethod` | 缺少 Javadoc 注释 | 补充方法注释 |
268
+ | `MissingOverride` | 缺少 @Override | 添加注解 |
269
+
270
+ ---
271
+
272
+ ## PMD — 代码质量分析
273
+
274
+ ### Maven 执行
275
+
276
+ ```bash
277
+ # 运行 PMD 分析
278
+ mvn pmd:pmd # 生成报告
279
+ mvn pmd:check # 门禁检查(失败则 build 失败)
280
+
281
+ # 报告位置
282
+ # target/site/pmd.html # HTML 报告
283
+ # target/pmd.xml # XML 原始数据
284
+ ```
285
+
286
+ ### 常见问题模式分类
287
+
288
+ | 类别 | 示例 | 严重度 |
289
+ |------|------|--------|
290
+ | **代码复杂度** | CyclomaticComplexity > 10 | 🔴 高 |
291
+ | **空指针风险** | NullAssignment / ReturnNullFromCollection | 🔴 高 |
292
+ | **性能问题** | AvoidInstantiatingObjectsInLoops | 🟡 中 |
293
+ | **代码风格** | LongVariable / ShortVariable | ⚠️ 低 |
294
+ | **最佳实践** | UseArrayListInsteadOfVector | 🟡 中 |
295
+
296
+ ### pom.xml 配置示例
297
+
298
+ ```xml
299
+ <plugin>
300
+ <groupId>org.apache.maven.plugins</groupId>
301
+ <artifactId>maven-pmd-plugin</artifactId>
302
+ <version>3.21.2</version>
303
+ <configuration>
304
+ <rulesets>
305
+ <ruleset>pmd/rules/java-best-practices.xml</ruleset>
306
+ <ruleset>pmd/rules/java-codesize.xml</ruleset>
307
+ </rulesets>
308
+ <failOnViolation>true</failOnViolation>
309
+ <excludeFromFailureFile>pmd-exclude.properties</excludeFromFailureFile>
310
+ </configuration>
311
+ </plugin>
312
+ ```
313
+
314
+ ---
315
+
316
+ ## SpotBugs — Bug 模式检测
317
+
318
+ ### Maven 执行
319
+
320
+ ```bash
321
+ # 运行 SpotBugs 扫描
322
+ mvn spotbugs:spotbugs # 生成报告
323
+ mvn spotbugs:check # 门禁检查
324
+
325
+ # 报告位置
326
+ # target/spotbugsXml.xml # XML 报告
327
+ # target/spotbugsHtml.html # HTML 可视化报告(可选)
328
+ ```
329
+
330
+ ### 必须修复的高优先级 Bug 模式
331
+
332
+ | Bug 模式 | 说明 | 风险 |
333
+ |----------|------|------|
334
+ | **NP_NULL_ON_SOME_PATH** | 可能的空指针解引用 | NPE 导致服务崩溃 |
335
+ | **OS_OPEN_STREAM** | 流未关闭 | 资源泄漏 |
336
+ | **SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE** | SQL 注入风险 | 安全漏洞! |
337
+ | **EI_EXPOSE_REP** | 内部状态可被外部修改 | 数据不一致 |
338
+ | **DM_CONVERTED_MAP** | HashMap 的 key 类型可能不一致 | ClassCastException |
339
+
340
+ ### pom.xml 配置示例
341
+
342
+ ```xml
343
+ <plugin>
344
+ <groupId>com.github.spotbugs</groupId>
345
+ <artifactId>spotbugs-maven-plugin</artifactId>
346
+ <version>4.8.3.1</version>
347
+ <configuration>
348
+ <effort>Max</effort>
349
+ <threshold>Low</threshold>
350
+ <failOnError>true</failOnError>
351
+ <excludeFilterFile>spotbugs-exclude.xml</excludeFilterFile>
352
+ <plugins>
353
+ <plugin>
354
+ <groupId>com.mebigfatguy.sbcontrib</groupId>
355
+ <artifactId>sbcontrib</artifactId>
356
+ <version>7.6.0</version>
357
+ </plugin>
358
+ </plugins>
359
+ </configuration>
360
+ <executions>
361
+ <execution>
362
+ <phase>verify</phase>
363
+ <goals><goal>check</goal></goals>
364
+ </execution>
365
+ </executions>
366
+ </plugin>
367
+ ```
368
+
369
+ ---
370
+
371
+ ## SonarQube — 代码质量平台
372
+
373
+ ### 本地启动 SonarQube(开发环境)
374
+
375
+ ```bash
376
+ # Docker 启动本地 SonarQube(快速验证用)
377
+ docker run -d --name sonarqube \
378
+ -p 9000:9000 \
379
+ -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true \
380
+ sonarqube:community
381
+
382
+ # 访问 http://localhost:9000 (默认 admin/admin)
383
+ ```
384
+
385
+ ### 项目扫描命令
386
+
387
+ ```bash
388
+ # Maven 方式扫描(推荐)
389
+ mvn sonar:sonar \
390
+ -Dsonar.host.url=http://localhost:9000 \
391
+ -Dsonar.login=YOUR_TOKEN \
392
+ -Dsonar.projectKey=com.jieshun:backend \
393
+ -Dsonar.sources=src/main/java \
394
+ -Dsonar.tests=src/test/java \
395
+ -Dsonar.java.binaries=target/classes \
396
+ -Dsonar.junit.reportPaths=target/surefire-reports \
397
+ -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml
398
+
399
+ # CI 环境变量注入(避免硬编码 token)
400
+ # SONAR_TOKEN=xxx mvn sonar:sonar -Dsonar.host.url=$SONAR_URL
401
+ ```
402
+
403
+ ### Quality Gate 标准
404
+
405
+ | 维度 | 门禁值 | 说明 |
406
+ |------|--------|------|
407
+ | 覆盖率 (Coverage on New Code) | ≥ 80% | 新增代码必须达标 |
408
+ | Duplicated Lines (%) | ≤ 3% | 新增重复代码限制 |
409
+ | Maintainability Rating | A | 新增代码可维护性评级 |
410
+ | Reliability Rating | A/B | 新增代码可靠性 |
411
+ | Security Hotspots Reviewed | 100% | 安全热点必须审查 |
412
+ | Security Rating | A/B | 安全等级 |
413
+ | Blocker Issues | = 0 | 阻断级问题为零 |
414
+ | Critical Issues | = 0 | 严重问题为零 |
415
+
416
+ ---
417
+
418
+ ## Java Lint 结果汇总模板
419
+
420
+ ```yaml
421
+ lint_result_java:
422
+ timestamp: "2026-05-20T22:00:00Z"
423
+ tools: "Checkstyle + PMD + SpotBugs (+ SonarQube)"
424
+ project_type: "java"
425
+ overall_status: pass | warning | fail
426
+
427
+ categories:
428
+ checkstyle:
429
+ status: pass
430
+ errors: 0
431
+ warnings: 3 # 不阻断但需记录
432
+ files_scanned: 142
433
+
434
+ pmd:
435
+ violations_by_priority:
436
+ blocker: 0
437
+ high: 1
438
+ medium: 5
439
+ low: 12
440
+
441
+ spotbugs:
442
+ bug_categories:
443
+ correctness: 2 # NP_NULL 等
444
+ bad_practice: 1
445
+ performance: 0
446
+ security: 0 # 必须为 0!
447
+
448
+ sonarqube:
449
+ quality_gate: PASS
450
+ new_code_coverage_pct: 84.2
451
+ new_violations: 2
452
+ new_security_hotspots: 0
453
+
454
+ details:
455
+ issues: [] # 空 = 通过
456
+ # issues:
457
+ # - file: "src/main/java/com/jieshun/service/UserService.java"
458
+ # line: 45
459
+ # tool: "SpotBugs"
460
+ # pattern: "NP_NULL_ON_SOME_PATH"
461
+ # severity: "high"
462
+ ```
463
+
464
+ ### 状态判定规则(Java)
465
+
466
+ ```javascript
467
+ function determineJavaStatus(result) {
468
+ // FAIL 条件
469
+ if (result.checkstyle.errors > 0) return 'fail';
470
+ if (result.pmd.violations.blocker > 0) return 'fail';
471
+ if (result.spotbugs.bug_categories.security > 0) return 'fail'; // 安全红线
472
+ if (result.sonarqube.quality_gate === 'FAIL') return 'fail';
473
+
474
+ // WARNING 条件
475
+ if (result.pmd.violations.high > 0) return 'warning';
476
+ if (result.spotbugs.bug_categories.correctness > 3) return 'warning';
477
+ if (result.checkstyle.warnings > 10) return 'warning';
478
+
479
+ // PASS
480
+ return 'pass';
481
+ }
482
+ ```
@@ -0,0 +1,105 @@
1
+ # TaskBoard 维护 Skill
2
+
3
+ > **执行角色**: PM Agent / 工作流引擎
4
+ > **触发时机**: 任务状态变更时、每日定时、周报生成前
5
+
6
+ ---
7
+
8
+ ## 操作清单
9
+
10
+ ### 1. 新任务注册
11
+
12
+ 当 PM 收到新需求时:
13
+
14
+ ```markdown
15
+ - [ ] 1. 分配 Task ID(格式:TASK-YYYYMMDD-NNN)
16
+ - [ ] 2. 判断流程变体类型
17
+ - [ ] 新功能 → 标准七阶段流程
18
+ - [ ] Bug 修复 → Bug 修复轻量流程
19
+ - [ ] P0/P1 生产问题 → 热修最快路径
20
+ - [ ] 文档/配置变更 → 微型流程
21
+ - [ ] 安全漏洞 → 安全响应流程
22
+ - [ ] 3. 在「待开始任务」表添加一行
23
+ - [ ] 4. 检查是否与历史任务重复(搜索 TaskBoard 和已关闭的 Issue)
24
+ - [ ] 5. 如有关联的 Issue/PR,填入对应编号
25
+ - [ ] 6. 更新「新增需求」计数器
26
+ ```
27
+
28
+ ### 2. 状态推进
29
+
30
+ 当一个阶段完成,需要推入下一阶段:
31
+
32
+ ```markdown
33
+ - [ ] 1. 从当前区域移动目标任务到下一区域
34
+ - [ ] 2. 更新「当前阶段」字段
35
+ - [ ] 3. 更新「负责Agent」字段为下一个角色
36
+ - [ ] 4. 更新「上次更新」为当前时间
37
+ - [ ] 5. 在备注中记录简要原因(可选)
38
+ - [ ] 6. 如果是打回,在「备注」中注明打回原因和来源角色
39
+ ```
40
+
41
+ ### 3. 交付归档
42
+
43
+ 测试 PASS 后:
44
+
45
+ ```markdown
46
+ - [ ] 1. 移动到「已完成」区域
47
+ - [ ] 2. 填写「交付结论」
48
+ - [ ] PASS: 全部检查通过,无遗留问题
49
+ - [ ] CONDITIONAL_PASS: 通过但有必修项需跟踪
50
+ - [ ] 3. 计算「实际周期」(从进入开发到完成的自然日天数)
51
+ - [ ] 4. 填写「归档日期」
52
+ - [ ] 5. 收集并填写各阶段的文档链接
53
+ - [ ] 6. 更新度量指标
54
+ ```
55
+
56
+ ### 4. 度量数据计算
57
+
58
+ ```yaml
59
+ metrics:
60
+ # 每次操作后自动更新
61
+ new_requirements_count:
62
+ calculation: "统计本周新增的任务数量"
63
+
64
+ completed_delivery_count:
65
+ calculation: "统计本周归档到已完成区的任务数量"
66
+
67
+ avg_cycle_time_days:
68
+ calculation: "已完成任务的 actual_cycle_time 平均值"
69
+
70
+ rollback_rate:
71
+ formula: "(总打回次数 / 总完成任务数) × 100"
72
+ target: "< 15%"
73
+
74
+ blocked_tasks_count:
75
+ calculation: "当前处于 HOLD 或 BLOCK 状态的任务数"
76
+
77
+ process_violation_count:
78
+ calculation: "本周期内 process-discipline 违规次数"
79
+
80
+ stage_load_balance:
81
+ check: "任一阶段的进行中任务数 > 3 时发出警告"
82
+
83
+ # 周报数据点
84
+ weekly_report_data_points:
85
+ - velocity: "每周完成的需求总数"
86
+ - lead_time: "从需求接收到交付的平均天数"
87
+ - quality_score: "Gate 通过率平均值"
88
+ - team_utilization: "各 Agent 的任务分布均匀度"
89
+ ```
90
+
91
+ ### 5. 定期维护
92
+
93
+ ```markdown
94
+ ## 每日检查(PM Agent 自动执行)
95
+ - [ ] 检查是否有超时未更新的任务(超过 48 小时的进行中任务)
96
+ - [ ] 检查是否有阻塞超过 24 小时的任务
97
+ - [ ] 更新「最后更新」时间戳
98
+
99
+ ## 每周清理(PM Agent 手动执行)
100
+ - [ ] 清理已取消或合并的重复条目
101
+ - [ ] 确认已完成任务都已正确归档
102
+ - [ ] 生成周度度量报告
103
+ - [ ] 识别瓶颈阶段(哪个阶段积压最多)
104
+ - [ ] 汇总流程违规情况并提出改进建议
105
+ ```