新增 AutoRDO 需求清洗工作台与消息中枢,迭代 OneOS V2 设计规范及租赁合同/工作台/车辆等原型,同步云效技能与导航注册;并归档一批 legacy 原型快照。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
49
.cursor/skills/YunxiaoPM/references/acceptance.md
Normal file
49
.cursor/skills/YunxiaoPM/references/acceptance.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# 验收清单与回报
|
||||
|
||||
## apply 后必须自检
|
||||
|
||||
| # | 项 | 通过标准 |
|
||||
|---|---|---|
|
||||
| 1 | 需求编号 | 回报含 ONEOS-xx |
|
||||
| 2 | 任务编号 | 交付/分析/设计凡新建或操作均回报编号;禁止只报标题 |
|
||||
| 3 | 编号区块 | 需求「工作项编号(系统)」与实际一致 |
|
||||
| 4 | ASSOCIATED | **仅交付**详情关联项可见需求(`createWorkitemRelationInfo=ASSOCIATED`;禁止 PARENT 冒充) |
|
||||
| 5 | SUB | **必过**:分析/设计 create 用 `TASK_SUB→交付`(含 `parent`+`parentIdentifier`);交付「子项」tab 须可见。与 ASSOCIATED 同 create 互斥,阶段任务关联项可空(见 live-api.md) |
|
||||
| 6 | 计划开始 | 未误覆盖已有值 |
|
||||
| 7 | 阶段日历工时 | 有计划完成时已写入;脚注存在;回报用语正确 |
|
||||
| 8 | 交棒 | 需求=待开发;交付负责人=何斐(交棒场景) |
|
||||
| 9 | 占位风险 | 交付仍占位时首行标红 |
|
||||
| 10 | 负向 | 本轮**无**【开发】/【测试】任务;未按标题查重 |
|
||||
|
||||
设计完成额外:AutoPRD 段已写;交付非占位(除非失败停下);ZIP+截图已挂或已列出缺项。
|
||||
|
||||
迭代额外:只挂【交付】(需求不挂);版本号符合递增规则。
|
||||
|
||||
## 回报模板(精简)
|
||||
|
||||
```text
|
||||
【YunxiaoPM】
|
||||
风险:(若有占位交棒则首行标红)
|
||||
需求:ONEOS-xx | 状态=…
|
||||
交付:ONEOS-a | 负责人=…
|
||||
分析:ONEOS-b | …(无则写无)
|
||||
设计:ONEOS-c | …(无则写无)
|
||||
阶段日历工时:分析 Hh / 设计 Hh(若本轮写入)
|
||||
附件:…(若本轮)
|
||||
迭代:…(若本轮)
|
||||
下一步:请技术经理使用开发 Skill(交棒后)
|
||||
```
|
||||
|
||||
## 适合全自动 vs 人工门禁
|
||||
|
||||
| 适合全自动 | 建议半自动/人工门禁 |
|
||||
|---|---|
|
||||
| 建单、打标签、挂迭代、写描述、建交付树、改状态、交棒负责人、幂等查重 | **PJ 云效项目点选**、受理(已确认)、是否快轨、设计完成是否真可开发、跨需求优先级与迭代容量、回退与取消 |
|
||||
|
||||
## 实写性能(2026-07-23 复盘)
|
||||
|
||||
| 项 | 要求 |
|
||||
|---|---|
|
||||
| 改状态 | 只用 `status/transit`(见 [live-api.md](live-api.md)) |
|
||||
| 改【交付】负责人 | 只用 `PATCH …/{id}` + `propertyKey=assignedTo` |
|
||||
| 极速复测 | `scripts/live_create_fast.py`;默认不开浏览器 |
|
||||
22
.cursor/skills/YunxiaoPM/references/commands.md
Normal file
22
.cursor/skills/YunxiaoPM/references/commands.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# 口令面
|
||||
|
||||
```text
|
||||
记录需求:…;项目=(必选·Plan 点选);优先级=紧急|高|中|低;标签=…;提交部门=…;提交人=…;推进至=暂不推进|已确认|分析中|设计中|设计完成|待开发|待开发(快轨)
|
||||
受理确认:ONEOS-xx
|
||||
开始分析:ONEOS-xx → 【交付】+【分析】并回报编号
|
||||
开始设计:ONEOS-xx;交付任务=…;分析任务=… → 【设计】+收口分析
|
||||
设计完成:ONEOS-xx;设计任务=…;原型=…
|
||||
交棒开发:ONEOS-xx;交付任务=… → 待开发 + 该编号负责人=何斐
|
||||
快轨待开发:ONEOS-xx → 待开发 +【交付】+【设计】(无【分析】)+ 交付负责人=何斐
|
||||
编号直推:分析任务=ONEOS-b / 设计任务=ONEOS-c → 收口未完成计划完成 + 需求待开发 + 交付交棒何斐
|
||||
创建迭代:版本类型=主|副|子;交付任务=ONEOS-a,ONEOS-b,…;名称前缀=…
|
||||
AutoRDO:…(粘贴聊天/附录音)→ 再记录需求
|
||||
```
|
||||
|
||||
版本自动规则:取同前缀下最大 `Vx.y.z`(旧 `Vx.y` 视为 `Vx.y.0`)再按主/副/子递增;迭代名=`{前缀}{新版本}`。
|
||||
|
||||
**PJ 项目**:新建需求/迭代前须点选云效项目(实时列表);禁止默认直指。见 [project-selection.md](project-selection.md)。
|
||||
|
||||
后续推进口令**优先显式带任务编号**;未带则读「工作项编号(系统)」;仍无则询问;**禁止按标题补全**。
|
||||
|
||||
YunxiaoPM 回报止于交棒;可一句「请技术经理使用开发 Skill」。
|
||||
95
.cursor/skills/YunxiaoPM/references/compact-select.md
Normal file
95
.cursor/skills/YunxiaoPM/references/compact-select.md
Normal file
@@ -0,0 +1,95 @@
|
||||
# 压缩点选(`1a2b3a4d`)
|
||||
|
||||
记录需求 Plan **默认**用编号题 + 字母选项;用户可用一行压缩答复确认。
|
||||
|
||||
## Plan 展示模板
|
||||
|
||||
```text
|
||||
请回复压缩点选,例:1a2b3a4d
|
||||
(数字=题号,字母=选项;大小写不敏感;可写 1A2B3A4D)
|
||||
|
||||
1. 类型
|
||||
A. 新增
|
||||
B. 优化
|
||||
|
||||
2. 项目(云效实时列表;建议项可标★)
|
||||
A. 01_ONEOS(ONEOS)★
|
||||
B. 02_小羚羚APP(XLLAPP)
|
||||
C. …
|
||||
|
||||
3. 优先级
|
||||
A. 紧急
|
||||
B. 高
|
||||
C. 中
|
||||
D. 低
|
||||
|
||||
4. 标签(云效候选;建议项可标★)
|
||||
A. 故障管理★
|
||||
B. 还车应结款
|
||||
C. …
|
||||
```
|
||||
|
||||
可选续题(口令已齐则可写入清单、压缩串可不含):
|
||||
|
||||
```text
|
||||
5. 推进至 …
|
||||
6. 迭代 …
|
||||
```
|
||||
|
||||
## 解析规则
|
||||
|
||||
| 规则 | 说明 |
|
||||
|---|---|
|
||||
| 形态 | `(题号)(字母)` 连续拼接,如 `1a2b3a4d` |
|
||||
| 题号 | `1`=类型 `2`=项目 `3`=优先级 `4`=标签;可扩展 `5` `6` |
|
||||
| 字母 | `a`→第 1 项 … `z`→第 26 项;超出选项数 → 非法,停 |
|
||||
| 缺题 | 该题若口令已唯一预填且列表唯一命中,可用预填;否则停并追问缺题 |
|
||||
| 多答同题 | 后写覆盖先写 |
|
||||
| 非法字符 | 停,重贴模板 |
|
||||
|
||||
解析成功后 Plan 回显人话确认一行,例如:
|
||||
|
||||
```text
|
||||
已解析 1a2b3a4d → 类型=新增;项目=02_小羚羚APP;优先级=紧急;标签=(D 项名)
|
||||
确认后回复「执行」
|
||||
```
|
||||
|
||||
用户再回「执行」才 apply(仍守 Plan 门禁)。
|
||||
|
||||
## 与口令预填
|
||||
|
||||
口令已写 `类型:新增;项目:01_ONEOS;优先级:高;标签:故障管理` 时:
|
||||
|
||||
- 对应选项标 ★,并给出**建议压缩串**(如 `1a2a3b4a`),用户可直接改字母或整段重答。
|
||||
- **不得**因有预填而跳过展示字母表;压缩确认(或逐题点选)仍是门禁。
|
||||
|
||||
## 标签未命中 → 自动重拉一次候选并重生选项
|
||||
|
||||
「标签无法对应」:口令标签名在**当前标签候选**中 0 命中(或多命中无法唯一)。
|
||||
|
||||
| 步骤 | 动作 |
|
||||
|---|---|
|
||||
| 1 | **自动重拉一次**标签候选(见下「标签候选来源」;强制刷新,不用旧缓存) |
|
||||
| 2 | 用新列表**重新生成 4.A/B/C…** 选择项 |
|
||||
| 3 | 回报:`已自动重拉标签列表(因无法对应)`;请用户重答 `4x` 或整串 |
|
||||
| 4 | 仍无法对应 → 停;**禁止**第 3 次空转;**禁止**猜 tagId |
|
||||
|
||||
> 说明:此处重拉的是**标签候选列表**,不是项目列表。项目无法对应仍走 [project-selection.md](project-selection.md) 的「自动重拉一次」。
|
||||
|
||||
### 标签候选来源(当前已验证路径)
|
||||
|
||||
1. `runtime-ids.json` → `tags`
|
||||
2. 目标项目(或预填项目)下近期工作项 `tag` 字段聚合去重
|
||||
3. 重拉 = 再请求工作项列表聚合 + 合并 runtime;命中后可回写 `tags` 缓存
|
||||
|
||||
(专用 `tag/list` Cookie API 尚未稳定;有稳定端点后改写入 `live-api.md` 并切换。)
|
||||
|
||||
## 项目列表顺序
|
||||
|
||||
生成 2. 选项时:口令预填/建议项目置 **A** 并标 ★,其余按云效返回顺序接 B/C/…。
|
||||
|
||||
## Agent 义务
|
||||
|
||||
1. 记录需求进 Plan 时必须输出本模板(至少 1–4 题)。
|
||||
2. 收到压缩串先解析回显,再等「执行」。
|
||||
3. 标签/项目无法对应:各自动重拉**一次**并刷新对应题选项。
|
||||
69
.cursor/skills/YunxiaoPM/references/description-split.md
Normal file
69
.cursor/skills/YunxiaoPM/references/description-split.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# 需求描述 vs 交付描述
|
||||
|
||||
两类描述职责不同;禁止混写;禁止建【交付】时把 AutoPRD 六大块提前塞进交付描述。
|
||||
|
||||
## A. 需求描述 · AutoRDO 清洗
|
||||
|
||||
| 项 | 规则 |
|
||||
|---|---|
|
||||
| 触发 | 对话建需求 / 碎片材料入库 |
|
||||
| 调用 | **必须**使用独立 Skill「**`$AutoRDO`**」(`AutoRDO/SKILL.md`;本 Skill 不内嵌清洗细则) |
|
||||
| 输入 | 聊天记录、录音、口述材料 |
|
||||
| 处理 | 保留原意;书面化;去口头禅;**去除结尾句号**(细则在 AutoRDO `references/rules.md`) |
|
||||
| 输出 | 写入 `## 原始诉求(AutoRDO)` |
|
||||
| 不做 | 本阶段不写 AutoPRD 六大块;不要求已有原型;不覆盖已有「产品说明」 |
|
||||
|
||||
口令:`AutoRDO:…` → 确认后 `记录需求:【新增】标题;描述=整理稿;推进至=…`
|
||||
|
||||
## B. 交付描述
|
||||
|
||||
### B1. 标准路径(分析中起建交付)
|
||||
|
||||
| 时机 | 【交付】描述 |
|
||||
|---|---|
|
||||
| 首次创建起至设计完成前 | 固定文案:`等待设计任务完成后自动填入` |
|
||||
| 设计完成时 | 用 AutoPRD「产品说明」正文替换占位 |
|
||||
|
||||
### B2. 无单快轨建交付(覆盖 B1)
|
||||
|
||||
| 口令/材料 | 【交付】描述 |
|
||||
|---|---|
|
||||
| 手工描述(无指定原型) | **同步需求**当前手工/AutoRDO 正文;禁止占位 |
|
||||
| 指定原型页面 | `$oneos-autoprd` 从原型生成写入;禁止占位 |
|
||||
| 既无正文又无原型 | 才允许占位并标红风险 |
|
||||
|
||||
快轨【设计】描述始终复制需求当前描述正文(见 [fast-track.md](fast-track.md))。
|
||||
|
||||
## C. 需求描述双段模板(不可互相覆盖)
|
||||
|
||||
```markdown
|
||||
## 原始诉求(AutoRDO)
|
||||
(清洗稿;设计完成也不删除)
|
||||
|
||||
## 产品说明(AutoPRD)
|
||||
(六大块+对象存储链接;未设计完成前可无此节或写「待设计完成后填入」)
|
||||
|
||||
## 工作项编号(系统)
|
||||
- 交付:…
|
||||
- 分析:…
|
||||
- 设计:…
|
||||
```
|
||||
|
||||
## D. 设计完成 · AutoPRD + 附件
|
||||
|
||||
前提:设计任务完成且已关联对应原型页。
|
||||
|
||||
1. 调用 **`$oneos-autoprd`(AutoPRD)**,产出并落盘 `.spec/requirements-prd.md` + 标注同步:
|
||||
- 对象存储预览链接:`{baseUrl}/{prototype-id}/index.html`(禁止加 `prototypes/` 前缀、禁止去掉 `index.html`)
|
||||
- 产品说明 Markdown(总览/角色/流程/状态/风险/交付等,见 AutoPRD 模板)
|
||||
2. 写入需求 `## 产品说明(AutoPRD)`;**禁止覆盖** `## 原始诉求(AutoRDO)` / `## 工作项编号(系统)`。
|
||||
3. 【交付】描述:按**交付任务编号**用产品说明正文**替换**占位(细则见 AutoPRD `references/yunxiao-delivery-sync.md`);可附「原始诉求见需求描述」。**创建【交付】时不得提前灌 MD。**
|
||||
4. 附件(需求 +【交付】均挂;失败则不得声称成功):
|
||||
- Make「导出 HTML(含源码)」ZIP → [make-export-attach.md](make-export-attach.md)
|
||||
- Make「复制截图」全交互页 → 同上
|
||||
|
||||
缺原型 / AutoPRD 失败 / 导出或截图失败 → **不得**报到设计完成并宣称附件齐全;停下并列出缺项。
|
||||
|
||||
执行顺序:先 AutoPRD 落盘与附件就绪 → 再改需求/交付描述与设计计划完成 → 最后改需求状态。
|
||||
|
||||
**禁止**加载 `yunxiao-requirement-lifecycle`;阶段任务树只由本 Skill(YunxiaoPMapp)创建。
|
||||
47
.cursor/skills/YunxiaoPM/references/fast-track.md
Normal file
47
.cursor/skills/YunxiaoPM/references/fast-track.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# 无单快轨到待开发
|
||||
|
||||
适用:口令明确「快轨」或「推进至待开发」且当前需求尚无标准分析路径任务(或用户确认跳过分析)。
|
||||
|
||||
## 动作表
|
||||
|
||||
| 对象 | 动作 |
|
||||
|---|---|
|
||||
| 需求 | 状态 → **待开发**;**预计工时=2**、**实际工时=2**(覆盖同日 8h 日历工时默认);标签按口令;更新编号区块 |
|
||||
| 【交付】 | 无则新建;ASSOCIATED→需求(勿用 PARENT);负责人→何斐;**计划开始=创建当日**(`79`);**不写**计划完成;**描述双路径**(见下);**标签与需求相同**;更新编号区块 |
|
||||
| 【设计】 | **必须新建**;**TASK_SUB→交付**(交付「子项」须可见);**描述=复制需求当前描述正文**;计划开始/完成均=当日(create 后 `field/value` 写 `79`+`80`);任务→完成态;**标签与需求相同**;建后再尝试 **ASSOCIATED→原始需求**(Cookie 常失败,见 live-api;失败须标红,**子项优先于关联项**);更新编号区块 |
|
||||
| 【分析】 | **禁止创建** |
|
||||
|
||||
## 交付描述双路径(A1)
|
||||
|
||||
| 口令/材料 | 【交付】描述 |
|
||||
|---|---|
|
||||
| **手工描述**(无指定原型) | 同步需求当前手工/AutoRDO 正文(与设计一致可复制 document) |
|
||||
| **指定原型页面** | 调用 `$oneos-autoprd`,从原型生成 AutoPRD「产品说明」写入【交付】 |
|
||||
| 既无手工可同步正文、又无原型 | 才允许占位 `等待设计任务完成后自动填入`,Plan 勾选交棒占位风险,回报首行标红 |
|
||||
|
||||
有手工或原型时**禁止**交棒占位。
|
||||
|
||||
## AutoPRD
|
||||
|
||||
- 快轨默认可不跑 AutoPRD;**例外**:口令指定原型 → 交付走 AutoPRD 路径(上表)。
|
||||
- 口令同时「设计完成 + 原型」时仍按步骤 4 灌需求产品说明段。
|
||||
|
||||
## 查重
|
||||
|
||||
只认任务编号。已有分析单不得因「快轨」被删除。
|
||||
|
||||
## 回报必含
|
||||
|
||||
- 需求 / 交付 / 设计编号
|
||||
- 「快轨:未建分析;设计已同步需求描述并当日收口」
|
||||
- 交付描述来源:手工同步 / AutoPRD / 占位(若占位则首行标红)
|
||||
- 需求预计工时=2、实际工时=2
|
||||
- 设计关联项含需求编号;交付子项含设计编号
|
||||
|
||||
## 与标准 / 编号直推对比
|
||||
|
||||
```text
|
||||
标准:分析中→交付+分析 → 设计中→设计+收口分析 → 设计完成→收口设计 → 待开发交棒
|
||||
快轨(无既有阶段单):→ 待开发:新建交付+设计+交棒何斐(无分析;设计当日收口;需求工时 2+2)
|
||||
编号直推:已有分析/设计编号 → 收口空计划完成 → 待开发+交付交棒(不新建冗余单)
|
||||
```
|
||||
20
.cursor/skills/YunxiaoPM/references/handoff-and-rollback.md
Normal file
20
.cursor/skills/YunxiaoPM/references/handoff-and-rollback.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# 交棒门禁与回退最小集
|
||||
|
||||
## 交棒门禁(待开发)
|
||||
|
||||
| 情形 | 规则 |
|
||||
|---|---|
|
||||
| 【交付】描述已是 AutoPRD 正式说明(非占位) | 允许交棒;Plan 正常列交付任务编号 + 负责人→何斐 |
|
||||
| 【交付】描述仍为 `等待设计任务完成后自动填入` | **仍允许交棒**,但 Plan **必须**勾选风险项「交付描述仍为占位,技术侧仅可凭需求 AutoRDO 稿理解」;回报**首行标红**该风险;**禁止**静默交棒假装材料齐全 |
|
||||
| 口令同时带原型且要求设计完成 | 先走步骤 4(AutoPRD+附件)成功,再交棒,不再勾占位风险 |
|
||||
|
||||
## 回退 / 变更(最小集 · 兼容计划开始不篡改)
|
||||
|
||||
| 场景 | 规则 |
|
||||
|---|---|
|
||||
| 待开发 → 退回设计中 | 需求状态回退;【交付】负责人可改回创建人/产品;**交付计划开始不改**;若需重做设计 → **新开**设计任务编号(旧设计保持已收口,不改其计划开始);更新「工作项编号(系统)」中的设计编号为新号 |
|
||||
| 设计完成后需求大变 | 不自动改状态;Plan 询问是否回退设计中并新开设计编号;更新 AutoPRD 段;AutoRDO 段保留并追加「变更纪要」 |
|
||||
| 取消需求 | 关联任务标取消/废止;不删编号区块;不改已写计划开始 |
|
||||
| 度量含义 | 交付计划开始保留 = 全周期仍从首次开工起算;回退重做会拉长日历工时——回报注明「含回退重做」 |
|
||||
|
||||
凡写云效的回退仍须走 Plan 门禁。
|
||||
14
.cursor/skills/YunxiaoPM/references/handoff-contract.md
Normal file
14
.cursor/skills/YunxiaoPM/references/handoff-contract.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# 交接契约(开发 Skill 入口)
|
||||
|
||||
YunxiaoPMapp 与开发 Skill **不要**互相 include 全文;仅认下列契约。
|
||||
|
||||
```text
|
||||
PM 完成交棒 → 需求=待开发;【交付】任务编号=ONEOS-xx;负责人=何斐;ASSOCIATED 需求
|
||||
若交付描述仍为占位 → 回报已标红风险
|
||||
开发 Skill 入口 → 认「需求编号 + 交付任务编号」
|
||||
占位时只可信需求「原始诉求(AutoRDO)」并有权要求产品补设计完成
|
||||
```
|
||||
|
||||
共享常量(项目 ID、何斐 ID、节假日日历)可引用本 Skill 的 `assets/` 短路径,勿加载整份对方规则。
|
||||
|
||||
测试 Skill 另开;本契约不覆盖提测/缺陷。
|
||||
242
.cursor/skills/YunxiaoPM/references/live-api.md
Normal file
242
.cursor/skills/YunxiaoPM/references/live-api.md
Normal file
@@ -0,0 +1,242 @@
|
||||
# 云效实写 API(YunxiaoPMapp 已验证)
|
||||
|
||||
`verified_at`: 2026-07-25 · **项目须门禁 PJ 点选**(见 [project-selection.md](project-selection.md));历史验证样本项目为 `01_ONEOS` / 原「统一运营管理平台」(`last_selected.spaceIdentifier` 见 `assets/runtime-ids.json`,禁止未点选即使用)。
|
||||
|
||||
本文件只记**已跑通**的写法;禁止再盲试 `updateStatus` / 错误 `updateFieldValue` POST。
|
||||
|
||||
## 认证
|
||||
|
||||
- Cookie:Chrome 域 `.aliyun.com` / `devops.aliyun.com`(`browser_cookie3` 或 Playwright storage)
|
||||
- Header:`x-xsrf-token` = cookie `XSRF-TOKEN`(URL 解码后)
|
||||
- `Origin` / `Referer`:`https://devops.aliyun.com`
|
||||
|
||||
## 建单
|
||||
|
||||
`POST|PUT /projex/api/workitem/workitem?_input_charset=utf-8`
|
||||
|
||||
创建响应 `result.identifier` / `serialNumber` 即编号真相;**禁止按标题查重**。
|
||||
|
||||
## 改负责人(已通)
|
||||
|
||||
```http
|
||||
PATCH /projex/api/workitem/workitem/{id}?_input_charset=utf-8
|
||||
{"propertyKey":"assignedTo","propertyValue":"<userId>","operateType":"COVER"}
|
||||
```
|
||||
|
||||
交棒:【交付】`propertyValue` = 何斐 ID。
|
||||
|
||||
## 打标签(已通)
|
||||
|
||||
```http
|
||||
PATCH /projex/api/workitem/workitem/{id}?_input_charset=utf-8
|
||||
{"workitemIdentifier":"{id}","propertyKey":"tag","propertyValue":"<tagId>[,<tagId>]","operateType":"COVER"}
|
||||
```
|
||||
|
||||
## 改状态(已通 · 唯一推荐)
|
||||
|
||||
```http
|
||||
POST /projex/api/workitem/workitem/{id}/status/transit?_input_charset=utf-8
|
||||
{"fromStatus":"<当前status.identifier>","toStatus":"<目标status.identifier>"}
|
||||
```
|
||||
|
||||
成功:`code=200` 且 `result=true`。失败时 `errorMsg` 含「不能流转」。
|
||||
|
||||
### 需求状态 ID(本项目)
|
||||
|
||||
| 显示名 | identifier |
|
||||
|---|---|
|
||||
| 待处理 | `100005` |
|
||||
| 已确认 | `32` |
|
||||
| 分析中 | `154395` |
|
||||
| 设计中 | `156603` |
|
||||
| 设计完成 | `307012` |
|
||||
| 待开发 | `1582fc929d429111b925309493` |
|
||||
|
||||
### 任务状态 ID
|
||||
|
||||
| 显示名 | identifier |
|
||||
|---|---|
|
||||
| 待处理 | `100005` |
|
||||
| 已完成 | `100014` |
|
||||
|
||||
### 极速交棒跳转(工作流允许)
|
||||
|
||||
从「待处理」菜单可见直达「设计完成」;推荐最少跳:
|
||||
|
||||
```text
|
||||
待处理 → 设计完成 → 待开发
|
||||
```
|
||||
|
||||
标准路径若需看板留痕,可走完整链:已确认→分析中→设计中→设计完成→待开发(仍用本 API,勿开 UI)。
|
||||
|
||||
### 禁止(已证伪)
|
||||
|
||||
| 写法 | 结果 |
|
||||
|---|---|
|
||||
| `PATCH …/updateStatus` + `statusIdentifier` | `400 不能为空` |
|
||||
| `PATCH …/{id}` + `propertyKey=status` | `property not found` |
|
||||
| Playwright 点左侧/列表上的状态色块(`x<1100`) | 假成功、状态不落库 |
|
||||
|
||||
仅当 `status/transit` 不可用时,才用 UI:右侧详情状态钮(`getBoundingClientRect().x > 1100`)+ `.next-menu-item`。
|
||||
|
||||
## 计划开始/完成 · 提交部门/人 · 预计工时(2026-07-27 修订)
|
||||
|
||||
**通用字段写入(已通):**
|
||||
|
||||
```http
|
||||
POST /projex/api/workitem/workitem/field/value/{workitemId}?_input_charset=utf-8
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
fieldValueList=[{"fieldIdentifier":"79","value":"2026-07-27 12:00:00"},{"fieldIdentifier":"3132597a9718d1c282b7ba5a0c","value":"业务管理部"},{"fieldIdentifier":"9e01269e96f91fbb97d36bf5b3","value":"何苗苗"}]
|
||||
```
|
||||
|
||||
| 字段 | fieldIdentifier | value |
|
||||
|---|---|---|
|
||||
| 计划开始 | `79` | `YYYY-MM-DD HH:mm:ss`(推荐正午)或 epoch ms 字符串 |
|
||||
| 计划完成 | `80` | 同上 |
|
||||
| 提交部门 | `3132597a9718d1c282b7ba5a0c` | 纯文本 |
|
||||
| 提交人 | `9e01269e96f91fbb97d36bf5b3` | 纯文本 |
|
||||
|
||||
**预计工时 `101586`:禁止直接改字段**(报「不可直接修改」)。须登记:
|
||||
|
||||
```http
|
||||
POST /projex/api/workitem/workitem/time/estimate?_input_charset=utf-8
|
||||
{"workitemIdentifier":"<id>","spentTime":8,"type":"develop","description":"阶段日历工时","recordUserIdentifier":"<userId>","forCreate":false,"containsRestDay":false}
|
||||
```
|
||||
|
||||
删除多余预估:`DELETE /projex/api/workitem/workitem/time/estimate/{workitemId}/{estimateId}`
|
||||
列表:`GET …/time/estimate/list?workitemIdentifier=`
|
||||
|
||||
旧写法 `PATCH …/updateWorkitemFieldValue` 对上述自定义字段常 `400 不能为空`,勿再优先使用。
|
||||
|
||||
## 父子 / 子项 / 关联项(已通 · 2026-07-23 修订 · 子项优先)
|
||||
|
||||
### 关联项(【交付】强制 · ASSOCIATED)
|
||||
|
||||
任务详情「关联项」只认 `ASSOCIATED`。**仅【交付】**建单时 `createWorkitemRelationInfo` 必须指向**需求**:
|
||||
|
||||
```json
|
||||
{
|
||||
"createWorkitemRelationInfo": {
|
||||
"relatedWorkitemIdentifier": "<需求id>",
|
||||
"relatedToRelationIdentifier": "ASSOCIATED"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
校验:
|
||||
|
||||
```http
|
||||
GET /projex/api/workitem/v2/workitem/{交付id}/relation/workitem/list/by-relation-category?category=ASSOCIATED&isForward=true
|
||||
```
|
||||
|
||||
`result` 含该需求即通过。
|
||||
|
||||
### 禁止(关联项)
|
||||
|
||||
| 写法 | 结果 |
|
||||
|---|---|
|
||||
| `relatedToRelationIdentifier=PARENT` 把交付挂需求 | 详情可能有 parent,**关联项仍为空** |
|
||||
| 分析/设计只用 `ASSOCIATED→需求` + `parentIdentifier` | 关联项可能有,**交付子项仍为空**(ONEOS-246/247) |
|
||||
| 建后再 `POST …/relation/record` 补关系 | Cookie 路径下常报「不能关联相同的工作项」 |
|
||||
| `createWorkitemRelationList` | 不落 ASSOCIATED |
|
||||
|
||||
### 子项(【分析】/【设计】强制 · TASK_SUB)
|
||||
|
||||
「子项」页读 `PARENT_SUB` / `TASK_SUB`,分析/设计**必须**:
|
||||
|
||||
```json
|
||||
{
|
||||
"parent": "<交付id>",
|
||||
"parentIdentifier": "<交付id>",
|
||||
"createWorkitemRelationInfo": {
|
||||
"relatedWorkitemIdentifier": "<交付id>",
|
||||
"relatedToRelationIdentifier": "TASK_SUB"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
同一 create 只能带一条 `createWorkitemRelationInfo`。
|
||||
`ASSOCIATED→需求` 与 `TASK_SUB→交付` **不能同时写**。
|
||||
|
||||
**产品优先级:交付「子项」tab > 阶段任务「关联项」。**
|
||||
交付本身仍必须 `ASSOCIATED→需求`。标准路径下分析/设计的「关联项」允许为空。
|
||||
|
||||
**无单快轨例外(设计双挂):** create 用 `TASK_SUB→交付` 后,须再补 **ASSOCIATED→原始需求**,使设计详情「关联项」可见需求。
|
||||
|
||||
```http
|
||||
POST /projex/api/workitem/workitem/{设计id}/relation/record?_input_charset=utf-8
|
||||
{"relationIdentifier":"ASSOCIATED","toWorkitemIdentifier":"<需求id>"}
|
||||
```
|
||||
|
||||
**已证伪(Cookie · 2026-07-27):** 凡工作项**已创建**后再 `relation/record` 补挂(含 ASSOCIATED / TASK_SUB),常报「不能关联相同的工作项」;与是否已有父项无关。`createWorkitemRelationList` 亦不落 ASSOCIATED。
|
||||
**可行路径:**
|
||||
|
||||
| 目标 | 做法 |
|
||||
|---|---|
|
||||
| 交付「子项」可见设计(优先) | create 带 `TASK_SUB→交付` |
|
||||
| 设计「关联项」可见需求 | create 带 `ASSOCIATED→需求`(与上互斥,同 create 只能一条) |
|
||||
| 双挂 | 需个人 `x-yunxiao-token` OpenAPI;Cookie 路径**不得**声称成功 |
|
||||
|
||||
产品默认:**子项优先**;关联项失败须在回报中标红并列出缺项。
|
||||
|
||||
校验子项:
|
||||
|
||||
```http
|
||||
GET /projex/api/workitem/v2/workitem/{交付id}/relation/workitem/list/by-relation-category?category=PARENT_SUB&isForward=true
|
||||
```
|
||||
|
||||
结果须含对应分析/设计 identifier。
|
||||
|
||||
校验设计关联项:
|
||||
|
||||
```http
|
||||
GET /projex/api/workitem/v2/workitem/{设计id}/relation/workitem/list/by-relation-category?category=ASSOCIATED&isForward=true
|
||||
```
|
||||
|
||||
`result` 须含原始需求 identifier。
|
||||
|
||||
### 无单快轨字段默认(2026-07-27)
|
||||
|
||||
| 对象 | 规则 |
|
||||
|---|---|
|
||||
| 【设计】描述 | 复制需求 document HTML |
|
||||
| 【设计】`79`/`80` | 当日 `12:00:00` / `23:59:59`,create 后 `field/value`(勿 create 同时带 79+80) |
|
||||
| 【交付】描述 | 手工同步需求正文,或原型→AutoPRD;禁止无故占位 |
|
||||
| 【交付】`79` | 创建当日;不写 `80` |
|
||||
| 【交付】/【设计】标签 | 与需求相同,`PATCH propertyKey=tag` |
|
||||
| 需求预计工时 | `time/estimate` **spentTime=2**(先删多余预估) |
|
||||
| 需求实际工时 | `POST …/workitem/time`,body 用 **`actualTime`**(非 spentTime)+ `gmtStart`/`gmtEnd` epoch ms 字符串;见 `runtime-ids.json` `fields.actual_hours` |
|
||||
| 描述更新 | `PATCH …/workitem/{id}/document`,`{"content":"<html>","formatType":"RICHTEXT"}` |
|
||||
|
||||
## 迭代挂接(已通 · 2026-07-27 · 只挂交付)
|
||||
|
||||
创建迭代:`POST /projex/api/workspace/sprint`(必填 `staffIds`;可写 `capacityHours`)。
|
||||
|
||||
挂【交付】到迭代:
|
||||
|
||||
```http
|
||||
PATCH /projex/api/workitem/workitem/{交付id}?_input_charset=utf-8
|
||||
{"workitemIdentifier":"{交付id}","propertyKey":"sprint","propertyValue":"{sprintId}","operateType":"COVER"}
|
||||
```
|
||||
|
||||
清空误挂(如需求):`propertyValue:""` + `operateType:"COVER"`。
|
||||
|
||||
**校验**必须读 `/extra`(详情主接口常不含 sprint 字段,禁止据此判失败):
|
||||
|
||||
```http
|
||||
GET /projex/api/workitem/workitem/{id}/extra?_input_charset=utf-8
|
||||
→ result.sprint[].identifier / name
|
||||
```
|
||||
|
||||
产品规则:**只挂【交付】**;需求 / 分析 / 设计默认不挂(除非口令显式)。
|
||||
|
||||
### 极速建单注意
|
||||
|
||||
1. Cookie 只刷一次;全程纯 HTTP,默认**不开浏览器**。
|
||||
2. 交付建完后,【分析】与【设计】**并行**创建(均 TASK_SUB→交付);标准/快轨两树可并行。
|
||||
3. 状态用 `transit` + **本地追踪 fromStatus**(禁止每次 GET);负责人在交棒场景下**创建时即何斐**。
|
||||
4. 建单 `fieldValueList` 可带计划开始 `79`;**不要**在 create 同时写 `79+80`(同日会 400)。
|
||||
5. 标签必须 PATCH(create 带 tag 不落库);可与建子任务重叠;快轨交付/设计须与需求同标签。
|
||||
6. `requests.Session` keep-alive;**禁止**对共享 opener 加全局锁。
|
||||
7. 脚本入口:`scripts/live_create_fast.py`(v5:快轨描述/计划/标签/工时 2+2/设计 ASSOCIATED 补挂)。
|
||||
59
.cursor/skills/YunxiaoPM/references/live-perf-2026-07-23.md
Normal file
59
.cursor/skills/YunxiaoPM/references/live-perf-2026-07-23.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# 2026-07-23 真实建单复盘与极速优化
|
||||
|
||||
## 测试结论
|
||||
|
||||
标准 + 快轨均可建到「待开发」交棒;交付树、标签「故障管理」、快轨无【分析】均正确。
|
||||
|
||||
| 轮次 | 编号 |
|
||||
|---|---|
|
||||
| 第一轮(探测+UI) | ONEOS-141~147 |
|
||||
| 极速 v1 | ONEOS-148~154 |
|
||||
| 极速 v2 | ONEOS-164~177(含中间探针) |
|
||||
|
||||
## 过程问题(已修)
|
||||
|
||||
| # | 问题 | 根因 | 修复 |
|
||||
|---|---|---|---|
|
||||
| 1 | 状态改不动 / 假成功 | 误用 `updateStatus`;UI 点列表区 | `POST …/status/transit` |
|
||||
| 2 | 负责人改不成 | `updateFieldValue` 错 | `PATCH …/{id}` + `assignedTo` |
|
||||
| 3 | 状态 ID 不全 | 未抓网络 | 写入 `runtime-ids.json` |
|
||||
| 4 | 极慢 | Playwright + 串行探测 | 纯 HTTP + 并行 |
|
||||
| 5 | v1 仍偏慢 | 多余 GET、串行 PATCH 计划、交棒再改负责人 | 见下节 v2 |
|
||||
|
||||
## 性能对比
|
||||
|
||||
| 口径 | 优化前(第一轮) | 极速 v1 | 极速 v2(本轮) |
|
||||
|---|---|---|---|
|
||||
| 会话墙钟 | ≈ **17.9 分钟** | — | — |
|
||||
| 两路径并行建单墙钟 | ≈4.1 分钟自动化 | **4.4 s** | **2.2 s** |
|
||||
| 标准单路径 | 失败反复 | 3.7 s | **2.2 s** |
|
||||
| 快轨单路径 | 失败反复 | 3.7 s | **2.1 s** |
|
||||
| 浏览器 | 多次 | 无 | 无 |
|
||||
|
||||
相对第一轮会话 ≈ **490×**;相对 v1 再快约 **2×**。
|
||||
|
||||
## v2 压榨点(已落地)
|
||||
|
||||
1. `status/transit` **本地追踪** `fromStatus`,跳过每次 GET。
|
||||
2. 建单 `fieldValueList` 带**计划开始(79)**;计划完成不在 create 写(同日会 400)。
|
||||
3. 【交付】创建时负责人直接 **何斐**(省 PATCH)。
|
||||
4. `requests.Session` keep-alive;**去掉全局锁**(否则并行失效)。
|
||||
5. 打标签与建子任务 **重叠**;两路径并行。
|
||||
6. 交棒后汇总用创建响应,校验 GET 移出主路径计时。
|
||||
|
||||
## 探针结论(未采用)
|
||||
|
||||
| 尝试 | 结果 |
|
||||
|---|---|
|
||||
| create `fieldValueList` 带 tag | 建单成功但标签不落库 → 仍须 PATCH |
|
||||
| create 同时写 79+80 | `400 计划…转化异常` |
|
||||
| urllib 全局 lock + 单 opener | 并行被串行化,单路径 ≈4 s |
|
||||
|
||||
## 仍可再压(收益变小)
|
||||
|
||||
1. 标签 API 若将来支持 create 落库,可再少 2~4 次 PATCH。
|
||||
2. HTTP/2 或连接预热(DNS/TLS 复用到进程级)。
|
||||
3. 业务允许「建单即待开发」且平台支持初始状态 → 少 2 次 transit。
|
||||
4. 计划完成改为交棒后异步补写(当前故意跳过)。
|
||||
|
||||
脚本:`scripts/live_create_fast.py`(mode=`live_create_fast_v2`)。
|
||||
53
.cursor/skills/YunxiaoPM/references/make-export-attach.md
Normal file
53
.cursor/skills/YunxiaoPM/references/make-export-attach.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# Make 导出与截图附件
|
||||
|
||||
设计完成(步骤 4)且已关联原型页时:需求与【交付】均挂附件。任一侧失败 → 不得声称设计完成附件齐全。
|
||||
|
||||
## 1. 导出 HTML(含源码)ZIP
|
||||
|
||||
与 Make「发布 → 导出 HTML(含源码)」对齐。
|
||||
|
||||
优先本地 Make Admin:
|
||||
|
||||
```http
|
||||
GET {adminOrigin}/api/export-html?path={prototypePath}&projectId={projectId}&includeSource=true
|
||||
```
|
||||
|
||||
| 参数 | 要求 |
|
||||
|---|---|
|
||||
| `path` | 原型路径(如 `prototypes/oneos-h5-vehicle-assets`) |
|
||||
| `includeSource` | **必须** `true` |
|
||||
| 响应 | ZIP(`PK` 头);文件名建议 `{prototype-id}-html-source.zip` |
|
||||
|
||||
失败时:提示用户在 Make 客户端对该原型执行「发布 → 导出 HTML(含源码)」,把 ZIP 路径发回。
|
||||
**禁止**用「仅对象存储链接」冒充已附带源码包。
|
||||
|
||||
## 2. 复制截图(全交互页)
|
||||
|
||||
1. Make「发布 → **复制截图**」(或等价:导出该原型主界面及所有交互页截图)。
|
||||
2. 上传到需求附件与【交付】附件。
|
||||
3. 缺页/失败 → 列出缺项,不得报成功。
|
||||
|
||||
## 3. 挂载范围
|
||||
|
||||
同一 ZIP / 同一批截图:
|
||||
|
||||
1. 上传到需求 identifier
|
||||
2. 上传到【交付】任务 identifier
|
||||
|
||||
优先 API;未知 upload 端点时用已登录浏览器在详情页「附件」上传。
|
||||
|
||||
## 4. 与对象存储的关系
|
||||
|
||||
| 产物 | 用途 |
|
||||
|---|---|
|
||||
| `{baseUrl}/{id}/index.html` | AutoPRD 描述内可点预览链接 |
|
||||
| 导出 ZIP(含源码) | 附件,供开发离线打开 |
|
||||
| 交互页截图 | 附件,供评审/开发对照 |
|
||||
|
||||
三者职责不同,不可互相替代。
|
||||
|
||||
## 负向
|
||||
|
||||
- 不得导出错误原型页(须 Plan 确认原型路径/名称)。
|
||||
- 不得把别的需求的旧 ZIP 复用到新需求。
|
||||
- 快轨交棒默认不跑本附件流程(除非口令同时设计完成+原型)。
|
||||
60
.cursor/skills/YunxiaoPM/references/model.md
Normal file
60
.cursor/skills/YunxiaoPM/references/model.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# 交付树模型与关联约定
|
||||
|
||||
## 真相源
|
||||
|
||||
```text
|
||||
需求状态 = 阶段看板唯一真相(分析中/设计中/待开发…)
|
||||
【交付】任务 = 该需求的交付容器(每需求最多 1 条)
|
||||
【分析】/【设计】 = YunxiaoPMapp 在交付下建的阶段子项
|
||||
【开发】/【测试】 = 另属开发 Skill / 测试 Skill,不进本包
|
||||
ASSOCIATED = 横向挂钩(【交付】 ↔ 需求)
|
||||
SUB / TASK_SUB = 纵向拆解(交付 → 分析/设计)
|
||||
```
|
||||
|
||||
## 关系验收
|
||||
|
||||
| 关系 | 用在哪里 | 验收 | 优先级 |
|
||||
|---|---|---|---|
|
||||
| ASSOCIATED | **仅【交付】** ↔ 需求 | 交付详情「关联项」能看到需求(**强制**) | 交付必过 |
|
||||
| TASK_SUB | 【分析】/【设计】 → 【交付】 | 交付详情「子项」能看到阶段任务(**强制**) | 阶段任务必过 |
|
||||
|
||||
建单规则(Cookie 路径 · 同一 create 只能一条 `createWorkitemRelationInfo`):
|
||||
|
||||
| 对象 | `createWorkitemRelationInfo` | 另写字段 |
|
||||
|---|---|---|
|
||||
| 【交付】 | `ASSOCIATED` → 需求 | — |
|
||||
| 【分析】/【设计】 | `TASK_SUB` → 交付 | `parent` + `parentIdentifier` = 交付 |
|
||||
|
||||
**禁止**对分析/设计只写 `parentIdentifier` + `ASSOCIATED→需求`:关联项可能有,但交付「子项」仍为空(ONEOS-246/247 已复现)。
|
||||
勿用 `PARENT` 冒充关联项。细则见 [live-api.md](live-api.md)。
|
||||
|
||||
## 禁止
|
||||
|
||||
| 禁止 | 说明 |
|
||||
|---|---|
|
||||
| 创建或描述【开发】/【测试】 | 口令与回报均不出现 |
|
||||
| 分析/设计未挂成交付子项(无 TASK_SUB) | 交付「子项」为 0,交棒验收失败 |
|
||||
| 用任务名称/标题做唯一性或查重 | 不得 `subject` 匹配复用 |
|
||||
| 同一需求认定多个交付任务编号 | 列出编号请人合并后再继续 |
|
||||
| 功能模块标签用「分析/设计/交付」 | 模块标签打在需求(可选交付)上 |
|
||||
|
||||
## 任务标题(仅展示)
|
||||
|
||||
- 【交付】+ 需求标题
|
||||
- 【分析】+ 需求标题
|
||||
- 【设计】+ 需求标题
|
||||
|
||||
标题可改,**不参与查重**。
|
||||
|
||||
## 任务编号唯一性
|
||||
|
||||
**唯一允许的查重/复用渠道:云效任务编号**(如 `ONEOS-99` / `serialNumber`)。
|
||||
|
||||
| 场景 | 正确 | 错误 |
|
||||
|---|---|---|
|
||||
| 首次创建【交付】 | 建单成功后回报并写入「工作项编号(系统)」 | 下次用标题搜 |
|
||||
| 复用【交付】 | 口令或编号区块带 `交付任务=ONEOS-xx` | list 后按 subject 相等 |
|
||||
| 判断是否已有交付 | 编号区块或交付 ASSOCIATED 编号集合 | 数【交付】开头标题 |
|
||||
| 分析/设计幂等 | 仅已登记编号 | 按【分析】+需求标题 |
|
||||
|
||||
按编号命中则复用;**计划开始已有值禁止改写**。
|
||||
35
.cursor/skills/YunxiaoPM/references/number-push.md
Normal file
35
.cursor/skills/YunxiaoPM/references/number-push.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# 编号直推到待开发
|
||||
|
||||
适用:标准路径已建过【分析】和/或【设计】,用**任务编号**一口气推到待开发交棒。
|
||||
|
||||
## 入口(只认编号)
|
||||
|
||||
```text
|
||||
交棒开发:需求=ONEOS-xx;交付任务=ONEOS-a;分析任务=ONEOS-b;设计任务=ONEOS-c
|
||||
交棒开发:分析任务=ONEOS-b → 由分析 ASSOCIATED/SUB 反查需求与交付
|
||||
交棒开发:设计任务=ONEOS-c → 同上反查
|
||||
```
|
||||
|
||||
禁止用标题猜。编号对不上关联树 → 停下列出关联,不瞎改。
|
||||
|
||||
## 动作表
|
||||
|
||||
| 对象 | 动作 |
|
||||
|---|---|
|
||||
| 需求 | 状态 → **待开发**(按云效连跳) |
|
||||
| 【交付】 | **必须**用交付任务编号定位;负责人→何斐;不改计划开始;不写计划完成;描述仍占位则保持(除非同时设计完成+原型+AutoPRD) |
|
||||
| 【分析】 | 若有编号:计划完成若为空 → 写当日并推工时;**不新建**第二条 |
|
||||
| 【设计】 | 若有编号:计划完成若为空 → 写当日并推工时;**不新建**第二条 |
|
||||
| 仅有分析、尚无设计 | **不强制补建【设计】**(与无单快轨区分);回报注明「无设计任务编号」 |
|
||||
| 仅有设计、无分析 | 收口设计 + 交棒;**不补建分析** |
|
||||
|
||||
## 与无单快轨区别
|
||||
|
||||
| | 无单快轨 | 编号直推 |
|
||||
|---|---|---|
|
||||
| 前提 | 尚无分析/设计阶段单(或明确跳过分析) | 已有分析和/或设计**任务编号** |
|
||||
| 【分析】 | 禁止创建 | 有编号则收口,无则不建 |
|
||||
| 【设计】 | 必须新建且当日收口 | 有编号则收口;仅分析无设计时不强制新建 |
|
||||
| 定位 | 新建后登记编号 | **仅任务编号**定位/反查 |
|
||||
|
||||
仍不创建【开发】/【测试】。交棒占位风险见 [handoff-and-rollback.md](handoff-and-rollback.md)。
|
||||
73
.cursor/skills/YunxiaoPM/references/project-selection.md
Normal file
73
.cursor/skills/YunxiaoPM/references/project-selection.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# 门禁 PJ · 云效项目选择(强制点选)
|
||||
|
||||
凡 **新建需求 / 新建任务树 / 创建迭代 / 其它写入依赖 `spaceIdentifier`** 的操作,项目必须由用户从云效实时列表**点选**。禁止静默使用 `runtime-ids.json` 里的默认 `project.spaceIdentifier`。
|
||||
|
||||
## 何时触发
|
||||
|
||||
| 场景 | 是否必须选项目 |
|
||||
|---|---|
|
||||
| 记录需求 / 无单快轨新建 | **必须** |
|
||||
| 创建迭代(新挂项目空间) | **必须**(与需求同项目时沿用已锁定项,仍须在 Plan 写出项目名+ID) |
|
||||
| 仅推进已有编号(受理确认、开始分析…) | **不必重选**;以该编号所在项目为准,Plan 写出项目名 |
|
||||
| 只读查询 | 不强制 |
|
||||
|
||||
## 执行顺序(建单前)
|
||||
|
||||
1. **实时拉取**云效项目列表(Cookie + XSRF):
|
||||
|
||||
```http
|
||||
GET /projex/api/workspace/project/search/list
|
||||
?category=Project&scope=all&toPage=1&pageSize=100
|
||||
&conditions={"conditionGroups":[[]]}
|
||||
&extraConditions=…(可与页面一致:当前用户参与 + public)
|
||||
&orderBy={"fieldIdentifier":"gmtCreate","format":"input","order":"desc","className":"date"}
|
||||
&_input_charset=utf-8
|
||||
```
|
||||
|
||||
2. 将结果整理为单选列表:`{name}({customCode})`;选项 id 用 `identifier`(spaceId)。
|
||||
3. **AskQuestion / Plan 单选**「PJ. 云效项目」;未点选 → **禁止 create**。
|
||||
4. 「批准 Plan」≠ 已选项目;Plan 里仍是空选项或写「默认 01_ONEOS」而未点选 → 停。
|
||||
5. 用户点选后:本轮 apply 全程使用该 `spaceIdentifier`;回报写清项目名 + customCode + spaceId。
|
||||
6. 拉取成功后可回写 `assets/runtime-ids.json` → `projects_catalog`(缓存);**缓存不得当作已选项**。
|
||||
|
||||
## 无法对应 → 自动重拉一次
|
||||
|
||||
「无法对应」任一成立即触发:
|
||||
|
||||
| # | 情形 |
|
||||
|---|---|
|
||||
| 1 | 口令/预填的项目名、customCode、别名在**当前列表**中 0 命中 |
|
||||
| 2 | 口令给出的 spaceId / identifier 不在当前列表 |
|
||||
| 3 | 用户点选的选项 id 在 apply 前校验时已不在列表(列表过期) |
|
||||
| 4 | 仅命中 `projects_catalog` 缓存、与本次实时列表不一致 |
|
||||
| 5 | 首次拉取失败后改用了缓存,用户按缓存点选后 create 报项目/空间无效 |
|
||||
|
||||
**动作(固定一次):**
|
||||
|
||||
1. **立即再调一次**同一 `project/search/list`(强制网络,不用缓存)。
|
||||
2. 用新列表重新做匹配 / 刷新 Plan 单选选项;可回写 `projects_catalog`。
|
||||
3. 回报注明:`已自动重拉项目列表(因无法对应)`。
|
||||
4. **仍无法对应** → 停,展示最新列表请用户重选;**禁止**再自动拉第 3 次;**禁止**猜一个 spaceId 继续建单。
|
||||
|
||||
匹配规则(名/码):忽略大小写;`name` 全等或包含;`customCode` 全等;`name_aliases` 全等。多命中视为无法唯一对应 → 重拉后仍多命中则请用户点选,不自动选定。
|
||||
|
||||
## 禁止
|
||||
|
||||
- 未询问就写入 `project.spaceIdentifier`(即便 catalog 标了 `suggested`)
|
||||
- 按口令里的「统一运营管理平台」字符串静默映射而不展示列表点选(口令仅作**预填建议**,仍须用户确认点选)
|
||||
- API 失败时擅自沿用上次默认;应展示 `projects_catalog` 缓存并标明「离线缓存,请确认」,仍须点选;用户确认后若仍无法对应 → 走上一节「自动重拉一次」
|
||||
- 多项目并行建单却共用一个未确认的 spaceId
|
||||
- 「无法对应」时循环重拉超过 1 次,或跳过点选直接建单
|
||||
|
||||
## 口令预填
|
||||
|
||||
```text
|
||||
记录需求:…;项目=01_ONEOS;…
|
||||
```
|
||||
|
||||
若口令已含项目名/编号前缀且在实时列表中**唯一命中**:Plan 可预勾该选项,但仍须用户确认;0 命中或多命中 → **先自动重拉一次**再匹配;仍 0/多 → 不预勾,只展示最新列表。
|
||||
|
||||
## 脚本
|
||||
|
||||
`scripts/list_projects.py`:stdout JSON `projects[]`。
|
||||
带查询时:`python3 scripts/list_projects.py --match '01_ONEOS'` —— 0 命中/多命中则自动重拉一次再匹配(`refetched: true`)。
|
||||
58
.cursor/skills/YunxiaoPM/references/record-meta-fields.md
Normal file
58
.cursor/skills/YunxiaoPM/references/record-meta-fields.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# 记录需求 · 元字段(优先级 / 标签 / 提交部门 / 提交人)
|
||||
|
||||
建单前消费网页 / AutoRDO / 口令中的四类元信息。细则与 `assets/runtime-ids.json` 对齐;**禁止臆造未验证的 fieldIdentifier**。
|
||||
|
||||
## 口令形态
|
||||
|
||||
```text
|
||||
记录需求:…;优先级=紧急|高|中|低;标签=…;提交部门=…;提交人=…;推进至=…
|
||||
```
|
||||
|
||||
四字段均可选出现;网页或 AutoRDO 提示里已带的值与口令等价。
|
||||
|
||||
## Plan 是否追问
|
||||
|
||||
记录需求 **一律**走 [compact-select.md](compact-select.md) 字母表(类型/项目/优先级/标签),即使用户口令已写齐;给出建议压缩串,等用户回 `1a2b3a4d`(或改字母)并「执行」。
|
||||
|
||||
| 条件 | 行为 |
|
||||
|---|---|
|
||||
| 口令已含类型/项目/优先级/标签 | 对应选项标 ★ + 建议压缩串;**仍须**压缩确认或显式点选 |
|
||||
| 标签名 0 命中 / 多命中 | **自动重拉一次**标签候选并重生 4.A/B/C…;仍失败则停 |
|
||||
| 仅缺提交部门/提交人 | 压缩 1–4 确认后,缺则追问或写入描述页脚 |
|
||||
| 仅缺「推进至」等 | 按既有口令规则;可作 5. 题字母表 |
|
||||
|
||||
## 写入策略
|
||||
|
||||
### 优先级(已验证)
|
||||
|
||||
- 映射:`runtime-ids.json` → `priority`(紧急 / 高 / 中 / 低)。
|
||||
- create 时写入 `fieldIdentifier: "priority"`(与 [live-api.md](live-api.md) / `live_create_fast.py` 一致)。
|
||||
- 未给优先级时:Plan 追问;脚本默认「中」仅作既有兜底,口令/网页有值时以用户值为准。
|
||||
|
||||
### 标签(已验证)
|
||||
|
||||
- 映射:`runtime-ids.json` → `tags`(按显示名取 tagId)。
|
||||
- 标签须 **PATCH** `propertyKey: "tag"`(create 带 tag 不落库)。
|
||||
- 口令/网页给出的标签名若不在候选:按 [compact-select.md](compact-select.md) **自动重拉一次**标签列表并重生选项;仍无则停在 Plan,勿猜 ID。
|
||||
|
||||
### 提交部门 / 提交人(已验证 · 2026-07-27 · ONEOS-293)
|
||||
|
||||
| 字段 | fieldIdentifier |
|
||||
|---|---|
|
||||
| 提交部门 | `3132597a9718d1c282b7ba5a0c` |
|
||||
| 提交人 | `9e01269e96f91fbb97d36bf5b3` |
|
||||
|
||||
| 规则 | 说明 |
|
||||
|---|---|
|
||||
| **写入** | `POST /projex/api/workitem/workitem/field/value/{workitemId}`,`Content-Type: application/x-www-form-urlencoded`,参数 `fieldValueList` = JSON 数组字符串 `[{"fieldIdentifier","value"}]` |
|
||||
| **形态** | 均为普通文本 input(非人员选择器);口令值原样写入 |
|
||||
| **页脚** | 仍可在描述页脚重复一份,便于检索;**不能替代**字段写入 |
|
||||
| **计划开始** | 字段 `79`,同一 `field/value` API;推荐 `YYYY-MM-DD 12:00:00`。快轨:【交付】/【设计】创建当日写入;【设计】另写计划完成 `80`=`当日 23:59:59` |
|
||||
| **预计工时** | 字段 `101586` **禁止**直接 PATCH;用 `POST …/time/estimate`(`spentTime`)登记;删多余用 `DELETE …/time/estimate/{workitemId}/{estimateId}` |
|
||||
| **实际工时** | `POST …/workitem/time`,body **`actualTime`**(非 spentTime)+ `gmtStart`/`gmtEnd`(epoch ms 字符串);快轨待开发需求默认 **2** |
|
||||
| **描述更新** | `PATCH …/workitem/{id}/document`,`{"content","formatType":"RICHTEXT"}` |
|
||||
| **快轨标签** | 【交付】【设计】建单后 `PATCH propertyKey=tag`,`propertyValue` 与需求 tagId 一致(多标签逗号拼接) |
|
||||
|
||||
## 与描述双段的关系
|
||||
|
||||
页脚元信息写在「原始诉求」段末或整篇描述末尾均可,**不得覆盖** `## 产品说明(AutoPRD)` / `## 工作项编号(系统)` 区块(见 [description-split.md](description-split.md))。
|
||||
63
.cursor/skills/YunxiaoPM/references/sprint.md
Normal file
63
.cursor/skills/YunxiaoPM/references/sprint.md
Normal file
@@ -0,0 +1,63 @@
|
||||
# 创建迭代并关联交付
|
||||
|
||||
产品经理可将已交棒(或已有编号)的多条【交付】任务打进同一云效迭代。
|
||||
|
||||
## 口令
|
||||
|
||||
```text
|
||||
创建迭代:版本类型=副;交付任务=ONEOS-a,ONEOS-b,ONEOS-c;名称前缀=统一运营管理平台PC端
|
||||
创建迭代:版本类型=子;交付任务=ONEOS-99;名称前缀=统一运营管理平台PC端
|
||||
```
|
||||
|
||||
| 参数 | 规则 |
|
||||
|---|---|
|
||||
| 交付任务 | **1..N 个任务编号**(逗号分隔);禁止用标题凑数 |
|
||||
| 版本类型 | 主 / 副 / 子;未点选则停下询问,禁止默认猜 |
|
||||
| 名称前缀 | 可选;缺省 `统一运营管理平台PC端`。最终名=`{前缀}{版本号}` |
|
||||
|
||||
## 版本号 `V{主}.{副}.{子}`
|
||||
|
||||
| 版本类型 | 含义 | 递增 |
|
||||
|---|---|---|
|
||||
| **主** | 功能重制 | 主+1,副→0,子→0(V1.3.2→V2.0.0) |
|
||||
| **副** | 新功能上线 | 副+1,子→0(V1.3.2→V1.4.0) |
|
||||
| **子** | bug/优化 | 子+1(V1.3.2→V1.3.3) |
|
||||
|
||||
### 取基线再递增
|
||||
|
||||
1. 拉取当前项目云效迭代列表。
|
||||
2. 从迭代**名称**解析 `V数字.数字.数字`;旧名 `V数字.数字` 视为 `.0`。
|
||||
3. 同名称前缀内取**最大**版本为基线(主→副→子比较);避免 PC 与小程序串号。
|
||||
4. 按用户点选类型递增,写入新迭代名称。
|
||||
5. 无一可解析版本:基线 `V0.0.0` 再递增(主→V1.0.0,副→V0.1.0,子→V0.0.1);或口令显式给起始版本。
|
||||
|
||||
禁止:手填与规则冲突的版本号却声称自动生成;禁止用交付标题推断版本类型。
|
||||
|
||||
## 创建与关联
|
||||
|
||||
| 步骤 | 动作 |
|
||||
|---|---|
|
||||
| 1 | 算出新版本 → 拼迭代全名 |
|
||||
| 2 | 创建迭代(起止日期口令未给则询问或用项目默认,禁止瞎填) |
|
||||
| 3 | **只挂【交付】**:N 个交付任务挂迭代;交付失败不得报完成 |
|
||||
| 4 | 幂等:同名迭代已存在 → 不新建,补挂尚未关联的交付,回报「复用迭代」 |
|
||||
| 5 | 回报:迭代名、版本号、identifier、已关联交付编号、失败编号 |
|
||||
|
||||
**禁止**把需求挂进迭代(需求侧「迭代」字段保持空)。不挂【分析】/【设计】除非口令显式点名。
|
||||
**不**在本步创建【开发】/【测试】。仍须 Plan 门禁。
|
||||
|
||||
### 挂接 API(已通 · 校验走 `/extra`)
|
||||
|
||||
```http
|
||||
PATCH /projex/api/workitem/workitem/{交付id}?_input_charset=utf-8
|
||||
{"workitemIdentifier":"{交付id}","propertyKey":"sprint","propertyValue":"{sprintId}","operateType":"COVER"}
|
||||
```
|
||||
|
||||
校验(详情主接口**不**含 sprint,勿用其判空):
|
||||
|
||||
```http
|
||||
GET /projex/api/workitem/workitem/{id}/extra?_input_charset=utf-8
|
||||
→ result.sprint[].identifier
|
||||
```
|
||||
|
||||
清空误挂的需求迭代:同上 PATCH,`propertyValue:""` + `operateType:"COVER"`(或 `CLEAR`)。
|
||||
63
.cursor/skills/YunxiaoPM/references/stage-flow.md
Normal file
63
.cursor/skills/YunxiaoPM/references/stage-flow.md
Normal file
@@ -0,0 +1,63 @@
|
||||
# 标准路径:待处理 → 待开发交棒
|
||||
|
||||
人员/状态等常量见 [../assets/runtime-ids.json](../assets/runtime-ids.json)。**项目空间**须按 [project-selection.md](project-selection.md) 点选,禁止默认直指。查重只用任务编号。
|
||||
|
||||
## 步骤 0|创建需求
|
||||
|
||||
| 云效动作 | 落地 |
|
||||
|---|---|
|
||||
| 新建产品类需求 | POST 建单;标题 `【新增】`/`【优化】` |
|
||||
| 需求描述 | **先** AutoRDO 清洗再写入 `## 原始诉求(AutoRDO)`;本步不写 AutoPRD |
|
||||
| 默认状态 | **待处理**;不建任务、不改负责人 |
|
||||
| 可选推进 | 口令点选目标状态;未选则停在待处理 |
|
||||
|
||||
## 步骤 1|受理 → 已确认
|
||||
|
||||
| 云效动作 | 落地 |
|
||||
|---|---|
|
||||
| 状态 | 待处理 → **已确认** |
|
||||
| 任务 | **仍不建**交付/分析/设计 |
|
||||
|
||||
若用户只「创建」未受理:只提示「受理后请推进至已确认」,不自动跳。
|
||||
|
||||
## 步骤 2|分析中
|
||||
|
||||
| 对象 | 动作 |
|
||||
|---|---|
|
||||
| 【交付】 | 无则新建;标题 `【交付】`+需求标题;**ASSOCIATED→需求**(勿用 PARENT);负责人=创建人/产品;**计划开始仅空时写当日**;不写计划完成;描述=`等待设计任务完成后自动填入`;更新编号区块 |
|
||||
| 【分析】 | 新建;**TASK_SUB→交付**(`parent`+`parentIdentifier`+`createWorkitemRelationInfo=TASK_SUB`);交付「子项」须可见;计划开始=当日(仅空时);负责人默认可=创建人;更新编号区块 |
|
||||
|
||||
| 需求 | 状态=`分析中` |
|
||||
|
||||
## 步骤 3|设计中
|
||||
|
||||
| 对象 | 动作 |
|
||||
|---|---|
|
||||
| 【交付】 | 已存在则按编号复用;没有则补建;**不改交付计划开始**;不写交付计划完成 |
|
||||
| 【设计】 | 新建;**TASK_SUB→交付**(同分析);计划开始=当日(仅空时);更新编号区块 |
|
||||
| 【分析】 | **计划完成**=状态更新日;推算阶段日历工时(见 work-hours) |
|
||||
| 需求 | 状态=`设计中` |
|
||||
|
||||
## 步骤 4|设计完成
|
||||
|
||||
| 对象 | 动作 |
|
||||
|---|---|
|
||||
| 【设计】 | 计划完成=当日;推算工时;任务→完成态 |
|
||||
| 需求 | AutoPRD 写入 `## 产品说明`;挂 ZIP+截图;状态=`设计完成` |
|
||||
| 【交付】 | 不换负责人;不改计划开始;不写计划完成;描述改为 AutoPRD 正文;同样挂附件 |
|
||||
|
||||
顺序与失败门禁见 [description-split.md](description-split.md)。
|
||||
|
||||
## 步骤 5|待开发交棒(本 Skill 终点 · 标准路径)
|
||||
|
||||
| 对象 | 动作 |
|
||||
|---|---|
|
||||
| 需求 | 状态=`待开发` |
|
||||
| 【交付】 | 按**任务编号**定位;**负责人→何斐**;不改计划开始;不写计划完成 |
|
||||
| 【分析】/【设计】 | 不新建;不改已有计划开始;前序未收口按步骤 3/4 处理 |
|
||||
|
||||
执行 [handoff-and-rollback.md](handoff-and-rollback.md) §交棒门禁。
|
||||
|
||||
**不做:** 【开发】/【测试】、仓库、分支、提测。
|
||||
|
||||
快轨 / 编号直推见专文。创建迭代见 [sprint.md](sprint.md)。
|
||||
73
.cursor/skills/YunxiaoPM/references/work-hours.md
Normal file
73
.cursor/skills/YunxiaoPM/references/work-hours.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# 计划时间与阶段日历工时
|
||||
|
||||
适用于【交付】/【分析】/【设计】统一口径。
|
||||
|
||||
## 用途
|
||||
|
||||
| 对象 | 计划开始→计划完成 |
|
||||
|---|---|
|
||||
| 【交付】 | 需求开工→上线全周期(本 Skill **不**写交付计划完成;上线由后续段) |
|
||||
| 【分析】 | 分析阶段时长 |
|
||||
| 【设计】 | 设计阶段时长 |
|
||||
|
||||
## 计划开始(不可篡改)
|
||||
|
||||
| 对象 | 首次写入 | 之后 |
|
||||
|---|---|---|
|
||||
| 【交付】 | 首次进入分析中且字段为空 → 当日 | **禁止覆盖** |
|
||||
| 【分析】 | 首次创建且为空 → 当日 | **禁止覆盖** |
|
||||
| 【设计】 | 首次创建且为空 → 当日 | **禁止覆盖** |
|
||||
|
||||
日期写入形态:中国时区正午 epoch ms 字符串,见 [../assets/runtime-ids.json](../assets/runtime-ids.json) `fields.plan_start`。
|
||||
|
||||
## 计划完成
|
||||
|
||||
| 环节 | 写计划完成的对象 |
|
||||
|---|---|
|
||||
| 推进到设计中 | 【分析】= 状态更新日 |
|
||||
| 推进到设计完成 | 【设计】= 状态更新日 |
|
||||
| 无单快轨建设计 | 【设计】= 当日(同轮收口) |
|
||||
| 编号直推收口 | 口令涉及的分析/设计若计划完成为空 → 当日 |
|
||||
| 上线/关闭 | 【交付】计划完成(**本 Skill 暂不写**) |
|
||||
|
||||
## 预计工时 = 阶段日历工时(Lead Time)
|
||||
|
||||
有计划完成且已有计划开始时,写入该对象云效「预计工时」:
|
||||
|
||||
```text
|
||||
workdays = 0
|
||||
从计划开始日到计划完成日(含首尾)逐日:
|
||||
周六或周日 → 跳过(除非该日是调休补班)
|
||||
法定放假日 → 跳过
|
||||
调休补班日(含周末上班)→ 计入
|
||||
其余周一~周五 → 计入
|
||||
预计工时(小时) = workdays × 8
|
||||
```
|
||||
|
||||
**禁止**用「(结束日 − 开始日 + 1)× 8」日历天数算法。
|
||||
|
||||
### 语义与脚注(强制)
|
||||
|
||||
- 正式名称:**阶段日历工时**,**不是**投入人天/排期负荷。
|
||||
- 任务描述末尾固定脚注:
|
||||
`【系统】预计工时=阶段日历工时(工作日×8),非人力投入预估`
|
||||
- 回报写「阶段日历工时 Hh」,**禁止**写「需投入 Hh」。
|
||||
- 本 Skill **不自动写**「人力投入预估」。
|
||||
|
||||
### 日历数据源
|
||||
|
||||
- 使用 [../assets/cn-workday-calendar.json](../assets/cn-workday-calendar.json)(按自然年;跨年须覆盖起止两侧年份)。
|
||||
- 缺当年日历 → **停下**提示补日历;**禁止**静默按「仅去周末」算完并报成功。
|
||||
- 计算脚本:[../scripts/workday_hours.py](../scripts/workday_hours.py)
|
||||
|
||||
```bash
|
||||
python3 scripts/workday_hours.py 2026-03-06 2026-03-09
|
||||
```
|
||||
|
||||
缺计划开始则只写结束、不推工时,回报提示。
|
||||
|
||||
## 示例
|
||||
|
||||
- 开始=周五、结束=下周一(无节假日)→ 五+一 → 16h
|
||||
- 区间全在法定放假内 → 0h
|
||||
- 某周日为调休补班且落在区间内 → 该日计入 8h
|
||||
22
.cursor/skills/YunxiaoPM/references/workitem-ids.md
Normal file
22
.cursor/skills/YunxiaoPM/references/workitem-ids.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# 工作项编号(系统)
|
||||
|
||||
## 权威源
|
||||
|
||||
需求描述固定区块(机器可解析;人工只读即可):
|
||||
|
||||
```markdown
|
||||
## 工作项编号(系统)
|
||||
- 交付:ONEOS-xx
|
||||
- 分析:ONEOS-yy(无则写无)
|
||||
- 设计:ONEOS-zz(无则写无)
|
||||
```
|
||||
|
||||
## 规则
|
||||
|
||||
1. **禁止**仅靠本地会话映射当唯一真相。
|
||||
2. 每次新建/登记交付·分析·设计编号后,**立即 PATCH 更新该区块**(只改本区块,不动 AutoRDO / AutoPRD 正文)。
|
||||
3. 操作顺序:口令显式编号 > 读本区块 > ASSOCIATED/SUB 反查校验。
|
||||
4. 三者冲突 → 停下人工;**仍禁止按标题猜**。
|
||||
5. 本地缓存仅加速,启动以云效该区块为准。
|
||||
6. 区块出现两个交付编号 → 停止并列号请人合并。
|
||||
7. 取消需求:关联任务标取消/废止;**不删**本区块(留痕)。
|
||||
Reference in New Issue
Block a user