@zeyue0329/xiaoma-cli 1.0.36 → 1.0.38

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 (89) hide show
  1. package/.idea/workspace.xml +27 -26
  2. package/JAVA-BACKEND-COMMANDS-REFERENCE.md +62 -52
  3. package/JAVA-BACKEND-ITERATION-GUIDE.md +125 -18
  4. package/README.md +1 -1
  5. package/common/utils/bmad-doc-template.md +5 -5
  6. package/dist/agents/analyst.txt +35 -5
  7. package/dist/agents/architect.txt +217 -31
  8. package/dist/agents/automation-orchestrator.txt +4 -4
  9. package/dist/agents/dev.txt +3 -3
  10. package/dist/agents/full-requirement-orchestrator.txt +11 -11
  11. package/dist/agents/qa.txt +102 -102
  12. package/dist/agents/sm.txt +6 -6
  13. package/dist/agents/ux-expert.txt +6 -1
  14. package/dist/agents/workflow-executor.txt +879 -0
  15. package/dist/agents/xiaoma-master.txt +258 -37
  16. package/dist/teams/team-all.txt +1223 -445
  17. package/dist/teams/team-fullstack-with-database.txt +384 -446
  18. package/dist/teams/team-fullstack.txt +258 -37
  19. package/dist/teams/team-ide-minimal.txt +111 -111
  20. package/dist/teams/team-no-ui.txt +252 -36
  21. package/docs/architecture-sharding-modification.md +623 -0
  22. package/docs/automated-requirements-analysis-outputs.md +896 -0
  23. package/package.json +1 -1
  24. package/tools/builders/web-builder.js +292 -142
  25. package/tools/bump-all-versions.js +50 -32
  26. package/tools/cli.js +52 -47
  27. package/tools/flattener/aggregate.js +30 -12
  28. package/tools/flattener/binary.js +46 -43
  29. package/tools/flattener/discovery.js +23 -15
  30. package/tools/flattener/files.js +6 -6
  31. package/tools/flattener/ignoreRules.js +122 -121
  32. package/tools/flattener/main.js +249 -144
  33. package/tools/flattener/projectRoot.js +74 -69
  34. package/tools/flattener/prompts.js +12 -10
  35. package/tools/flattener/stats.helpers.js +90 -61
  36. package/tools/flattener/stats.js +1 -1
  37. package/tools/flattener/test-matrix.js +225 -170
  38. package/tools/flattener/xml.js +31 -23
  39. package/tools/installer/bin/xiaoma.js +199 -153
  40. package/tools/installer/lib/config-loader.js +76 -47
  41. package/tools/installer/lib/file-manager.js +101 -44
  42. package/tools/installer/lib/ide-base-setup.js +49 -39
  43. package/tools/installer/lib/ide-setup.js +694 -380
  44. package/tools/installer/lib/installer.js +802 -469
  45. package/tools/installer/lib/memory-profiler.js +22 -12
  46. package/tools/installer/lib/module-manager.js +16 -14
  47. package/tools/installer/lib/resource-locator.js +61 -35
  48. package/tools/lib/dependency-resolver.js +34 -23
  49. package/tools/lib/yaml-utils.js +7 -2
  50. package/tools/preview-release-notes.js +33 -25
  51. package/tools/shared/bannerArt.js +3 -3
  52. package/tools/sync-installer-version.js +16 -7
  53. package/tools/upgraders/v3-to-v4-upgrader.js +244 -163
  54. package/tools/version-bump.js +24 -18
  55. package/tools/xiaoma-npx-wrapper.js +15 -10
  56. package/tools/yaml-format.js +60 -36
  57. package/xiaoma-core/agent-teams/team-fullstack-with-database.yaml +0 -1
  58. package/xiaoma-core/agents/automated-fix-validator.yaml +2 -1
  59. package/xiaoma-core/agents/automated-quality-validator.yaml +10 -5
  60. package/xiaoma-core/agents/automation-orchestrator.md +4 -4
  61. package/xiaoma-core/agents/dev.md +4 -4
  62. package/xiaoma-core/agents/enhanced-workflow-orchestrator.yaml +2 -1
  63. package/xiaoma-core/agents/full-requirement-orchestrator.md +11 -11
  64. package/xiaoma-core/agents/global-requirements-auditor.yaml +11 -3
  65. package/xiaoma-core/agents/intelligent-template-adapter.yaml +19 -5
  66. package/xiaoma-core/agents/master-execution-engine.yaml +19 -5
  67. package/xiaoma-core/agents/workflow-executor.md +126 -18
  68. package/xiaoma-core/agents/xiaoma-master.md +1 -1
  69. package/xiaoma-core/data/test-levels-framework.md +12 -12
  70. package/xiaoma-core/tasks/analyze-existing-database.md +1 -1
  71. package/xiaoma-core/tasks/apply-qa-fixes.md +3 -3
  72. package/xiaoma-core/tasks/batch-story-generation.md +22 -22
  73. package/xiaoma-core/tasks/create-enhanced-story-with-database.md +6 -6
  74. package/xiaoma-core/tasks/nfr-assess.md +6 -6
  75. package/xiaoma-core/tasks/project-integration-testing.md +42 -42
  76. package/xiaoma-core/tasks/qa-gate.md +23 -23
  77. package/xiaoma-core/tasks/review-story.md +18 -18
  78. package/xiaoma-core/tasks/risk-profile.md +25 -25
  79. package/xiaoma-core/tasks/serial-development-orchestration.md +51 -51
  80. package/xiaoma-core/tasks/test-design.md +9 -9
  81. package/xiaoma-core/tasks/trace-requirements.md +21 -21
  82. package/xiaoma-core/templates/competitor-analysis-tmpl.yaml +35 -5
  83. package/xiaoma-core/templates/front-end-architecture-tmpl.yaml +77 -11
  84. package/xiaoma-core/templates/front-end-spec-tmpl.yaml +6 -1
  85. package/xiaoma-core/templates/fullstack-architecture-tmpl.yaml +140 -20
  86. package/xiaoma-core/templates/global-qa-monitoring-tmpl.yaml +2 -1
  87. package/xiaoma-core/templates/requirements-coverage-audit.yaml +2 -1
  88. package/xiaoma-core/workflows/automated-requirements-analysis.yaml +4 -4
  89. package/dist/agents/database-architect.txt +0 -322
