@hupan56/wlkj 3.1.31 → 3.2.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 (70) hide show
  1. package/package.json +1 -1
  2. package/templates/qoder/agents/insight-planning.md +67 -67
  3. package/templates/qoder/agents/prd-reference.md +47 -47
  4. package/templates/qoder/commands/optional/wl-insight.md +276 -276
  5. package/templates/qoder/commands/optional/wl-spec.md +10 -2
  6. package/templates/qoder/commands/wl-code.md +63 -4
  7. package/templates/qoder/commands/wl-design.md +1 -1
  8. package/templates/qoder/commands/wl-prd.md +87 -13
  9. package/templates/qoder/commands/wl-req.md +10 -3
  10. package/templates/qoder/commands/wl-task.md +613 -613
  11. package/templates/qoder/commands/wl-test.md +2 -2
  12. package/templates/qoder/contracts/CHANGELOG.md +418 -0
  13. package/templates/qoder/contracts/README.md +180 -0
  14. package/templates/qoder/contracts/code.md +82 -0
  15. package/templates/qoder/contracts/commit.md +86 -0
  16. package/templates/qoder/contracts/contract-header.md +76 -0
  17. package/templates/qoder/contracts/design.md +106 -0
  18. package/templates/qoder/contracts/fallback.md +126 -0
  19. package/templates/qoder/contracts/isolation.md +119 -0
  20. package/templates/qoder/contracts/prd.md +118 -0
  21. package/templates/qoder/contracts/schemas/design-spec.schema.json +46 -0
  22. package/templates/qoder/contracts/schemas/prd.schema.json +36 -0
  23. package/templates/qoder/contracts/schemas/test-cases.schema.json +40 -0
  24. package/templates/qoder/contracts/spec.md +112 -0
  25. package/templates/qoder/contracts/task.md +125 -0
  26. package/templates/qoder/contracts/test.md +112 -0
  27. package/templates/qoder/hooks/post-tool-use.py +20 -0
  28. package/templates/qoder/hooks/stop-eval.py +47 -0
  29. package/templates/qoder/rules/wl-pipeline.md +37 -0
  30. package/templates/qoder/scripts/deployment/setup/install_qoderwork.py +11 -0
  31. package/templates/qoder/scripts/deployment/setup/setup.py +70 -0
  32. package/templates/qoder/scripts/deployment/setup/wlkj_shim.py +104 -0
  33. package/templates/qoder/scripts/domain/deployment/deploy_to_test.py +298 -0
  34. package/templates/qoder/scripts/domain/kg/build/kg_build.py +241 -22
  35. package/templates/qoder/scripts/domain/kg/build/kg_incremental.py +108 -3
  36. package/templates/qoder/scripts/domain/kg/build/kg_signatures.py +169 -0
  37. package/templates/qoder/scripts/domain/kg/extract/ts_extract.py +111 -0
  38. package/templates/qoder/scripts/domain/kg/storage/kg_duckdb.py +43 -0
  39. package/templates/qoder/scripts/domain/requirement/req.py +134 -28
  40. package/templates/qoder/scripts/domain/task/zentao_panel.py +688 -53
  41. package/templates/qoder/scripts/foundation/core/paths.py +102 -0
  42. package/templates/qoder/scripts/protocol/mcp/zentao_mcp_server.py +23 -10
  43. package/templates/qoder/scripts/validation/eval/qwork_harness.py +1 -1
  44. package/templates/qoder/scripts/validation/eval/report-commands.md +2 -2
  45. package/templates/qoder/settings.json +27 -9
  46. package/templates/qoder/skills/design-import/SKILL.md +3 -3
  47. package/templates/qoder/skills/design-review/SKILL.md +1 -1
  48. package/templates/qoder/skills/prd-generator/SKILL.md +4 -4
  49. package/templates/qoder/skills/prd-review/SKILL.md +1 -1
  50. package/templates/qoder/skills/prototype-generator/SKILL.md +3 -3
  51. package/templates/qoder/skills/spec-coder/SKILL.md +1 -1
  52. package/templates/qoder/skills/spec-generator/SKILL.md +80 -23
  53. package/templates/qoder/skills/test-generator/SKILL.md +1 -1
  54. package/templates/qoder/skills/wl-code/SKILL.md +13 -1
  55. package/templates/qoder/skills/wl-commit/SKILL.md +1 -1
  56. package/templates/qoder/skills/wl-design/SKILL.md +6 -6
  57. package/templates/qoder/skills/wl-init/SKILL.md +2 -2
  58. package/templates/qoder/skills/wl-insight/SKILL.md +5 -5
  59. package/templates/qoder/skills/wl-prd/SKILL.md +60 -0
  60. package/templates/qoder/skills/wl-report/SKILL.md +2 -2
  61. package/templates/qoder/skills/wl-search/SKILL.md +1 -1
  62. package/templates/qoder/skills/wl-spec/SKILL.md +2 -2
  63. package/templates/qoder/skills/wl-status/SKILL.md +2 -2
  64. package/templates/qoder/skills/wl-task/SKILL.md +3 -3
  65. package/templates/qoder/skills/wl-test/SKILL.md +2 -2
  66. package/templates/qoder/templates/spec-template.md +124 -0
  67. package/templates/root/AGENTS.md +32 -4
  68. package/templates/qoder/skills/wl-prd-full/SKILL.md +0 -121
  69. package/templates/qoder/skills/wl-prd-quick/SKILL.md +0 -50
  70. package/templates/qoder/skills/wl-prd-review/SKILL.md +0 -47
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: wl-prd
3
+ description: "需求: 完整(13章,新功能) / 快速(6章,小改动) / 评审(检查质量)。默认根据描述自动判断。先问平台!"
4
+ trigger: "用户显式打 /wl-prd; 或自然语言'写需求''写PRD''这个需求怎么做'。⚠️铁律: 只要用户打了/wl-prd,不管描述含'报错/无法/bug'(如'养护计划无法提交,时间报错'这种修复型小需求),都必须走本skill产出PRD,绝不跨命令跑去/wl-test"
5
+ ---
6
+
7
+
8
+ ## 🔧 仓库根定位(QoderWork 桌面端 vs Qoder IDE/CLI)
9
+
10
+ **后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
11
+ ```bash
12
+ R=$(python ~/.qoderwork/repo_root.py 2>/dev/null || python3 ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
13
+ PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
14
+ ```
15
+ > `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
16
+
17
+ # wl-prd — 需求工序站(/wl-prd 命令入口)
18
+
19
+ > 这是 `/wl-prd` 命令的 skill 入口(桥接 QoderWork 的 `/` 列表)。
20
+ > 完整工作流见同名 command 文件 `.qoder/commands/wl-prd.md`,
21
+ > 完整/快速模式实现见 `.qoder/skills/prd-generator/SKILL.md`,
22
+ > 评审模式实现见 `.qoder/skills/prd-review/SKILL.md`。
23
+ > **第一性原理:又快又准。**(快=并行+砍模式,准=语义归档+质量锁)
24
+ > **定位:专注"已确定需求"的落地。** 探索/调研/规划/对标已移交 `/wl-insight`。
25
+
26
+ ## ⚠️ STEP 0: 必须先问平台(任何分析前,绝不自动判断)
27
+
28
+ ```
29
+ 这个需求是针对哪个平台?
30
+ 1. Web 管理端 (fywl-ui) - Ant Design Vue + VxeGrid 风格
31
+ 2. APP 移动端 (Carmg-H5) - Vant 风格
32
+ 3. 两端都要
33
+ 请选择 (1/2/3):
34
+ ```
35
+ 问完就停。平台未定时任何分析都是违规。
36
+
37
+ ## 🚦 三模式路由(看第一个词或描述特征)
38
+
39
+ | 用户说 | 模式 | 走哪个 |
40
+ |--------|------|--------|
41
+ | "完整""深度""正经需求" 或 含"新模块/新业务/新流程" | **完整** | prd-full-template(13 章)+ EVA |
42
+ | "快速""小改动""加个""改下" 或 加字段/按钮/文案/导出 | **快速** | prd-quick-template(6 章),不走 EVA |
43
+ | "评审""检查""质量""合格吗" 或 给了 PRD 路径 | **评审** | 7 项 checklist + EVA 评分 |
44
+ | 判断不了 | **问一句**:完整需求(新功能)还是小改动(加字段/按钮)? |
45
+
46
+ > 默认:没说模式 + 像新功能 → 完整;像小改动 → 快速;给了文件 → 评审。
47
+
48
+ ---
49
+
50
+ ## 详细流程
51
+
52
+ 完整的三模式流程(取上下文 / 产出路径 / 原型要不要画 / 质量门禁 / 埋点)
53
+ **全部在 command 文件** `.qoder/commands/wl-prd.md`,本桥接不重复(避免臃肿/双源不同步)。
54
+
55
+ 调用时直接读 command 文件按所选模式执行即可。
56
+
57
+ ## 🔗 上游衔接
58
+
59
+ - 来自 `/wl-insight` 的调研结论:`/wl-prd 参考:<报告路径>`
60
+ - 衔接 `/wl-task`:PRD 发布后由 `/wl-task create` 落成任务
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-report
3
- description: "生成日报/周报,严格按当前开发者隔离。Generate daily/weekly work report, isolated by current developer. "
4
- trigger: "user invokes /wl-* command explicitly"
3
+ description: "日报/周报,按当前开发者隔离。默认日报(今天); 说'周报'出本周。数据源: 任务+禅道工时+提交+PRD+日历(可选增强)。"
4
+ trigger: "用户显式打 /wl-report; 或自然语言"写日报""周报""
5
5
  ---
6
6
 
7
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-search
3
3
  description: "查代码/业务/API/字段/PRD + 知识图谱(影响分析/覆盖矩阵/功能画像/业务流程/多跳遍历)的唯一入口。"
4
- trigger: "user invokes /wl-* command explicitly"
4
+ trigger: "用户显式打 /wl-search; 代码/业务/API搜索专用"
5
5
  ---
6
6
 
7
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-spec
3
- description: "从已确认 PRD 生成开发 Spec 文档(/wl-spec 命令入口)。Generate or review technical Spec from PRD + Design. "
4
- trigger: "user invokes /wl-* command explicitly"
3
+ description: "从已确认 PRD 生成开发 Spec(技术规格)。默认生成; review 评审现有 spec。/wl-code 按此 spec 实现。"
4
+ trigger: "用户显式打 /wl-spec; PRD→技术规格"
5
5
  ---
6
6
 
7
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-status
3
- description: "项目状态/路线图/健康度。Project status: current sprint / roadmap / health score. "
4
- trigger: "user invokes /wl-* command explicitly"
3
+ description: "项目状态看板。current(当前迭代进度,默认) / roadmap(路线图) / health(健康度,含工作流采纳分)。说哪个看哪个。"
4
+ trigger: "用户显式打 /wl-status; 或自然语言"项目状态""健康度""路线图""
5
5
  ---
6
6
 
7
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-task
3
- description: "任务管理 + RICE 优先级 + 依赖排期。7 站流水线的'任务'站,产品在这里把 PRD 落成任务。Task management with RICE prioritization. "
4
- trigger: "user invokes /wl-* command explicitly"
3
+ description: "任务管理 + 禅道同步。把 PRD 落成任务、看我的活、改状态、记工时(本地+禅道双写)。动作词: 建任务/我的任务/开始/完成/归档。自然语言问'我的Bug''看#301'直连禅道回答。"
4
+ trigger: "用户显式打 /wl-task; 或自然语言"建任务""我的任务""开始任务""完成任务"。注意:"我的Bug/看需求#301"等禅道查询直接答不走本skill"
5
5
  ---
6
6
 
7
7
 
@@ -222,7 +222,7 @@ cap.mcp.call("sync", {"direction": "push"})
222
222
  ## 输出规则
223
223
 
224
224
  - `list` 结果用表格呈现(优先级 | 状态 | 任务 | 负责人 | 标题 | 备注),当前任务标 `*`
225
- - `create` 后告诉用户任务目录路径 + 下一步建议("接 /wl-prd-full 写需求" 或 "/wl-code 写代码")
225
+ - `create` 后告诉用户任务目录路径 + 下一步建议("接 /wl-prd 写需求" 或 "/wl-code 写代码")
226
226
  - `finish` 后提示是否归档 + 看下个 `--ready` 的任务
227
227
  - 任何脚本非 0 退出 → 原样转述错误,不吞
228
228
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wl-test
3
- description: "测试工作流: 意图式用例 + Playwright MCP 执行 + 锚点缓存。触发: /wl-test 命令; 或自然语言里带'功能验证点'(如'测一下XX支不支持YY''验一下XX能不能ZZ''XX对不对')。纯随手看('打开XX页''看看登录')→不走本工作流。需确认(DANGEROUS)。"
4
- trigger: "user invokes /wl-* command explicitly"
3
+ description: "测试: quick(意图式用例,默认) / browser(Playwright浏览器) / unit(单元) / coverage(测试覆盖矩阵)。触发: /wl-test 命令; 或自然语言带'功能验证点'(如'测一下XX支不支持YY')。需确认(DANGEROUS)。"
4
+ trigger: "用户显式打 /wl-test; 或自然语言带功能验证点('测一下XX支不支持YY''验一下XX能不能ZZ')。⚠️边界: '写需求/写PRD'→/wl-prd; '报错/bug/无法提交'若是写需求场景→/wl-prd不归本skill; 纯排查bug不走任何wl工作流"
5
5
  ---
6
6
 
7
7
  # wl-test — 测试工作流(/wl-test 命令 或 带功能验证点的自然语言触发)
@@ -0,0 +1,124 @@
1
+ # REQ-{YYYY}-{NNN} {需求标题} - 开发规格
2
+
3
+ <!-- @contract spec v1
4
+ source-req: REQ-2025-0042
5
+ platform: web
6
+ module: policy
7
+ endpoints: [POST /api/policy/amend, GET /api/policy/amend/{id}]
8
+ status: draft
9
+ zentao: task=1453 story=761
10
+ -->
11
+
12
+ > ⚙️ **如何用本模板**:spec-generator 读本文件**逐章节填空**,不自由发挥结构。
13
+ > - 所有 **★强制** 章节必须填;不适用写"无"并附原因。
14
+ > - 生成时 `status: draft`;经 `/wl-code` 的 spec gate **用户确认**后改为 `status: confirmed` 才可写码。
15
+ > - **禅道对接**:`zentao:` 字段标识本 spec 对应的禅道 task(1 task ↔ 1 spec)。
16
+ > PRD 数据源 = task 关联的 story(经 `get_task → get_story_detail` 读,本地无 PRD 也能生成);
17
+ > 确认后 spec 摘要回填该 task 的 `desc`。
18
+ > - 模块契约(输入/输出/校验):`.qoder/contracts/spec.md`
19
+ > - 团队技术约定:Java MyBatis Plus + RESTful + `BigDecimal` 金额 + JSR-303 + `Result<T>`;
20
+ > 表名 `t_{module}_{entity}`;全栈 Entity→Mapper→Service→Controller;不写 PRD 未定义的功能。
21
+
22
+ ---
23
+
24
+ ## 0. 概述
25
+
26
+ - **禅道关联**:task #{task_id} ← story #{story_id}(PRD 真源 = 该 story 的 spec 字段)
27
+ - **需求来源**:REQ-{ID}(本地有 PRD 则链回;禅道 task 来的若无本地 PRD,标注"源=禅道 story #{story_id}")
28
+ - **本次改动一句话**:{用一句话说清本次交付什么——读 spec 的人 5 秒内能懂}
29
+ - **涉及端**:{web / app / both}
30
+ - **PRD 验收标准条数**:{N 条}(映射见第 6 章,必须逐条覆盖,不可漏)
31
+ - **改动范围**:{新增 / 修改 / 删除了哪些模块文件,一句话}
32
+
33
+ ---
34
+
35
+ ## 1. 接口定义
36
+
37
+ > 每个接口一行。RESTful + JSR-303 校验 + `Result<T>` 包装返回。
38
+ > 无后端接口(纯前端/纯数据)写:"无(本次纯 {前端组件/数据脚本})"。
39
+
40
+ | 方法 | 路径 | 说明 | 入参(关键字段) | 出参 | 错误码 |
41
+ |------|------|------|----------------|------|--------|
42
+ | POST | /api/{module}/{action} | {用途} | {field: Type} | Result<{DTO}> | 见第3章 |
43
+ | GET | /api/{module}/{id} | {用途} | {id: Long} | Result<{DTO}> | 见第3章 |
44
+
45
+ **入参校验(JSR-303)**:逐接口列出必填/格式约束。
46
+ - `POST /api/{module}/{action}`:`{name @NotBlank(max=64), amount @NotNull @DecimalMin("0.01")}`
47
+
48
+ ---
49
+
50
+ ## 2. 数据结构
51
+
52
+ > 表名 `t_{module}_{entity}`;金额字段**一律 BigDecimal**,禁用 double/float。
53
+ > 无 DB 改动写:"无(复用现有表,无 DDL)"。
54
+
55
+ ### t_{module}_{entity} {— 用途说明}
56
+
57
+ | 字段 | 类型 | 约束 | 说明 |
58
+ |------|------|------|------|
59
+ | id | BIGINT | PK, AUTO | 主键 |
60
+ | {field} | VARCHAR(64) | NOT NULL | {含义} |
61
+ | amount | DECIMAL(18,2) | NOT NULL | 金额,BigDecimal 映射 |
62
+
63
+ **全栈结构**:`Entity(t_xxx) → Mapper(XxxMapper) → Service(XxxService) → Controller(XxxController)`
64
+
65
+ ---
66
+
67
+ ## 3. 异常处理矩阵 ★强制
68
+
69
+ > **每个操作**枚举**所有**失败场景,不遗漏。这是写代码前必须想清楚的,不是写完补的。
70
+ > 必须覆盖这些维度:参数校验失败 / 业务规则违反 / 权限 / 并发重复 / 外部依赖失败 / 数据不存在 / 边界值(0/空/超长/超大)。
71
+ > 不适用写"无"并说明原因(例如纯展示页可写"无(仅查询,校验由前端处理)")。
72
+
73
+ | 操作 | 失败场景 | 错误码 | HTTP | 处理策略 |
74
+ |------|----------|--------|------|----------|
75
+ | {POST /api/x} | 参数缺失/格式错 | 40001 | 400 | JSR-303 拦截 → Result.fail(字段提示) |
76
+ | {POST /api/x} | 业务规则违反 | 40901 | 409 | Service 校验 → Result.fail(原因) |
77
+ | {POST /api/x} | 数据不存在 | 40404 | 404 | Result.fail("记录不存在") |
78
+ | {POST /api/x} | 权限不足 | 40301 | 403 | Result.fail("无权限") |
79
+ | {POST /api/x} | 重复提交/并发 | 40902 | 409 | 唯一索引拦截 → 提示已存在 |
80
+ | {POST /api/x} | 边界: amount=0/超大 | 42201 | 422 | 前置校验拦截 |
81
+ | {POST /api/x} | 外部依赖失败 | 50001 | 500 | 捕获 → 降级/重试 + 日志 |
82
+
83
+ ---
84
+
85
+ ## 4. AI 能力边界 ★强制
86
+
87
+ > 明确划分三类,防止 AI 越界或该确认的不确认。**禁止 AI 做的**绝不能放进 `/wl-code` 执行清单。
88
+
89
+ | 类别 | 范围 | 本次涉及项 |
90
+ |------|------|-----------|
91
+ | ✅ AI 可自动完成 | 标准 CRUD、模板代码、照 spec 填实现 | {例:Entity/Mapper/Service/Controller 全栈、Vue 表单页} |
92
+ | ⚠️ 必须人工确认 | 有业务风险或不可逆的决策 | {例:DDL 建表/改表、删除类操作、金额计算逻辑、对接第三方} |
93
+ | 🚫 禁止 AI 做 | 无授权或不该自动化的 | {例:直连生产库改数据、删生产数据、绕过权限校验、臆造 PRD 没有的字段/接口} |
94
+
95
+ ---
96
+
97
+ ## 5. 测试用例 ★强制
98
+
99
+ > **每条 PRD 验收标准** → 至少一个用例。必须详细可复现(输入/预期/断言齐全),验收标准不漏一条。
100
+
101
+ | 用例ID | 对应验收(见第6章) | 输入 | 预期 | 断言 |
102
+ |--------|-------------------|------|------|------|
103
+ | TC-001 | AC-1 | {合法完整入参} | 200 + Result.success | 状态码=200 且 data.id 非空 |
104
+ | TC-002 | AC-1 | {非法: 缺必填字段} | 400 + 40001 | 状态码=400 |
105
+ | TC-003 | AC-1 | {边界: amount=0} | 422 + 42201 | 状态码=422 |
106
+ | TC-004 | AC-2 | {...} | {...} | {...} |
107
+
108
+ ---
109
+
110
+ ## 6. PRD 验收标准映射表
111
+
112
+ > 每条 PRD acceptance 映射到本 spec 的接口/数据/异常/用例,**保证可追溯、不漏**。
113
+ > 这是 /wl-code 完工自检的依据:每条 AC 都有实现着落。
114
+
115
+ | PRD 验收标准 | 对应接口(§1) | 数据(§2) | 异常(§3) | 测试用例(§5) |
116
+ |--------------|--------------|----------|----------|--------------|
117
+ | AC-1 {验收点原文} | POST /api/x | t_xxx | 场景行 | TC-001~003 |
118
+ | AC-2 {验收点原文} | ... | ... | ... | ... |
119
+
120
+ ---
121
+
122
+ > 生成者:spec-generator(基于 `templates/spec-template.md`)
123
+ > 状态流转:`status: draft` → 用户确认 → `status: confirmed` → `/wl-code` 放行写码
124
+ > 禅道回填:confirmed 后,spec 摘要(接口清单/关键表/异常/AC 映射)+ 本地路径 → 回填禅道 task `desc`
@@ -15,6 +15,18 @@
15
15
 
16
16
  ---
17
17
 
18
+ ## ⚠️ CRITICAL RULE #0: COMMAND ROUTE IS FINAL (highest priority, overrides memory/preferences)
19
+
20
+ **When user explicitly types `/wl-X`, you MUST route to X. NEVER reroute.** This overrides any "user preference", "memory", "context hint", or your own assumption. The command name IS the final route; description content (even bug-sounding) does not change it.
21
+
22
+ - User types `/wl-prd` (even if the description sounds like a bug: "无法提交,时间报错") → **MUST run PRD** (this is writing a requirement for the fix). **NEVER** reroute to `/wl-test`, `/wl-code`, or debugging.
23
+ - User types `/wl-code` → run code. `/wl-test` → run tests. `/wl-task` → run task. (same for every command)
24
+ - If routing is genuinely unclear → **ask the user one question**, do NOT guess from "preferences" or "memory".
25
+
26
+ > 🚫 Failure case (forbidden, real): user typed `/wl-prd 快速,园林绿化养护计划无法提交,时间有问题报错`, AI rerouted to `/wl-test quick` based on a hallucinated "memory that user prefers wl-test for bugs". → VIOLATION. The command was `/wl-prd`; a bug-sounding description still goes to PRD. `wl-prd.md` lists this exact example as forbidden.
27
+
28
+ ---
29
+
18
30
  ## ⚠️ CRITICAL RULE #1: ALWAYS ASK PLATFORM FIRST
19
31
 
20
32
  **When user asks for PRD or prototype, you MUST ask this question FIRST:**
@@ -108,11 +120,11 @@ app/mobile/h5/移动端 -> Carmg-H5
108
120
  | Command | 工序站 | 模式参数(第一个词路由) | Auto | 背后 skill |
109
121
  |---------|--------|------------------------|------|-----------|
110
122
  | `/wl-init` | 身份 | (无) | YES | wl-init |
111
- | `/wl-prd` | 需求 | 语义路由: 完整档/小改动/评审 (原 wl-prd-full/quick/review 合并) | YES | prd-generator/prd-review |
112
- | `/wl-design` | 设计 | `import`/`generate`/`review` 或默认(import) | YES | design-import/prototype-generator/design-review |
113
- | `/wl-task` | 任务 | `create`/`list`/`start`/`finish` | YES | wl-task |
123
+ | `/wl-prd` | 需求 | 语义路由: 完整/快速/评审 (原 wl-prd-full/quick/review 已合并) | YES | prd-generator/prd-review |
124
+ | `/wl-design` | 设计 | `预览`/`扫描`/`评审` 或默认(预览) | YES | design-import/prototype-generator/design-review |
125
+ | `/wl-task` | 任务 | `create`/`list`/`show`/`start`/`finish`/`archive`/`rank`/`plan` | YES | wl-task |
114
126
  | `/wl-code` | 编码 | (无,按 spec 实现) | NO | spec-coder |
115
- | `/wl-test` | 测试 | `quick`/`browser`/`unit` 或默认(quick) | NO | wl-test / test-generator |
127
+ | `/wl-test` | 测试 | `quick`/`browser`/`unit`/`coverage` 或默认(quick) | NO | wl-test / test-generator |
116
128
  | `/wl-commit` | 提交 | (无) | NO | wl-commit |
117
129
 
118
130
  ### Optional Commands(长大了再开,非执行链路必经)
@@ -230,6 +242,22 @@ Each product loads rules from a different carrier — keep them in sync:
230
242
  code files + page examples + field specs + PRDs + APIs + style/icon pointers
231
243
  in ONE call. Use it FIRST; fall back to search_index.py for drill-down.
232
244
 
245
+ ## Thinking Discipline (思考链收敛 — 治"超长思考链")
246
+
247
+ **痛点:AI 取证了(读了代码)却没抓住矛盾,在假设上连续空转,15+ 步才定位 3 步能找到的根因。**
248
+ 本段**只约束排查/修码/取证类**推理;探索/规划/写 PRD 类(feature/workflow/coverage/context 撒网理解业务)不受约束,反而要多用 kg。
249
+
250
+ 1. **先取证再推理(铁律)**:每个推断立刻验证,**不许"假设A→假设B→假设C"连环空转**;一轮工具调用 = 一轮推理,不许"无工具调用的纯思考"超 1 轮。
251
+ 2. **取证优先用知识层**(比 grep 快 10 倍,与 Fast Path 一脉相承):
252
+ - 代码文件 → `context_pack`(**别** grep 全库)/ 字段类型 → `query_schema`·`field_map`(**别** Read 整个 Entity)/ 波及面 → `table_impact`(**别** 手动追踪)/ API → `code-api`(**别** grep Controller)
253
+ - kg 给了文件才 Read 那几个;kg 给了类型就不读全文。**kg 用得更准,不是闲置。**
254
+ 3. **排查/修码先对齐链路**(1-2 步对齐再动手;kg 一次对齐多环):
255
+ - 后端类型异常:`query_schema`(DB列) + `context_pack`(BO/Entity) → 找类型不一致点(String vs Date 最常见根因)
256
+ - 接口不通/400:`code-api`(路由/参数) + `table_impact`(影响面)
257
+ - 前端白屏/NaN:`context_pack`(组件/API) + `field_map`(字段映射)
258
+
259
+ > 正例:`query_schema`=Date + `context_pack` BO=String → 改BO(2步) | 反例:假设null→Invalid Date→时区→disabledDate→…(15步空转,养护计划实录)
260
+
233
261
  ## Icons: NEVER emoji
234
262
 
235
263
  Prototypes use the projects' real icon systems (data/index/icon-reference.json):
@@ -1,121 +0,0 @@
1
- ---
2
- name: wl-prd-full
3
- description: "完整档 PRD + 原型(13 章,正经需求)。新模块/新业务/新流程用这个。支持 参考:<insight报告> 衔接探索站。先问平台!"
4
- trigger: "user invokes /wl-* command explicitly"
5
- ---
6
-
7
-
8
- ## 🔧 仓库根定位(QoderWork 桌面端 vs Qoder IDE/CLI)
9
-
10
- **后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
11
- ```bash
12
- R=$(python ~/.qoderwork/repo_root.py 2>/dev/null || python3 ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
13
- PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
14
- ```
15
- > `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
16
-
17
- # wl-prd-full — 完整档 PRD + 原型(/wl-prd-full 命令入口)
18
-
19
- > 这是 `/wl-prd-full` 命令的 skill 入口。QoderWork 的 `/` 列表读 skills,
20
- > 所以本 skill 让 QoderWork 也能用 `/wl-prd-full`,与 Qoder IDE 保持一致。
21
- > 完整工作流见同名 command 文件 `.qoder/commands/wl-prd.md`,
22
- > 功能实现层见 `.qoder/skills/prd-generator/SKILL.md`。
23
- > **第一性原理:又快又准。**
24
-
25
- ## ⚠️ STEP 0: 必须先问平台(任何分析前)
26
-
27
- ```
28
- 这个需求是针对哪个平台?
29
- 1. Web 管理端 (fywl-ui) - Ant Design Vue + VxeGrid 风格
30
- 2. APP 移动端 (Carmg-H5) - Vant 风格
31
- 3. 两端都要
32
- 请选择 (1/2/3):
33
- ```
34
- **绝不自动判断。绝不假设。绝不跳过。永远先问。等用户回答。**
35
-
36
- | 回答 | 平台 | 搜索 flag | 原型模板 |
37
- |------|------|-----------|----------|
38
- | 1 / Web / PC / 管理端 | Web | `--platform web` | prototype-web.html |
39
- | 2 / APP / H5 / 移动端 | APP | `--platform app` | prototype-app.html |
40
- | 3 / 都要 / 两端 | Both | 都跑 | 两个模板,两份原型 |
41
-
42
- ## ⚠️ STEP 0.5: 原型要不要画?(融入 Step 2 批量确认,不另开轮次)
43
-
44
- **不交给 AI 默默判断**(避免"AI 觉得不需要、用户其实想要"的扯皮),但也**不额外开一轮问答**——
45
- 合并进 Step 2「轻反思 + 批量确认」那一步,跟背景/目标/指标一起一次性问完。
46
-
47
- ### 关键词触发矩阵(给默认建议,用户可一键改)
48
-
49
- | 模式 | 关键词信号 | 默认建议 | 例子 |
50
- |------|-----------|---------|------|
51
- | 评审 | (任何) | ❌ 不画 | 评审别人的 PRD,本就不画 |
52
- | 快速 | 加字段/按钮/文案/导出/接口 | ❌ 不画 | "列表加个导出按钮" |
53
- | 快速 | 含"页面/弹窗/表单/交互" | ✅ 画 | "弹窗里加 3 个字段" |
54
- | 完整 | 含"页面/菜单/详情/列表/向导/看板/大屏" | ✅ 画 | "新出库单页面" |
55
- | 完整 | 纯"规则/接口/定时/对账/计算/开关/参数/性能" | ❌ 不画 | "出交车点检固定为总部全局规则" |
56
- | 完整 | 混合(既有页面又有规则) | ✅ 画(只画页面那部分) | "新增审批流 + 审批页" |
57
-
58
- ### Step 2 问法(合并到批量确认)
59
-
60
- ```
61
- 确认 3 件事就开工:
62
- 1. 背景/目标:……(AI 已补,要改吗?)
63
- 2. 关键指标:……(AI 已补,要改吗?)
64
- 3. 原型图:我建议【画/不画】,因为……(理由)。
65
- 要改吗?(画 / 不画 / 两端各画一份)
66
- ```
67
-
68
- ### 两端都画时的边界(v3.1)
69
-
70
- 「完整模式 + 两端都要」如果用户选了"画",**默认只画主端一份**(用户在 PRD 里标的主端),
71
- 另一端在 PRD 第 11 章写"复用主端规则,UI 适配另出"。用户明确说"两端各画一份"才画 2 份。
72
-
73
- ### 不画原型时的下游连锁(必须对齐)
74
-
75
- | 产物 | 处理 |
76
- |------|------|
77
- | PRD 第 11 章「原型地址」 | 写 `无({原因},经用户确认豁免)`,**保留章节标题**不省略 |
78
- | PRD 第 1 行 `@contract` 头 | 标记 `prototype: none` |
79
- | eval_prd | 检测到 `prototype: none` → A2 自动跳过,满分从 100 降到 70,照样能 PASS |
80
- | /wl-design | 读到 `prototype: none` 跳过原型环节 |
81
- | /wl-code | 直接以 PRD 字段表为准 |
82
-
83
- ---
84
-
85
- ## 衔接 insight(参考模式)
86
-
87
- **若用户说"按 insight 报告做 PRD""转 PRD"或带 `参考:<报告路径>`:**
88
- Read 指定 insight 报告 → 把现状锚定 + 选中的机会/Gap 作为 PRD 现状背景输入 → 走完整档流程。
89
- > 衔接语义:`/wl-prd-full 参考:{报告路径}#{机会编号}`
90
-
91
- ## 完整流程(详细见 command 文件)
92
-
93
- 1. **并行取全上下文**:先读当前角色(`$PY "$R/.qoder/scripts/orchestration/wlkj.py" role` 输出 pm/design/dev/test/admin 之一),用 prefetch 一次取全(完整档需求含多业务实体,prefetch 多词预测比单词 context 更准):
94
- ```bash
95
- ROLE=$($PY "$R/.qoder/scripts/orchestration/wlkj.py" role 2>/dev/null || echo pm)
96
- $PY "$R/.qoder/scripts/orchestration/wlkj.py" kg prefetch "<需求描述原句>" --platform <p>
97
- ```
98
- > prefetch 把需求句拆成多个业务词批量搜、一次合并(例"考勤导入校验"→考勤/导入两词全搜)。
99
- > 拿到后**按 $ROLE 视角看重点**:dev 看代码段、design 看页面+风格段、pm 看字段+历史PRD段。prefetch 之后不要再串行 search。
100
- > 不硬编码 pm:dev 写 PRD 能拿到代码视角、设计师拿到页面+风格视角,比统一 PM 视角更"准"。
101
- 2. **轻反思 + 批量确认**:AI 自动补全背景/目标/指标,只把真缺失的 1-2 点一次性问完
102
- 3. **一次生成 + 3 道质量锁**:
103
- - PRD(prd-full-template.md,13 章)一次 Write
104
- - **原型按 Step 0.5 决策**:用户选"画"→ 走 prototype-generator(必须先 fill_prototype);
105
- 用户选"不画"→ 跳过,PRD 第 11 章写 `无` + contract 头标 `prototype: none`
106
- - 3 道质量锁:背景锁/字段锁/闭环锁 → eval_prd(**不要加 `2>/dev/null`,stderr 阻断原因要看**)→ 不过自动修
107
- - eval 命令:`$PY "$R/.qoder/scripts/orchestration/wlkj.py" eval <prd.md> [原型.html]`
108
- (wlkj.py eval 内部映射 validation/metrics/eval_prd.py,路径不会漂移)
109
- 4. **发布 + 归档 + 同步**(3 合 1):collect_prds → team_sync push → archive_prd
110
-
111
- ## 🔒 3 道质量锁
112
-
113
- - **锁① 背景锁**:背景回答了"为什么做+目标指标"
114
- - **锁② 字段锁**:字段来自真实代码(复用 eval_prd A1),无发明
115
- - **锁③ 闭环锁**:每个功能点有验收标准(Given-When-Then)
116
-
117
- ## REQ-ID 分配(并发安全)
118
-
119
- ```bash
120
- python -c "import sys; sys.path.insert(0,'.qoder/scripts'); from foundation.io.reqid import allocate_req_id; n=allocate_req_id(); print('REQ-%d-%03d' % (__import__('datetime').date.today().year, n))"
121
- ```
@@ -1,50 +0,0 @@
1
- ---
2
- name: wl-prd-quick
3
- description: "小改动极速出 Mini-PRD(6 章)。加字段/加按钮/改文案/加导出等零星需求专用。先问平台!"
4
- trigger: "user invokes /wl-* command explicitly"
5
- ---
6
-
7
-
8
- ## 🔧 仓库根定位(QoderWork 桌面端 vs Qoder IDE/CLI)
9
-
10
- **后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
11
- ```bash
12
- R=$(python ~/.qoderwork/repo_root.py 2>/dev/null || python3 ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
13
- PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
14
- ```
15
- > `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
16
-
17
- # wl-prd-quick — 小改动极速出 Mini-PRD(/wl-prd-quick 命令入口)
18
-
19
- > 这是 `/wl-prd-quick` 命令的 skill 入口。QoderWork 的 `/` 列表读 skills,
20
- > 所以本 skill 让 QoderWork 也能用 `/wl-prd-quick`,与 Qoder IDE 保持一致。
21
- > 完整工作流见同名 command 文件 `.qoder/commands/wl-prd.md`,
22
- > 功能实现层见 `.qoder/skills/prd-generator/SKILL.md`(快档分支)。
23
-
24
- ## ⚠️ STEP 0: 必须先问平台(任何分析前)
25
-
26
- ```
27
- 这个需求是针对哪个平台?
28
- 1. Web 管理端 (fywl-ui) - Ant Design Vue + VxeGrid 风格
29
- 2. APP 移动端 (Carmg-H5) - Vant 风格
30
- 3. 两端都要
31
- 请选择 (1/2/3):
32
- ```
33
- **绝不自动判断。问完就停。**
34
-
35
- ## 适用范围(只管小改动)
36
-
37
- ✅ 加/删/改字段、按钮、文案、导出、校验规则
38
- ❌ 新模块/新业务/新流程/多页面联动 → 走 `/wl-prd-full`
39
-
40
- ## 3 步极速流程(详细见 command 文件)
41
-
42
- 1. **先 prefetch(预测 + 批量预取,禁止串行 search)**:
43
- ```bash
44
- $PY "$R/.qoder/scripts/orchestration/wlkj.py" prefetch "<需求描述>" --platform <p>
45
- ```
46
- prefetch 一次返回代码/字段/API/Wiki/历史PRD 的合并结果。**之后不要再用 search/find/grep 逐个查词**——那会变成 6+ 次串行往返,是轮次爆炸的根因。prefetch 不够时才补调一次。
47
- 2. 一次 Write:Mini-PRD(prd-quick-template.md,6 章)+ 微型原型(只画 diff)
48
- 3. "出好了,确认发布吗?" → 归档 + push
49
-
50
- > mode 标记 `<!-- mode: quick -->`,跳过 EVA 完整检查。只跑字段锁。
@@ -1,47 +0,0 @@
1
- ---
2
- name: wl-prd-review
3
- description: "评审 PRD 完整性与质量(7 项 checklist + EVA 评分)。"
4
- trigger: "user invokes /wl-* command explicitly"
5
- ---
6
-
7
-
8
- ## 🔧 仓库根定位(QoderWork 桌面端 vs Qoder IDE/CLI)
9
-
10
- **后续脚本里的 `$R` 代表仓库根**,先确定它(QoderWork 桌面端工作目录不是仓库根,相对路径会失效):
11
- ```bash
12
- R=$(python ~/.qoderwork/repo_root.py 2>/dev/null || python3 ~/.qoderwork/repo_root.py 2>/dev/null) || R=.
13
- PY=$(python --version >/dev/null 2>&1 && echo python || echo python3)
14
- ```
15
- > `repo_root.py` 从 `~/.qoderwork/mcp.json` 反推仓库根;失败回退 `.`(IDE/CLI 工作目录即仓库根)。找不到时先跑 `$PY "$R/.qoder/scripts/orchestration/wlkj.py" install-qw`。
16
-
17
- # wl-prd-review — 评审 PRD 质量(/wl-prd-review 命令入口)
18
-
19
- > 这是 `/wl-prd-review` 命令的 skill 入口。
20
- > 完整工作流见同名 command 文件 `.qoder/commands/wl-prd.md`,
21
- > 评审实现细节见 `.qoder/skills/prd-review/SKILL.md`。
22
- > **定位:评审已有 PRD,不产出新 PRD。**
23
-
24
- ## 评审做什么
25
-
26
- 拿到一份 PRD,检查它够不够格发布/交付下游:
27
- 1. **7 项 checklist**:用户故事清晰 / 验收可测 / 优先级已标 / 模块已识别 / 非功能已列 / 边界已考虑 / 依赖已识别
28
- 2. **EVA 客观评分**:`$PY "$R/.qoder/scripts/orchestration/wlkj.py" eval <PRD> [原型]`,≥80% 才 PASS
29
- 3. **合并报告**:PASS → 可发布;不 PASS → 修复清单
30
-
31
- ## 定位要评审的 PRD
32
-
33
- 用户给路径 → 直接 Read;没给 → 扫 `data/docs/prd/` + `workspace/members/*/drafts/` 列出最近 PRD 让用户选。
34
-
35
- 详细流程见 `.qoder/commands/wl-prd.md`。
36
-
37
- ## ✅ 评审完成后必须埋点(不要跳过)
38
-
39
- 评审报告给出 PASS/不 PASS 结论后,**立即**记录一条 `review_done` 事件——
40
- 这是「可用性指标 F2 转化漏斗」评审级数据的唯一来源,不埋则该级永远为 0:
41
-
42
- ```bash
43
- $PY "$R/.qoder/scripts/orchestration/wlkj.py" learn record review_done "{\"prd\": \"<被评审PRD文件名>\", \"verdict\": \"PASS\"}"
44
- ```
45
- - `verdict`:评审结论,`PASS` 或 `FAIL`
46
- - 埋点失败不阻塞评审(包在 try 里无所谓),但能埋一定要埋。
47
-