@zhanlucode/zl-darwin-arm64 1.5.87028

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 (91) hide show
  1. package/LICENSE +22 -0
  2. package/bin/rg +0 -0
  3. package/bin/tree-sitter/tree-sitter-bash.wasm +0 -0
  4. package/bin/tree-sitter/tree-sitter-c.wasm +0 -0
  5. package/bin/tree-sitter/tree-sitter-c_sharp.wasm +0 -0
  6. package/bin/tree-sitter/tree-sitter-cpp.wasm +0 -0
  7. package/bin/tree-sitter/tree-sitter-css.wasm +0 -0
  8. package/bin/tree-sitter/tree-sitter-dart.wasm +0 -0
  9. package/bin/tree-sitter/tree-sitter-elisp.wasm +0 -0
  10. package/bin/tree-sitter/tree-sitter-elixir.wasm +0 -0
  11. package/bin/tree-sitter/tree-sitter-elm.wasm +0 -0
  12. package/bin/tree-sitter/tree-sitter-embedded_template.wasm +0 -0
  13. package/bin/tree-sitter/tree-sitter-go.wasm +0 -0
  14. package/bin/tree-sitter/tree-sitter-html.wasm +0 -0
  15. package/bin/tree-sitter/tree-sitter-java.wasm +0 -0
  16. package/bin/tree-sitter/tree-sitter-javascript.wasm +0 -0
  17. package/bin/tree-sitter/tree-sitter-json.wasm +0 -0
  18. package/bin/tree-sitter/tree-sitter-kotlin.wasm +0 -0
  19. package/bin/tree-sitter/tree-sitter-lua.wasm +0 -0
  20. package/bin/tree-sitter/tree-sitter-objc.wasm +0 -0
  21. package/bin/tree-sitter/tree-sitter-ocaml.wasm +0 -0
  22. package/bin/tree-sitter/tree-sitter-php.wasm +0 -0
  23. package/bin/tree-sitter/tree-sitter-python.wasm +0 -0
  24. package/bin/tree-sitter/tree-sitter-ql.wasm +0 -0
  25. package/bin/tree-sitter/tree-sitter-rescript.wasm +0 -0
  26. package/bin/tree-sitter/tree-sitter-ruby.wasm +0 -0
  27. package/bin/tree-sitter/tree-sitter-rust.wasm +0 -0
  28. package/bin/tree-sitter/tree-sitter-scala.wasm +0 -0
  29. package/bin/tree-sitter/tree-sitter-solidity.wasm +0 -0
  30. package/bin/tree-sitter/tree-sitter-swift.wasm +0 -0
  31. package/bin/tree-sitter/tree-sitter-systemrdl.wasm +0 -0
  32. package/bin/tree-sitter/tree-sitter-tlaplus.wasm +0 -0
  33. package/bin/tree-sitter/tree-sitter-toml.wasm +0 -0
  34. package/bin/tree-sitter/tree-sitter-tsx.wasm +0 -0
  35. package/bin/tree-sitter/tree-sitter-typescript.wasm +0 -0
  36. package/bin/tree-sitter/tree-sitter-vue.wasm +0 -0
  37. package/bin/tree-sitter/tree-sitter-yaml.wasm +0 -0
  38. package/bin/tree-sitter/tree-sitter-zig.wasm +0 -0
  39. package/bin/tree-sitter/tree-sitter.wasm +0 -0
  40. package/bin/zhanlu-plugins/bundle-index.json +60 -0
  41. package/bin/zhanlu-plugins/lingji-alpha-assistant/.claude-plugin/plugin.json +42 -0
  42. package/bin/zhanlu-plugins/lingji-alpha-assistant/README.md +29 -0
  43. package/bin/zhanlu-plugins/lingji-alpha-assistant/mcps/sast_fixer_mcp/README.md +10 -0
  44. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/SKILL.md +179 -0
  45. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/config/gitlab_config.json +5 -0
  46. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/prompts/step1_preparation.md +167 -0
  47. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/prompts/step2_consistency_check.md +446 -0
  48. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/scripts/gitlab_clone.py +213 -0
  49. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/scripts/read_excel_requirements.py +144 -0
  50. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/GITLAB_USAGE.md +160 -0
  51. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/QUICK_REFERENCE.md +149 -0
  52. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/README.md +134 -0
  53. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/SKILL.md +151 -0
  54. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/assets/review_standards.md +144 -0
  55. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/file_review_prompt.md +160 -0
  56. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/output_requirements.md +35 -0
  57. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/step1_project_preprocessing.md +106 -0
  58. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/step2_file_review.md +83 -0
  59. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/step3_report_generation.md +319 -0
  60. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/scripts/gitlab_clone.py +213 -0
  61. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/SKILL.md +366 -0
  62. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/references/generation-rules.md +214 -0
  63. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/references/query-rules.md +60 -0
  64. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/references/review-rules.md +117 -0
  65. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/references/save-rules.md +367 -0
  66. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/quality_scan/SKILL.md +195 -0
  67. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/requirement-analysis/SKILL.md +346 -0
  68. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/requirement-review/SKILL.md +267 -0
  69. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/requirements-gather/SKILL.md +187 -0
  70. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/sast_scan/SKILL.md +312 -0
  71. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/SKILL.md +77 -0
  72. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/evals/evals.json +34 -0
  73. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/epic-to-story-methodology.md +122 -0
  74. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/epic-to-story-template.md +93 -0
  75. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/epic-to-story-to-task-template.md +221 -0
  76. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/story-to-task-methodology.md +139 -0
  77. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/story-to-task-template.md +89 -0
  78. package/bin/zhanlu-plugins/lingji-beta-assistant/.claude-plugin/plugin.json +19 -0
  79. package/bin/zhanlu-plugins/lingji-beta-assistant/README.md +21 -0
  80. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/.gitkeep +1 -0
  81. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-analysis/SKILL.md +383 -0
  82. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/SKILL.md +348 -0
  83. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/epic-to-story-methodology.md +122 -0
  84. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/epic-to-story-template.md +93 -0
  85. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/epic-to-story-to-task-template.md +221 -0
  86. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/story-to-task-methodology.md +139 -0
  87. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/story-to-task-template.md +89 -0
  88. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-review/SKILL.md +350 -0
  89. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirements-gather/SKILL.md +244 -0
  90. package/bin/zl +4 -0
  91. package/package.json +22 -0