@@ -33,21 +33,21 @@ Identify all testable requirements from:
33
33
  For each requirement, document which tests validate it. Use Given-When-Then to describe what the test validates (not how it's written):
34
34
 
35
35
  ```yaml
36
- requirement: 'AC1: User can login with valid credentials'
36
+ requirement: "AC1: User can login with valid credentials"
37
37
  test_mappings:
38
- - test_file: 'auth/login.test.ts'
39
- test_case: 'should successfully login with valid email and password'
38
+ - test_file: "auth/login.test.ts"
39
+ test_case: "should successfully login with valid email and password"
40
40
  # Given-When-Then describes WHAT the test validates, not HOW it's coded
41
- given: 'A registered user with valid credentials'
42
- when: 'They submit the login form'
43
- then: 'They are redirected to dashboard and session is created'
41
+ given: "A registered user with valid credentials"
42
+ when: "They submit the login form"
43
+ then: "They are redirected to dashboard and session is created"
44
44
  coverage: full
45
45
 
46
- - test_file: 'e2e/auth-flow.test.ts'
47
- test_case: 'complete login flow'
48
- given: 'User on login page'
49
- when: 'Entering valid credentials and submitting'
50
- then: 'Dashboard loads with user data'
46
+ - test_file: "e2e/auth-flow.test.ts"
47
+ test_case: "complete login flow"
48
+ given: "User on login page"
49
+ when: "Entering valid credentials and submitting"
50
+ then: "Dashboard loads with user data"
51
51
  coverage: integration
52
52
  ```
53
53
 
@@ -69,19 +69,19 @@ Document any gaps found:
69
69
 
70
70
  ```yaml
71
71
  coverage_gaps:
72
- - requirement: 'AC3: Password reset email sent within 60 seconds'
73
- gap: 'No test for email delivery timing'
72
+ - requirement: "AC3: Password reset email sent within 60 seconds"
73
+ gap: "No test for email delivery timing"
74
74
  severity: medium
75
75
  suggested_test:
76
76
  type: integration
77
- description: 'Test email service SLA compliance'
77
+ description: "Test email service SLA compliance"
78
78
 
79
- - requirement: 'AC5: Support 1000 concurrent users'
80
- gap: 'No load testing implemented'
79
+ - requirement: "AC5: Support 1000 concurrent users"
80
+ gap: "No load testing implemented"
81
81
  severity: high
82
82
  suggested_test:
83
83
  type: performance
84
- description: 'Load test with 1000 concurrent connections'
84
+ description: "Load test with 1000 concurrent connections"
85
85
  ```
86
86
 
87
87
  ## Outputs
@@ -97,11 +97,11 @@ trace:
97
97
  full: Y
98
98
  partial: Z
99
99
  none: W
100
- planning_ref: 'qa.qaLocation/assessments/{epic}.{story}-test-design-{YYYYMMDD}.md'
100
+ planning_ref: "qa.qaLocation/assessments/{epic}.{story}-test-design-{YYYYMMDD}.md"
101
101
  uncovered:
102
- - ac: 'AC3'
103
- reason: 'No test found for password reset timing'
104
- notes: 'See qa.qaLocation/assessments/{epic}.{story}-trace-{YYYYMMDD}.md'
102
+ - ac: "AC3"
103
+ reason: "No test found for password reset timing"
104
+ notes: "See qa.qaLocation/assessments/{epic}.{story}-trace-{YYYYMMDD}.md"
105
105
  ```
106
106
 
107
107
  ### Output 2: Traceability Report
@@ -152,11 +152,29 @@ sections:
152
152
  rows:
153
153
  - category: "核心功能"
154
154
  items:
155
- - ["功能A", "{{status}}", "{{status}}", "{{status}}", "{{status}}"]
156
- - ["功能B", "{{status}}", "{{status}}", "{{status}}", "{{status}}"]
155
+ - [
156
+ "功能A",
157
+ "{{status}}",
158
+ "{{status}}",
159
+ "{{status}}",
160
+ "{{status}}",
161
+ ]
162
+ - [
163
+ "功能B",
164
+ "{{status}}",
165
+ "{{status}}",
166
+ "{{status}}",
167
+ "{{status}}",
168
+ ]
157
169
  - category: "用户体验"
158
170
  items:
159
- - ["移动应用", "{{rating}}", "{{rating}}", "{{rating}}", "{{rating}}"]
171
+ - [
172
+ "移动应用",
173
+ "{{rating}}",
174
+ "{{rating}}",
175
+ "{{rating}}",
176
+ "{{rating}}",
177
+ ]
160
178
  - ["上手时间", "{{time}}", "{{time}}", "{{time}}", "{{time}}"]
161
179
  - category: "集成与生态系统"
162
180
  items:
@@ -167,11 +185,23 @@ sections:
167
185
  "{{availability}}",
168
186
  "{{availability}}",
169
187
  ]
170
- - ["第三方集成", "{{number}}", "{{number}}", "{{number}}", "{{number}}"]
188
+ - [
189
+ "第三方集成",
190
+ "{{number}}",
191
+ "{{number}}",
192
+ "{{number}}",
193
+ "{{number}}",
194
+ ]
171
195
  - category: "定价与计划"
172
196
  items:
173
197
  - ["起步价", "{{price}}", "{{price}}", "{{price}}", "{{price}}"]
174
- - ["免费套餐", "{{yes_no}}", "{{yes_no}}", "{{yes_no}}", "{{yes_no}}"]
198
+ - [
199
+ "免费套餐",
200
+ "{{yes_no}}",
201
+ "{{yes_no}}",
202
+ "{{yes_no}}",
203
+ "{{yes_no}}",
204
+ ]
175
205
  - id: swot-comparison
176
206
  title: SWOT 对比
177
207
  instruction: 为你的解决方案与主要竞争对手创建 SWOT 分析
@@ -73,17 +73,83 @@ sections:
73
73
  columns: [类别, 技术, 版本, 用途, 选型理由]
74
74
  instruction: 根据所选框架和项目需求,填写适当的技术选型。
75
75
  rows:
76
- - ["框架", "{{framework}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
77
- - ["UI 库", "{{ui_library}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
78
- - ["状态管理", "{{state_management}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
79
- - ["路由", "{{routing_library}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
80
- - ["构建工具", "{{build_tool}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
81
- - ["样式方案", "{{styling_solution}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
82
- - ["测试", "{{test_framework}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
83
- - ["组件库", "{{component_lib}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
84
- - ["表单处理", "{{form_library}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
85
- - ["动画", "{{animation_lib}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
86
- - ["开发工具", "{{dev_tools}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
76
+ - [
77
+ "框架",
78
+ "{{framework}}",
79
+ "{{version}}",
80
+ "{{purpose}}",
81
+ "{{why_chosen}}",
82
+ ]
83
+ - [
84
+ "UI ",
85
+ "{{ui_library}}",
86
+ "{{version}}",
87
+ "{{purpose}}",
88
+ "{{why_chosen}}",
89
+ ]
90
+ - [
91
+ "状态管理",
92
+ "{{state_management}}",
93
+ "{{version}}",
94
+ "{{purpose}}",
95
+ "{{why_chosen}}",
96
+ ]
97
+ - [
98
+ "路由",
99
+ "{{routing_library}}",
100
+ "{{version}}",
101
+ "{{purpose}}",
102
+ "{{why_chosen}}",
103
+ ]
104
+ - [
105
+ "构建工具",
106
+ "{{build_tool}}",
107
+ "{{version}}",
108
+ "{{purpose}}",
109
+ "{{why_chosen}}",
110
+ ]
111
+ - [
112
+ "样式方案",
113
+ "{{styling_solution}}",
114
+ "{{version}}",
115
+ "{{purpose}}",
116
+ "{{why_chosen}}",
117
+ ]
118
+ - [
119
+ "测试",
120
+ "{{test_framework}}",
121
+ "{{version}}",
122
+ "{{purpose}}",
123
+ "{{why_chosen}}",
124
+ ]
125
+ - [
126
+ "组件库",
127
+ "{{component_lib}}",
128
+ "{{version}}",
129
+ "{{purpose}}",
130
+ "{{why_chosen}}",
131
+ ]
132
+ - [
133
+ "表单处理",
134
+ "{{form_library}}",
135
+ "{{version}}",
136
+ "{{purpose}}",
137
+ "{{why_chosen}}",
138
+ ]
139
+ - [
140
+ "动画",
141
+ "{{animation_lib}}",
142
+ "{{version}}",
143
+ "{{purpose}}",
144
+ "{{why_chosen}}",
145
+ ]
146
+ - [
147
+ "开发工具",
148
+ "{{dev_tools}}",
149
+ "{{version}}",
150
+ "{{purpose}}",
151
+ "{{why_chosen}}",
152
+ ]
87
153
 
88
154
  - id: project-structure
89
155
  title: 项目结构
@@ -279,7 +279,12 @@ sections:
279
279
  rows:
280
280
  - ["移动端", "{{mobile_min}}", "{{mobile_max}}", "{{mobile_devices}}"]
281
281
  - ["平板", "{{tablet_min}}", "{{tablet_max}}", "{{tablet_devices}}"]
282
- - ["桌面端", "{{desktop_min}}", "{{desktop_max}}", "{{desktop_devices}}"]
282
+ - [
283
+ "桌面端",
284
+ "{{desktop_min}}",
285
+ "{{desktop_max}}",
286
+ "{{desktop_devices}}",
287
+ ]
283
288
  - ["宽屏", "{{wide_min}}", "-", "{{wide_devices}}"]
284
289
  - id: adaptation-patterns
285
290
  title: 适配模式
@@ -155,27 +155,147 @@ sections:
155
155
  type: table
156
156
  columns: [类别, 技术, 版本, 用途, 理由]
157
157
  rows:
158
- - ["前端语言", "{{fe_language}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
159
- - ["前端框架", "{{fe_framework}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
160
- - ["UI 组件库", "{{ui_library}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
161
- - ["状态管理", "{{state_mgmt}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
162
- - ["后端语言", "{{be_language}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
163
- - ["后端框架", "{{be_framework}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
164
- - ["API 风格", "{{api_style}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
165
- - ["数据库", "{{database}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
166
- - ["缓存", "{{cache}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
167
- - ["文件存储", "{{storage}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
158
+ - [
159
+ "前端语言",
160
+ "{{fe_language}}",
161
+ "{{version}}",
162
+ "{{purpose}}",
163
+ "{{why_chosen}}",
164
+ ]
165
+ - [
166
+ "前端框架",
167
+ "{{fe_framework}}",
168
+ "{{version}}",
169
+ "{{purpose}}",
170
+ "{{why_chosen}}",
171
+ ]
172
+ - [
173
+ "UI 组件库",
174
+ "{{ui_library}}",
175
+ "{{version}}",
176
+ "{{purpose}}",
177
+ "{{why_chosen}}",
178
+ ]
179
+ - [
180
+ "状态管理",
181
+ "{{state_mgmt}}",
182
+ "{{version}}",
183
+ "{{purpose}}",
184
+ "{{why_chosen}}",
185
+ ]
186
+ - [
187
+ "后端语言",
188
+ "{{be_language}}",
189
+ "{{version}}",
190
+ "{{purpose}}",
191
+ "{{why_chosen}}",
192
+ ]
193
+ - [
194
+ "后端框架",
195
+ "{{be_framework}}",
196
+ "{{version}}",
197
+ "{{purpose}}",
198
+ "{{why_chosen}}",
199
+ ]
200
+ - [
201
+ "API 风格",
202
+ "{{api_style}}",
203
+ "{{version}}",
204
+ "{{purpose}}",
205
+ "{{why_chosen}}",
206
+ ]
207
+ - [
208
+ "数据库",
209
+ "{{database}}",
210
+ "{{version}}",
211
+ "{{purpose}}",
212
+ "{{why_chosen}}",
213
+ ]
214
+ - [
215
+ "缓存",
216
+ "{{cache}}",
217
+ "{{version}}",
218
+ "{{purpose}}",
219
+ "{{why_chosen}}",
220
+ ]
221
+ - [
222
+ "文件存储",
223
+ "{{storage}}",
224
+ "{{version}}",
225
+ "{{purpose}}",
226
+ "{{why_chosen}}",
227
+ ]
168
228
  - ["认证", "{{auth}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
169
- - ["前端测试", "{{fe_test}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
170
- - ["后端测试", "{{be_test}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
171
- - ["E2E 测试", "{{e2e_test}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
172
- - ["构建工具", "{{build_tool}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
173
- - ["打包工具", "{{bundler}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
174
- - ["IaC 工具", "{{iac_tool}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
175
- - ["CI/CD", "{{cicd}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
176
- - ["监控", "{{monitoring}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
177
- - ["日志", "{{logging}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
178
- - ["CSS 框架", "{{css_framework}}", "{{version}}", "{{purpose}}", "{{why_chosen}}"]
229
+ - [
230
+ "前端测试",
231
+ "{{fe_test}}",
232
+ "{{version}}",
233
+ "{{purpose}}",
234
+ "{{why_chosen}}",
235
+ ]
236
+ - [
237
+ "后端测试",
238
+ "{{be_test}}",
239
+ "{{version}}",
240
+ "{{purpose}}",
241
+ "{{why_chosen}}",
242
+ ]
243
+ - [
244
+ "E2E 测试",
245
+ "{{e2e_test}}",
246
+ "{{version}}",
247
+ "{{purpose}}",
248
+ "{{why_chosen}}",
249
+ ]
250
+ - [
251
+ "构建工具",
252
+ "{{build_tool}}",
253
+ "{{version}}",
254
+ "{{purpose}}",
255
+ "{{why_chosen}}",
256
+ ]
257
+ - [
258
+ "打包工具",
259
+ "{{bundler}}",
260
+ "{{version}}",
261
+ "{{purpose}}",
262
+ "{{why_chosen}}",
263
+ ]
264
+ - [
265
+ "IaC 工具",
266
+ "{{iac_tool}}",
267
+ "{{version}}",
268
+ "{{purpose}}",
269
+ "{{why_chosen}}",
270
+ ]
271
+ - [
272
+ "CI/CD",
273
+ "{{cicd}}",
274
+ "{{version}}",
275
+ "{{purpose}}",
276
+ "{{why_chosen}}",
277
+ ]
278
+ - [
279
+ "监控",
280
+ "{{monitoring}}",
281
+ "{{version}}",
282
+ "{{purpose}}",
283
+ "{{why_chosen}}",
284
+ ]
285
+ - [
286
+ "日志",
287
+ "{{logging}}",
288
+ "{{version}}",
289
+ "{{purpose}}",
290
+ "{{why_chosen}}",
291
+ ]
292
+ - [
293
+ "CSS 框架",
294
+ "{{css_framework}}",
295
+ "{{version}}",
296
+ "{{purpose}}",
297
+ "{{why_chosen}}",
298
+ ]
179
299
 
180
300
  - id: data-models
181
301
  title: 数据模型
@@ -90,7 +90,8 @@ real_time_dashboard:
90
90
 
91
91
  - widget: "resolution_progress"
92
92
  display: "Kanban Board"
93
- columns: ["identified", "assigned", "in_progress", "validation", "resolved"]
93
+ columns:
94
+ ["identified", "assigned", "in_progress", "validation", "resolved"]
94
95
  drag_drop: false # 只读视图
95
96
 
96
97
  - widget: "sla_compliance"
@@ -245,7 +245,8 @@ quality_check_rules:
245
245
  criticality: "HIGH"
246
246
 
247
247
  - element: "开发者代理记录"
248
- required_subsections: ["使用的代理模型", "数据库实现记录", "API实现记录", "文件列表"]
248
+ required_subsections:
249
+ ["使用的代理模型", "数据库实现记录", "API实现记录", "文件列表"]
249
250
  criticality: "LOW"
250
251
 
251
252
  # 实施状态验证规则
@@ -1061,7 +1061,7 @@ workflow:
1061
1061
  action: proceed_to_architecture_design
1062
1062
  message: "✅ 所有史诗创建完成,准备进行技术架构设计"
1063
1063
 
1064
- notes: |
1064
+ detailed_notes: |
1065
1065
  PM 拆分史诗的完整流程:
1066
1066
  1. 保持 PM Agent 激活状态
1067
1067
  2. 从 PRD 的"实施计划"部分提取史诗清单
@@ -1521,9 +1521,9 @@ workflow:
1521
1521
  - 下一阶段:用户故事创建和细化
1522
1522
  - 建议使用:automated-story-development.yaml 工作流
1523
1523
  - 前置条件已满足:
1524
- - Epic 文档已创建
1525
- - 数据库设计已完成
1526
- - 架构设计已完成
1524
+ - Epic 文档已创建
1525
+ - 数据库设计已完成
1526
+ - 架构设计已完成
1527
1527
 
1528
1528
  section_4_metrics:
1529
1529
  - 识别的 Epic 数量