@@ -0,0 +1,348 @@
1
+ ---
2
+ name: beta_requirement_decomposer
3
+ description: |
4
+ beta 环境需求拆解技能,将 beta 环境(演示/测试环境)中的初始需求(RR)按层级拆解为可执行的 Story → Task 结构,并支持将拆解结果创建到 lingji-beta 平台。支持双模式数据源:MCP 拉取或本地文档读取。当用户提到"拆解需求""需求拆解""拆成Story""拆成Task""拆分需求""生成Story文档""拆成用户故事""beta环境拆解""演示项目拆解"等场景时触发。与 `requirement-decomposer` 的差异:固定使用 lingji-beta MCP、双模式数据源(MCP/本地)、输出到 prd/decompose/ 目录、文件名带 Beta_ 前缀、字段基于实际 beta 数据结构调整(description 三小节作为核心拆解源)、支持回写 lingji-beta 平台创建 Story/Task。
5
+ ---
6
+
7
+ # beta 环境需求拆解
8
+
9
+ > 将 beta 环境中的初始需求(RR)按层级拆解为可执行的 Story → Task 结构。支持双模式:
10
+ > 1. **MCP 拉取模式**:从 lingji-beta 拉取 RR 的 description 三小节作为拆解源
11
+ > 2. **本地文档模式**:读取用户提供的 prd/requirements_Beta_*.md 类需求文档
12
+ >
13
+ > 拆解结果默认写入 `prd/decompose/` 目录,命名 `Beta_{项目}_{Key}_{拆解}_{YYYYMMDD}.md`;可选调用 lingji-beta MCP 将 Story/Task 实际创建到平台。
14
+
15
+ ## 核心原则:拒绝过度拆解
16
+
17
+ 需求拆解之前,必须理解以下原则,这决定了输出质量:
18
+
19
+ **一个 Story = 一个独立可交付的用户价值。一个 Task = 一个可独立完成的具体开发动作。**
20
+
21
+ - 不要为了"覆盖每个验收标准"而把同一个用户价值拆成多个 Story
22
+ - 不要把共享的前置条件(如"登录+选择助手")单独拆成一个 Story,而是让每个 Story 都包含自己的前提条件
23
+ - 不要把"设计"单独拆成一个 Task,设计工作应融入实现任务中
24
+ - 一个 Epic 拆 2-4 个 Story 为宜(不是越多越好)
25
+ - 一个 Story 拆 2-4 个 Task 为宜(不是越多越好)
26
+
27
+ **beta 环境特殊约束:**
28
+ - `description` 字段包含【需求背景】/【需求价值】/【需求详情】三段,**【需求详情】是核心拆解源**(对应原 skill 的"需求描述"),【需求价值】用于推导验收标准
29
+ - beta 环境无独立 `acceptanceCriteria` 字段,验收标准**必须从【需求详情】推导**
30
+ - 平台上的类型映射:`RR` → 初始需求(Epic),`US` → 用户故事(Story),`Task` → 任务
31
+
32
+ ## 工作流程
33
+
34
+ ### 步骤 1:识别数据源模式
35
+
36
+ 判断本次拆解的数据源:
37
+
38
+ | 用户说法 | 触发模式 |
39
+ | ----------------------------------------- | -------------------- |
40
+ | "拆解 RR20260119400340" / "拆解演示项目下我的需求" | **MCP 拉取模式** |
41
+ | "拆解 D:/path/to/需求文档.md" / 提供具体文件路径 | **本地文档模式** |
42
+ | 仅说"拆解需求",无明确数据源 | **询问用户** |
43
+
44
+ #### 模式 A:MCP 拉取模式
45
+
46
+ 调用 lingji-beta MCP 工具链:
47
+
48
+ 1. `lingji-beta__getProjectList` — 解析项目名 → projectId
49
+ 2. `lingji-beta__listWorkItems` — `issueType=RR` 拉取初始需求列表
50
+ 3. `lingji-beta__getWorkItemDetail` — **对每条候选 RR 调用一次获取 description**(含【需求背景】/【需求价值】/【需求详情】三段)
51
+
52
+ **筛选条件:**
53
+ - 项目:精确/模糊匹配 `domain_id.name` 或 `project.title`
54
+ - 状态:默认 `Analyse`(分析),可指定 `Plan`(规划)
55
+ - assignee:当前用户邮箱(客户端过滤)
56
+
57
+ > ⚠️ description 字段仅 `getWorkItemDetail` 接口返回。必须对每条候选 RR 调用一次以获取【需求详情】用于拆解。
58
+
59
+ #### 模式 B:本地文档模式
60
+
61
+ 读取用户提供的 Markdown 文档路径,识别需求列表表格(每行包含 `需求Key` / `类型` / `需求描述` 等字段)。
62
+
63
+ **预期文档格式:** 与 `beta-requirements-gather` skill 输出的 `需求列表_Beta_*.md` 结构一致;或与 `beta-requirement-analysis` skill 输出的 `Beta_{Key}_{标题}.md` 结构一致。
64
+
65
+ **核心拆解字段:**
66
+ - 模式 A:从 `description` 解析【需求详情】段
67
+ - 模式 B:从表格的 `需求描述` 字段读取(无 `验收标准` 字段时,从 `需求描述` 推导)
68
+
69
+ ### 步骤 2:完善需求内容
70
+
71
+ 检查每个 RR 的核心字段——**【需求详情】** 和 **【需求价值】** ——是否足够清晰、可操作。如果字段本身已经描述良好,直接跳到步骤 3。
72
+
73
+ 当字段模糊或不完整(如三段均为占位符文本),检查是否存在 `beta-requirement-analysis` skill。如果存在,询问用户是否使用该 skill。
74
+
75
+ - **如果用户同意使用**:先执行 `beta-requirement-analysis` skill(**从该 skill 的流程第 4 步开始**),基于扩写后的三段内容重新执行步骤 2 验证
76
+ - **如果用户选择不使用**:直接在拆解文档中标注"⚠️ 来源 RR 的【需求详情】内容不足,拆解结果为推测性占位",但仍按现有内容继续拆解
77
+
78
+ ### 步骤 3:执行拆解(三选一)
79
+
80
+ > 以下模式 A、B、C **三选一**,根据输入 RR 的层级(RR = Epic)和用户要求确定具体模式。
81
+
82
+ #### 模式 A:RR(Epic)→ US(Story)
83
+
84
+ - **方法参考**:`epic-to-story-methodology.md`(与原 skill 一致,核心原则通用)
85
+ - **核心拆解源**:从 RR 的 `description` 解析【需求详情】段
86
+ - **验收标准推导**:从【需求详情】的每个功能点提取"操作场景 + 预期结果"格式
87
+ - **模板参考**:`epic-to-story-template.md`(按 beta 字段结构适配,见本文件末尾)
88
+
89
+ #### 模式 B:US(Story)→ Task
90
+
91
+ - **方法参考**:`story-to-task-methodology.md`
92
+ - **核心拆解源**:从 US 的 `description` 解析【需求详情】段
93
+ - **模板参考**:`story-to-task-template.md`
94
+
95
+ #### 模式 C:RR(Epic)→ US(Story)→ Task(全链路)
96
+
97
+ - **方法参考**:`epic-to-story-methodology.md` + `story-to-task-methodology.md`
98
+ - **模板参考**:`epic-to-story-to-task-template.md`
99
+ - **注意**:分两步执行,先将 RR 拆解为 Story,再将 Story 拆解为 Task,两步不可并行
100
+
101
+ #### 模式 D:US(Story)→ 优化现有 Task
102
+
103
+ 当用户已有 Story 但 Task 拆分不合理时,调用 `lingji-beta__queryWorkItemTree` 获取 Story 下的现有 Task 列表,合并去重后再优化拆分。
104
+
105
+ ### 步骤 4:生成拆解文档
106
+
107
+ 按照模板生成 Markdown 文档,**必须使用 `write` 工具将文档写入文件**。如果目录不存在,需先创建。
108
+
109
+ **输出路径:** 当前项目 `prd/decompose/` 目录
110
+
111
+ **文件名格式:** `Beta_{项目名}_{父需求Key}_{拆解}_{YYYYMMDD}.md`
112
+
113
+ 示例:
114
+ - `Beta_演示项目_RR20260616628399_拆解_20260618.md`
115
+ - `Beta_演示项目_US20260119400341_拆解_20260618.md`
116
+
117
+ **文档结构:**
118
+
119
+ ```markdown
120
+ # beta 环境需求拆解文档
121
+
122
+ ## beta 环境元信息
123
+
124
+ | 字段 | 值 |
125
+ |---|---|
126
+ | 环境标识 | beta |
127
+ | 数据源模式 | MCP 拉取 / 本地文档 |
128
+ | 拆解人 | 任博婕妤 (renbojieyu@cmss.cmcc) |
129
+ | 拆解日期 | 2026-06-18 |
130
+ | MCP 来源 | lingji-beta |
131
+ | 父需求 | RR20260616628399 |
132
+ | 拆解层级 | RR→US / US→Task / RR→US→Task |
133
+
134
+ ## 项目信息
135
+
136
+ - **空间名称**: 演示项目
137
+ - **项目编码**: e13a682906ef49518812e2b95318d87b
138
+ - **项目名称**: 演示项目
139
+ - **产品名称**: 演示项目
140
+
141
+ ## 父需求摘要
142
+
143
+ | 字段 | 值 |
144
+ |------|-----|
145
+ | 需求Key | RR20260616628399 |
146
+ | 标题 | 需求代码一致性分析 |
147
+ | 类型 | RR-初始需求 |
148
+ | 负责人 | 任博婕妤 (renbojieyu@cmss.cmcc) |
149
+ | 提出人 | 程龙 (chenglong2@cmss.cmcc) |
150
+ | 优先级 | 高 |
151
+ | 业务背景 | [从 description 提取【需求背景】] |
152
+ | 需求价值 | [从 description 提取【需求价值】] |
153
+ | 需求详情 | [从 description 提取【需求详情】,核心拆解源] |
154
+
155
+ ---
156
+
157
+ ## 拆解结果
158
+
159
+ ### Story 1.1: {Story名称}
160
+
161
+ | 字段 | 值 |
162
+ |------|-----|
163
+ | 需求Key | {RR-Key}-S1 |
164
+ | 标题 | {Story标题} |
165
+ | 类型 | US-用户故事 |
166
+ | 负责人 | [继承自父需求] |
167
+ | 提出人 | [继承自父需求] |
168
+ | 优先级 | [继承自父需求] |
169
+ | 业务背景 | [继承自父需求] |
170
+ | 需求价值 | [继承自父需求] |
171
+ | 需求详情 | [拆解后的需求详情] |
172
+ | 验收标准 | [从需求详情推导的可验证条目] |
173
+ | 故事点 | [1/2/3/5/8/13] |
174
+ | 计划开始时间 | [继承自父需求] |
175
+ | 计划结束时间 | [继承自父需求] |
176
+ | 期望完成时间 | [继承自父需求,若无则填"未提供"] |
177
+ | 关联项目 | 演示项目 |
178
+ | 关联迭代 | [继承自父需求,若无则填"未提供"] |
179
+ | 父需求 | {RR-Key} |
180
+ | 状态 | 初始 |
181
+ ```
182
+
183
+ ### 步骤 5:询问是否回写 lingji-beta 平台
184
+
185
+ 使用 `question` 工具询问用户是否将拆解结果回写到 lingji-beta 平台创建为实际 Story/Task 记录:
186
+
187
+ ```
188
+ 是否将拆解结果回写到 lingji-beta 平台?
189
+ 回写操作将使用 createWorkItem 接口按层级关系创建 Story/Task 记录,
190
+ 并自动关联父需求、子需求关系。
191
+ ```
192
+
193
+ 选项:
194
+ - 确认回写(创建 Story/Task 记录)
195
+ - 仅生成拆解文档(不回写)
196
+
197
+ 如果用户选择"仅生成拆解文档",流程结束。
198
+
199
+ ### 步骤 6:执行回写(创建 Story/Task 记录)
200
+
201
+ 调用 lingji-beta MCP 的 `createWorkItem` 接口(批量创建)。
202
+
203
+ **回写策略:**
204
+
205
+ | 场景 | 操作 |
206
+ | ------------- | -------------------------------------------------------------------------- |
207
+ | RR → US | 批量创建 N 个 Story,`category=US`,`parent_id=父RR的id`,`us2rr=父RR的id` |
208
+ | US → Task | 批量创建 N 个 Task,`category=Task`,`parent_id=父US的id` |
209
+ | RR → US → Task | 先创建 Story,再创建 Task(两步不可并行) |
210
+
211
+ **调用参数(每条 createWorkItem):**
212
+ - `projectId`: 项目 ID
213
+ - `domain_id`: 项目 domain_id
214
+ - `number`: 自动生成,格式 `{父需求Key}-S{序号}` 或 `{父需求Key}-T{序号}`
215
+ - `title`: Story/Task 标题
216
+ - `type`: `requirement`(US)或 `task`(Task)
217
+ - `parent_id`: 父需求 ID
218
+ - `assignee.user_id`: 继承自父需求
219
+ - `description`: HTML 格式的三小节(【需求背景】/【需求价值】/【需求详情】,未拆解的字段直接复用父需求)
220
+ - `priority`: 继承自父需求
221
+ - `workload_man_day`: 估算工时(Story 默认 2.0,Task 默认 1.0)
222
+ - `convolution_plan_hours`: 估算工时(与 workload_man_day 换算)
223
+ - `plan_iteration`: 继承自父需求
224
+ - `status`: `Start`(初始)
225
+
226
+ **回传 description 拼装规则:**
227
+
228
+ 回传内容 = AI 拆解后的 `【需求背景】`(继承父需求) + AI 拆解后的 `【需求价值】`(继承父需求) + AI 拆解后的 `【需求详情】`(核心拆解),按以下 HTML 格式拼装:
229
+
230
+ ```html
231
+ <p><strong>【需求背景】</strong></p>
232
+ <p>{背景内容}</p>
233
+
234
+ <p><strong>【需求价值】</strong></p>
235
+ <p>{价值内容}</p>
236
+
237
+ <p><strong>【需求详情】</strong></p>
238
+ <p>{作为{角色},我想要{能力},以便于{价值}。}</p>
239
+ <p>1. {验收标准 1}</p>
240
+ <p>2. {验收标准 2}</p>
241
+ ...
242
+ ```
243
+
244
+ #### 6.1 展示回写结果
245
+
246
+ 所有 Story/Task 创建完成后,展示结果:
247
+
248
+ ```
249
+ ✅ 拆解结果回写完成
250
+
251
+ | 类型 | 父需求 | 需求Key | 标题 | 创建结果 |
252
+ |------|--------|---------|------|----------|
253
+ | US | RR20260616628399 | RR20260616628399-S1 | {Story 1 标题} | ✅ 已创建 |
254
+ | US | RR20260616628399 | RR20260616628399-S2 | {Story 2 标题} | ✅ 已创建 |
255
+ ```
256
+
257
+ 如果某条 Story/Task 创建失败,标注失败原因并建议用户手动处理。
258
+
259
+ ## 输入
260
+
261
+ ### 模式 A:MCP 拉取模式输入
262
+
263
+ 用户需提供以下任一标识:
264
+ - 需求 Key(如 `RR20260616628399`)
265
+ - 项目名(如"演示项目")+ assignee 邮箱(默认当前用户)
266
+ - 标题关键词(如"一致性")
267
+
268
+ ### 模式 B:本地文档模式输入
269
+
270
+ 用户需提供 Markdown 文档的绝对路径,文档需包含:
271
+ - **项目信息**:空间名称、项目编码、项目名称
272
+ - **需求列表**:每个需求以表格形式呈现,含 `需求Key`、`类型`、`需求描述` 字段
273
+ - **类型映射**:`初始需求` → RR(Epic),`用户故事` → US(Story),`任务` → Task
274
+
275
+ | 表格中 `类型` 字段的值 | 对应层级 | 拆解目标 |
276
+ | ---------------------- | --------------- | --------------- |
277
+ | 初始需求 / RR | **Epic** | → US(Story) |
278
+ | 用户故事 / US | **Story** | → Task |
279
+ | 任务 / Task | **Task** | 不再向下拆解 |
280
+
281
+ **核心拆解字段:**
282
+ - 模式 A:从 `description` 解析的 `【需求详情】` 段(**仅 getWorkItemDetail 返回**)
283
+ - 模式 B:从表格的 `需求描述` 字段(无 `验收标准` 字段时从 `需求描述` 推导)
284
+
285
+ ## 输出
286
+
287
+ ### 本地拆解文档
288
+
289
+ - 保存路径:`prd/decompose/`
290
+ - 文件名:`Beta_{项目名}_{父需求Key}_{拆解}_{YYYYMMDD}.md`
291
+ - 文档头部包含 beta 环境元信息块
292
+ - 每个 Story/Task 独立表格区块
293
+
294
+ ### 平台记录(可选)
295
+
296
+ 调用 `createWorkItem` 在 lingji-beta 平台创建 Story/Task 记录,包含:
297
+ - 完整字段(继承父需求)
298
+ - description 三小节(HTML 格式)
299
+ - 父子关联(parent_id)
300
+ - 状态为初始(Start)
301
+
302
+ ## 规则
303
+
304
+ - 仅对 `description` 的 `【需求详情】` 段(或本地文档的 `需求描述` 字段)执行拆解
305
+ - 验收标准**必须从【需求详情】推导**(beta 环境无独立字段)
306
+ - 未提供的字段统一填写"未提供"或"无"
307
+ - 保持原始信息完整,不得删减任何内容
308
+ - 时间字段保持原始格式,不做任何转换
309
+ - 人员姓名后附带邮箱地址的,保留完整信息,不得省略
310
+ - 需求 Key 自动生成,格式为 `{父需求Key}-S{序号}` 或 `{父需求Key}-T{序号}`,序号从 1 开始递增
311
+ - 父需求字段填写原 RR 或 US 的 Key
312
+ - **回写平台时**:必须先验证父需求存在于平台(通过 getWorkItemDetail),避免创建孤儿 Story/Task
313
+ - **占位符检测**:若 RR 的 description 三段均为占位符(如与标题重复、长度<5字等),拆解结果需标注"⚠️ 推测性占位",并建议先执行 `beta-requirement-analysis` 优化
314
+
315
+ ## 字段映射参考(基于 lingji-beta 实际数据)
316
+
317
+ | 拆解文档字段 | MCP 数据字段 | 说明 |
318
+ | ---------------------- | ------------------------------------- | ---- |
319
+ | 需求Key | `number`(自动生成 `{父Key}-S{序号}`)| |
320
+ | 标题 | `title` | |
321
+ | 类型 | `category` + `type` | US: `requirement` / Task: `task` |
322
+ | 状态 | `status.code` | 默认 `Start` |
323
+ | 优先级 | `priority.display_value` | 继承父需求 |
324
+ | 负责人 | `assignee.user_name` | 继承父需求 |
325
+ | 提出人 | `submitted_by[0].user_name` | 继承父需求 |
326
+ | 业务背景 | `description` 中 `【需求背景】` 段 | 继承父需求 |
327
+ | 需求价值 | `description` 中 `【需求价值】` 段 | 继承父需求 |
328
+ | 需求详情 | `description` 中 `【需求详情】` 段 | **核心拆解源** |
329
+ | 验收标准 | 从 `【需求详情】` 推导 | beta 环境无独立字段 |
330
+ | 故事点 | `story_point.display_value` | US 字段,Task 不需要 |
331
+ | 计划工时(人天) | `workload_man_day` | Story 默认 2.0,Task 默认 1.0 |
332
+ | 计划开始时间 | `plan_start_date` | 继承父需求 |
333
+ | 计划结束时间 | `plan_end_date` | 继承父需求 |
334
+ | 关联项目 | `project.title` | 继承父需求 |
335
+ | 关联迭代 | `plan_iteration.title` | 继承父需求 |
336
+ | 父需求 | `parent_id` → 反查 `number` | |
337
+
338
+ ## 注意事项
339
+
340
+ - **数据源选择**:拆解前必须确认数据源模式(MCP 拉取 or 本地文档)
341
+ - **description 三小节处理**:必须对每条候选 RR 调用 `getWorkItemDetail` 解析【需求背景】/【需求价值】/【需求详情】;HTML 标签需清理
342
+ - **占位符检测**:若父 RR 的三段内容均为占位符,拆解结果标注"⚠️ 推测性占位"并建议先执行 `beta-requirement-analysis`
343
+ - **回写平台为可选项**:必须经用户确认后才能调用 `createWorkItem`,避免误创建
344
+ - **类型码映射**:`RR` → 初始需求(Epic),`US` → 用户故事(Story),`Task` → 任务
345
+ - **状态码映射**:`Start` → 初始,`Analyse` → 分析,`Plan` → 规划,`Doing` → 实现,`Delivered` → 交付,`Checking` → 验收,`Finish` → 完成
346
+ - **回写后状态**:新建的 Story/Task 默认为 `Start`(初始)状态
347
+ - **父子关系**:Story 的 `parent_id` = 父 RR 的 `id`,`us2rr` = 父 RR 的 `id`;Task 的 `parent_id` = 父 US 的 `id`
348
+ - **方法论文件复用**:核心拆解方法(epic-to-story-methodology.md、story-to-task-methodology.md)与原 skill 共享;模板需按 beta 字段结构适配
@@ -0,0 +1,122 @@
1
+ # Epic → Story 拆解方法论
2
+
3
+ ## 目标
4
+
5
+ 将每个 Epic 拆分为可被单个 Agent 在一次开发中完成的 User Story。
6
+
7
+ 关键约束:每个 Story 都是独立可交付的用户价值,Story 之间不应过度拆分。
8
+
9
+ ## 核心原则
10
+
11
+ ### 1. 以"用户操作闭环"为拆分单位,而非以"功能点"或"验收标准"为拆分单位
12
+
13
+ 一个 Story 应该覆盖用户完成一个完整操作的端到端体验。不要拆开"展示"和"操作"——它们属于同一个 Story。
14
+
15
+ **反面示例(过度拆分):**
16
+
17
+ - ~~Story 1: 需求展示~~(只展示,没有操作价值)
18
+ - ~~Story 2: 需求评审~~(只有评审,没有前置展示)
19
+ - 这其实是同一个用户流程的两个步骤,应合并
20
+
21
+ **正面示例(合理拆分):**
22
+
23
+ - Story 1: 需求拉取与自动评审 —— 从展示到评审的完整流程
24
+ - Story 2: 评审结果同步回平台 —— 将评审结果回传到上游
25
+
26
+ ### 2. 不要在 Story 中引入共享前置依赖
27
+
28
+ 每个 Story 都应包含自己的前提条件。不要为了"消除重复"而把"登录并选择助手"拆成一个前置 Story。
29
+
30
+ **反面示例:**
31
+
32
+ - ~~Story 0: 建立灵畿a助手连接(没有其他 Story 的前提)~~
33
+ - 这会变成一个无价值的"基础设施" Story
34
+
35
+ **正面示例:**
36
+
37
+ - Story 1: "前提:用户登录AI IDE并在Agent模式选择灵畿a助手"——直接在 Story 描述中包含
38
+ - Story 2: 同样包含同样的前提条件——这是重复但正确的
39
+
40
+ ### 3. 以"业务价值流"为主要拆分维度,次要按"技术实现"拆分
41
+
42
+ 优先按用户能感知到的业务价值来分 Story:
43
+
44
+ - "审核工作流" = 一个 Story(拉取→评审→同步)
45
+ - "优化工作流" = 一个 Story(拉取→优化→同步)
46
+ - "拆解工作流" = 一个 Story(拉取→拆解→同步)
47
+
48
+ ## 拆分步骤
49
+
50
+ ### 步骤 1:提取业务价值流
51
+
52
+ 阅读 Epic 的 `需求描述`,从中提取用户能感知到的独立价值。每个价值流对应一个 Story。
53
+
54
+ 判断标准:
55
+
56
+ - **独立可验证**:完成后用户能明显感觉到"这个功能可以用"
57
+ - **有明确起点和终点**:从用户触发到结果交付形成闭环
58
+
59
+ ### 步骤 2:为每个 Story 编写完整的用户故事格式
60
+
61
+ ```
62
+ **需求描述:**
63
+
64
+ 作为 {角色},
65
+ 我想要 {能力},
66
+ 以便于 {价值/收益}。
67
+
68
+ **验收标准:**
69
+ 1. {具体可验证的预期结果1}
70
+ 2. {具体可验证的预期结果2}
71
+ ...
72
+ ```
73
+
74
+ 编写要求:
75
+
76
+ - 需求描述:把 Epic 中分散的多个用户故事场景合并为一个连贯的用户故事
77
+ - 验收标准:从 Epic 的多个用户故事中提取所有可验证点,**完整写入**这个 Story 的验收标准
78
+ - 不要为了"每个验收标准对应一个 Story"而拆分——一个 Story 可以有多个验收标准
79
+
80
+ ### 步骤 3:命名
81
+
82
+ 格式:`{核心功能} + {关键场景}`
83
+
84
+ 好的示例:
85
+
86
+ - "需求拉取与自动评审"
87
+ - "评审结果交互修改与平台同步"
88
+ - "需求优化与智能建议"
89
+
90
+ 避免的命名:
91
+
92
+ - ~~"需求展示模块"~~(不完整,不是用户价值)
93
+ - ~~"API对接设计"~~(这是技术任务,不是用户故事)
94
+ - ~~"系统优化"~~(过于模糊)
95
+
96
+ ### 步骤 4:验证
97
+
98
+ 完成拆分后,逐一检查:
99
+
100
+ - [ ] 每个 Story 是否是独立可交付的用户价值?
101
+ - [ ] Story 之间是否有不必要的拆分?(如果两个 Story 必须一起使用才有意义,考虑合并)
102
+ - [ ] 每个 Story 是否包含自己的前提条件,不依赖其他 Story?
103
+ - [ ] Epic 中的所有功能是否都被覆盖了?
104
+ - [ ] Story 数量是否在 2-4 个?(超过 4 个考虑合并,少于 2 个说明功能本身很简单)
105
+
106
+ ## 数量指导
107
+
108
+ 一个 Epic 建议拆分为 **2-4 个 Story**。
109
+
110
+ - 少于 2 个:正常,简单 Epic 可能只需要 1 个 Story
111
+ - 2-4 个:理想范围
112
+ - 超过 4 个:检查是否有相邻 Story 可以合并
113
+
114
+ ## 常见陷阱
115
+
116
+ | 陷阱 | 应对方式 |
117
+ | --------------------------------------------- | ----------------------------------------------- |
118
+ | 把"展示"和"操作"拆成两个 Story | 合并为"展示与操作"一个 Story |
119
+ | 为了消除重复而提取共享前置 Story | 每个 Story 都包含自己的前提条件 |
120
+ | 一个验收标准对应一个 Story | 一个 Story 可以有多个验收标准 |
121
+ | Story 命名像技术任务 | 改为从用户视角描述用户价值 |
122
+ | Epic 里明明有 3 个用户故事却拆出 5-6 个 Story | 检查是否在过度拆分,3 个用户故事最多对应 3-4 个 |
@@ -0,0 +1,93 @@
1
+ # Story 输出模板
2
+
3
+ ## 文档头部
4
+
5
+ ```markdown
6
+ # [项目名称] - 需求拆解文档
7
+
8
+ ## 项目信息
9
+ - 空间名称: [填写空间名称]
10
+ - 项目编码: [填写项目编码]
11
+ - 项目名称: [填写项目名称]
12
+ - 产品名称: [填写产品名称]
13
+ ```
14
+
15
+ ## 每个 Epic 区块
16
+
17
+ ```markdown
18
+ ---
19
+
20
+ ## Epic-{Epic序号}: {key}-{Epic标题}
21
+ ```
22
+
23
+ ## 每个 Story 区块
24
+
25
+ ```markdown
26
+ ### Story {Epic序号}.{Story序号}: {Story名称}
27
+
28
+ | 字段 | 值 |
29
+ | ----------- | ---------------- |
30
+ | 需求Key | [自动生成,格式:{父需求Key}-S{序号}] |
31
+ | 标题 | [Story标题] |
32
+ | 类型 | 用户故事 |
33
+ | 负责人 | [继承自父需求] |
34
+ | 提出人 | [继承自父需求] |
35
+ | 优先级 | [继承自父需求] |
36
+ | 业务背景 | [继承自父需求,若无则填写"无"] |
37
+ | 需求描述 | [拆解后的需求描述] |
38
+ | 验收标准 | [拆解后的验收标准] |
39
+ | 计划开始时间 | [继承自父需求] |
40
+ | 计划结束时间 | [继承自父需求] |
41
+ | 期望完成时间 | [继承自父需求,若无则填写"无"] |
42
+ | 关联产品/业务平台类型 | [继承自父需求] |
43
+ | 选择对应产品/业务平台 | [继承自父需求] |
44
+ | 关联项目 | [继承自父需求] |
45
+ | 关联版本 | [继承自父需求,若无则填写"无"] |
46
+ | 迭代 | [继承自父需求,若无则填写"无"] |
47
+ | 父需求 | [父需求Key] |
48
+ ```
49
+
50
+ ## 分隔符
51
+
52
+ 每个 Epic 之间用 `---` 分隔。
53
+
54
+ ## 完整示例
55
+
56
+ ```markdown
57
+ # 研发大模型关键技术研发(2025) - 需求拆解文档
58
+
59
+ ## 项目信息
60
+ - 空间名称: 研发大模型关键技术研发
61
+ - 项目编码: R2511D2DC03
62
+ - 项目名称: 研发大模型关键技术研发(2025)
63
+ - 产品名称: 研发大模型
64
+
65
+ ---
66
+
67
+ ## Epic-1: CMSSR2511D2DC03-873 需求代码一致性检查
68
+
69
+ ### Story 1.1: Git提交信息需求代码一致性校验
70
+
71
+ | 字段 | 值 |
72
+ | ----------- | ---------------- |
73
+ | 需求Key | CMSSR2511D2DC03-873-S1 |
74
+ | 标题 | Git提交信息需求代码一致性校验 |
75
+ | 类型 | 用户故事 |
76
+ | 负责人 | 张三 |
77
+ | 提出人 | 李四 |
78
+ | 优先级 | P0 |
79
+ | 业务背景 | 无 |
80
+ | 需求描述 | 作为 一名开发人员,我想要 在推送(Push)代码到仓库时,系统能自动分析我的 Git 提交信息中的需求描述(如 Jira ID 或任务标题)与实际提交的代码变更是否匹配,以便于 我能及时发现并修正描述错误,确保代码库中每个提交都准确对应业务需求,避免后续维护混乱和代码审查(Code Review)的低效。 |
81
+ | 验收标准 | 1、用户在push代码时,系统自动解析git提交信息中的需求标识;2、若检测到需求与提交代码不一致,系统向用户发出提醒提示;3、提醒信息清晰说明不一致的具体内容。 |
82
+ | 计划开始时间 | 2026-04-27 16:00:00 |
83
+ | 计划结束时间 | 2026-05-21 16:00:00 |
84
+ | 期望完成时间 | 无 |
85
+ | 关联产品/业务平台类型 | 产品 |
86
+ | 选择对应产品/业务平台 | 研发大模型 |
87
+ | 关联项目 | 研发大模型关键技术研发(2025)(R2511D2DC03) |
88
+ | 关联版本 | 无 |
89
+ | 迭代 | 无 |
90
+ | 父需求 | CMSSR2511D2DC03-873 |
91
+
92
+ ---
93
+ ```