@aibyzero/byz 0.1.1 → 0.1.2
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.
- package/CHANGELOG.md +10 -0
- package/README.md +13 -25
- package/dist/cli.js +3 -12
- package/dist/core/export-html/template.css +1066 -0
- package/dist/core/export-html/template.html +55 -0
- package/dist/core/export-html/template.js +1864 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +78 -0
- package/dist/modes/interactive/assets/clankolas.png +0 -0
- package/dist/modes/interactive/theme/dark.json +90 -0
- package/dist/modes/interactive/theme/light.json +89 -0
- package/dist/modes/interactive/theme/theme-schema.json +352 -0
- package/dist/runtime/bundle/chunks/{chunk-CCRJHU72.js → chunk-Q4KIHSRR.js} +1 -1
- package/dist/runtime/bundle/chunks/github-copilot.js +1 -1
- package/dist/runtime/bundle/cli.js +1 -1
- package/dist/runtime/bundle/index.js +1 -1
- package/dist/runtime/bundle/rpc-entry.js +1 -1
- package/dist/workflows.js +4 -131
- package/package.json +2 -1
- package/workflows/cm-plugin/LICENSE +21 -0
- package/workflows/cm-plugin/README.md +195 -0
- package/workflows/cm-plugin/VERSION +1 -0
- package/workflows/cm-plugin/agents/cm-plugin-backend-agent.md +34 -0
- package/workflows/cm-plugin/agents/cm-plugin-extension-agent.md +35 -0
- package/workflows/cm-plugin/agents/cm-plugin-ui-agent.md +34 -0
- package/workflows/cm-plugin/commands/cm-plugin-ai-nodes/N1-init.md +60 -0
- package/workflows/cm-plugin/commands/cm-plugin-ai-nodes/N2-enter-feature.md +51 -0
- package/workflows/cm-plugin/commands/cm-plugin-ai-nodes/N3-execute-task.md +32 -0
- package/workflows/cm-plugin/commands/cm-plugin-ai-nodes/N4-review.md +58 -0
- package/workflows/cm-plugin/commands/cm-plugin-ai-nodes/N5-mark-done.md +80 -0
- package/workflows/cm-plugin/commands/cm-plugin-ai-nodes/N6-qa-eval.md +69 -0
- package/workflows/cm-plugin/commands/cm-plugin-ai-nodes/N7-context.md +23 -0
- package/workflows/cm-plugin/commands/cm-plugin-ai-nodes/N8-finish.md +61 -0
- package/workflows/cm-plugin/commands/cm-plugin-prd-modes/brownfield.md +13 -0
- package/workflows/cm-plugin/commands/cm-plugin-prd-modes/change-mode.md +130 -0
- package/workflows/cm-plugin/commands/cm-plugin-prd-modes/greenfield.md +82 -0
- package/workflows/cm-plugin/commands/cm-plugin:ai.md +75 -0
- package/workflows/cm-plugin/commands/cm-plugin:check.md +66 -0
- package/workflows/cm-plugin/commands/cm-plugin:fix.md +100 -0
- package/workflows/cm-plugin/commands/cm-plugin:idea.md +29 -0
- package/workflows/cm-plugin/commands/cm-plugin:init.md +145 -0
- package/workflows/cm-plugin/commands/cm-plugin:prd.md +403 -0
- package/workflows/cm-plugin/commands/cm-plugin:refactor.md +147 -0
- package/workflows/cm-plugin/commands/cm-plugin:rewrite.md +90 -0
- package/workflows/cm-plugin/commands/cm-plugin:scout.md +202 -0
- package/workflows/cm-plugin/docs//346/265/213/350/257/225/346/214/207/345/274/225-/345/277/253/351/200/237/344/270/212/346/211/213.md +189 -0
- package/workflows/cm-plugin/docs//351/207/215/346/236/204/346/265/201/347/250/213/350/256/276/350/256/241/README.md +17 -0
- package/workflows/cm-plugin/docs//351/207/215/346/236/204/346/265/201/347/250/213/350/256/276/350/256/241/refactor-flow.excalidraw +3650 -0
- package/workflows/cm-plugin/docs//351/207/215/346/236/204/346/265/201/347/250/213/350/256/276/350/256/241/refactor-flow.mp4 +0 -0
- package/workflows/cm-plugin/docs//351/207/215/346/236/204/346/265/201/347/250/213/350/256/276/350/256/241/refactor-flow.png +0 -0
- package/workflows/cm-plugin/docs//351/207/215/346/236/204/346/265/201/347/250/213/350/256/276/350/256/241/refactor-flow.spec.json +223 -0
- package/workflows/cm-plugin/package.json +33 -0
- package/workflows/cm-plugin/skills/cm-plugin-backend-engineer/SKILL.md +100 -0
- package/workflows/cm-plugin/skills/cm-plugin-devops-engineer/NOTICE.md +14 -0
- package/workflows/cm-plugin/skills/cm-plugin-devops-engineer/SKILL.md +120 -0
- package/workflows/cm-plugin/skills/cm-plugin-devops-engineer/references/cws-ci-cd.md +139 -0
- package/workflows/cm-plugin/skills/cm-plugin-devops-engineer/references/cws-submission-checklist.md +87 -0
- package/workflows/cm-plugin/skills/cm-plugin-doc-syncer/SKILL.md +149 -0
- package/workflows/cm-plugin/skills/cm-plugin-extension-engineer/SKILL.md +105 -0
- package/workflows/cm-plugin/skills/cm-plugin-product-manager/SKILL.md +83 -0
- package/workflows/cm-plugin/skills/cm-plugin-qa-engineer/NOTICE.md +14 -0
- package/workflows/cm-plugin/skills/cm-plugin-qa-engineer/SKILL.md +134 -0
- package/workflows/cm-plugin/skills/cm-plugin-qa-engineer/references/cws-scan-checklist.md +136 -0
- package/workflows/cm-plugin/skills/cm-plugin-qa-engineer/references/cws-violation-codes.md +68 -0
- package/workflows/cm-plugin/skills/cm-plugin-ui-engineer/SKILL.md +94 -0
- package/workflows/cm-plugin/skills/codebase-context/SKILL.md +489 -0
- package/workflows/cm-plugin/skills/darwin-skill/NOTICE.md +24 -0
- package/workflows/cm-plugin/skills/darwin-skill/README.md +272 -0
- package/workflows/cm-plugin/skills/darwin-skill/SKILL.md +492 -0
- package/workflows/cm-plugin/skills/darwin-skill/references/runtime-neutrality.md +68 -0
- package/workflows/cm-plugin/skills/darwin-skill/references/skilllens-evidence.md +142 -0
- package/workflows/cm-plugin/skills/darwin-skill/scripts/screenshot.mjs +71 -0
- package/workflows/cm-plugin/skills/darwin-skill/templates/result-card-dark.html +698 -0
- package/workflows/cm-plugin/skills/darwin-skill/templates/result-card-white.html +444 -0
- package/workflows/cm-plugin/skills/darwin-skill/templates/result-card.html +616 -0
- package/workflows/cm-plugin/skills/idea-to-prd/SKILL.md +289 -0
- package/workflows/cm-plugin/skills/idea-to-prd/references/domains/trading.md +97 -0
- package/workflows/cm-plugin/skills/idea-to-prd/references/example-prd.md +92 -0
- package/workflows/cm-plugin/templates/arch-reference.md +55 -0
- package/workflows/cm-plugin/templates/auto-update/cm-announce.sh +19 -0
- package/workflows/cm-plugin/templates/auto-update/cm-update.sh +251 -0
- package/workflows/cm-plugin/templates/dashboard/dashboard.html +153 -0
- package/workflows/cm-plugin/templates/dashboard/serve.sh +10 -0
- package/workflows/cm-plugin/templates/e2e/extension-harness.ts +110 -0
- package/workflows/cm-plugin/templates/e2e/smoke.spec.example.ts +51 -0
- package/workflows/cm-plugin/templates/hooks/pre-commit-cm-task-check +33 -0
- package/workflows/cm-plugin/templates/pixel/cm-pixel.html +388 -0
- package/workflows/cm-plugin/templates/pixel/cm-pixel.sh +212 -0
- package/workflows/cm-plugin/templates/pixel/dev/README.md +20 -0
- package/workflows/cm-plugin/templates/pixel/dev/atlas-preview.png +0 -0
- package/workflows/cm-plugin/templates/pixel/dev/build.py +55 -0
- package/workflows/cm-plugin/templates/pixel/dev/sheets/roguelikeChar_transparent.png +0 -0
- package/workflows/cm-plugin/templates/pixel/dev/sheets/roguelikeCity_tilemap.png +0 -0
- package/workflows/cm-plugin/templates/pixel/dev/sheets/roguelikeIndoor_transparent.png +0 -0
- package/workflows/cm-plugin/templates/pixel/dev/template.html +388 -0
- package/workflows/cm-plugin/templates/pixel/serve.sh +12 -0
- package/workflows/cm-plugin/templates/refactor/cm-refactor-denies.json +14 -0
- package/workflows/cm-plugin/templates/rules/backend-api.md +36 -0
- package/workflows/cm-plugin/templates/rules/chrome-extension.md +53 -0
- package/workflows/cm-plugin/templates/rules/coding-style.md +44 -0
- package/workflows/cm-plugin/templates/rules/frontend.md +32 -0
- package/workflows/cm-plugin/templates/rules/git-workflow.md +25 -0
- package/workflows/cm-plugin/templates/rules/security.md +31 -0
- package/workflows/cm-plugin/templates/rules/testing.md +36 -0
- package/workflows/cm-plugin/templates/scripts/cm-plugin-codex.sh +52 -0
- package/workflows/cm-plugin/templates/scripts/cm-plugin-log.sh +41 -0
- package/workflows/cm-plugin/templates/scripts/cm-plugin-preflight.sh +60 -0
- package/workflows/cm-plugin/templates/statusline/cm-plugin-statusline.sh +73 -0
- package/workflows.lock.json +4 -3
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# /cm-plugin:idea — 点子 → PRD(流程上游入口,非 N1–N8 步骤)
|
|
2
|
+
|
|
3
|
+
**用法**:`/cm-plugin:idea 一句话点子`(如 `/cm-plugin:idea 我想做个自动整理浏览器标签页的插件`)
|
|
4
|
+
|
|
5
|
+
把模糊想法聊成成熟 PRD 的产品访谈搭档。**本命令只做一件事**:加载 `~/.claude/skills/idea-to-prd/SKILL.md` 并严格按其规则执行——本文件不复制不改写技能规则,技能文件是唯一事实源。
|
|
6
|
+
|
|
7
|
+
## 执行
|
|
8
|
+
|
|
9
|
+
1. 读取 `~/.claude/skills/idea-to-prd/SKILL.md`,未安装则提示重装最新包后中止
|
|
10
|
+
2. 把 `$ARGUMENTS` 作为用户点子,进入技能的访谈流程(判定产品类型 → 一次一题 → L1 骨架 → 按用户节奏加深;涉及交易/Web3 自动加载 `references/domains/trading.md` 领域包)
|
|
11
|
+
3. 全程遵守技能自身纪律(一次一题、防诱导选项、狠收敛、纯对话不联网)
|
|
12
|
+
|
|
13
|
+
## 与 cm 流程的衔接(只提示,不自动执行)
|
|
14
|
+
|
|
15
|
+
PRD 聊到用户满意收尾时,**追加一段提示**(这是本命令相对裸技能唯一的增量):
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
📄 PRD 已保存: {路径}(成熟度 {L1/L2/L3},「待明确的问题」剩 {N} 条(口径:只数 PRD 第 7 节的条目,正文散落的待补标记不计;路径用绝对路径)——带着未决问题交棒,prd 的产品角色会重新追问;想少被问就先在这里加深)
|
|
19
|
+
下一步(需要你手动执行,本命令不代跑):
|
|
20
|
+
1. 建 specs 文件夹,把这份 PRD 放进 docs/
|
|
21
|
+
2. /cm-plugin:prd {specs路径} ← 拆成规格三件套
|
|
22
|
+
3. 人审摘要卡后 /cm-plugin:ai 开始开发
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 边界
|
|
26
|
+
|
|
27
|
+
- 不写代码、不拆任务、不调 /cm-plugin:prd——想法阶段结束就交棒
|
|
28
|
+
- 已有现成需求文档的项目不需要本命令,直接 `/cm-plugin:prd`
|
|
29
|
+
- 触发词自然唤起("我有个点子…")与本命令等效,习惯哪个用哪个
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# /cm-plugin:init — 项目 .claude 初始化
|
|
2
|
+
|
|
3
|
+
你是一个项目配置初始化助手。你的任务是在当前项目目录中创建 `.claude/` 文件夹及其完整配置结构。
|
|
4
|
+
|
|
5
|
+
## 空目录检测(前置)
|
|
6
|
+
|
|
7
|
+
当前目录为空(无项目描述文件且无源码)→ **本命令不适用,不自行搭脚手架**。提示用户:
|
|
8
|
+
|
|
9
|
+
> "这是空目录——/cm-plugin:init 服务于已有项目。全新插件请走 0→1 分支:建 specs 文件夹放入需求文档后运行 `/cm-plugin:prd {specs路径}`,那里会基于需求推荐扩展脚手架(WXT / Plasmo / CRXJS 等),脚手架与规范生成都由 bootstrap 任务完成。"
|
|
10
|
+
|
|
11
|
+
## 执行步骤
|
|
12
|
+
|
|
13
|
+
### 1. 分析项目
|
|
14
|
+
|
|
15
|
+
在生成任何文件之前,先全面分析当前项目:
|
|
16
|
+
|
|
17
|
+
- 读取 `package.json`、`Cargo.toml`、`go.mod`、`pyproject.toml`、`pom.xml` 等项目描述文件,判断语言和框架
|
|
18
|
+
- 扫描目录结构(重点关注 `src/`、`app/`、`lib/`、`tests/`、`migrations/` 等)
|
|
19
|
+
- 读取现有的 README、CI 配置、lint 配置、tsconfig 等,提取构建/测试/运行命令
|
|
20
|
+
- **识别扩展形态**:定位 manifest(源文件或 wxt.config / plasmo 约定生成),记录 manifest 版本、脚手架(WXT / Plasmo / CRXJS / 原生)、已用的表面(service worker / content_scripts / popup / options / side_panel)与权限清单
|
|
21
|
+
- 识别项目是否附带配套后端 API、共享包等模块
|
|
22
|
+
- **检测版本控制状态**(结果写入 CLAUDE.md 的「版本控制」字段,全流程据此降级):
|
|
23
|
+
- 有 git 且有 remote → `remote`;有 git 无 remote → `local`(不询问,直接记录)
|
|
24
|
+
- **无 git → 询问用户一次**:"初始化本地 git?(推荐——每任务提交与审计链依赖它)/ 不使用版本控制"
|
|
25
|
+
- 用户拒绝 → 记 `none`:不生成 git-workflow.md、后续 N5 跳过提交、doc-syncer 用文件扫描、hook 不适用、审计链降级为 METRICS + tasks 勾选
|
|
26
|
+
|
|
27
|
+
### 1.5 代码库参考文档(自动判断,不询问)
|
|
28
|
+
|
|
29
|
+
**前置**:`~/.claude/skills/codebase-context/` 未安装 → 跳过本步并提示"codebase-context skill 未安装(旧版包),业务地图功能不可用,建议用最新包重装"——不阻塞 init 其余步骤。
|
|
30
|
+
|
|
31
|
+
按下列条件**自动决策**是否执行 `codebase-context` scan,不问用户,执行后在输出中汇报判断依据(形态判断优先于文件数):
|
|
32
|
+
|
|
33
|
+
- 项目**无任何项目描述文件**(package.json/Cargo.toml/go.mod/pyproject.toml/pom.xml 等)**且无 src/ 类源码结构**(如纯 prompt/文档资产库、纯配置仓库)→ **跳过**——scan 的七轮抓取目标(api/types/components/store)在此类形态下均不存在,产出多为空章节(v0.9.24 实跑教训:60 个 md 的 prompt 仓库按文件数会误判全量扫)
|
|
34
|
+
- 源码文件 > 30 个 且 `{项目根}/docs/codebase-context/` **不存在** → 自动执行**全量 scan**(存量项目首扫,生成业务地图)
|
|
35
|
+
- 参考文档目录**已存在** → 自动执行**增量 scan**(顺手保鲜,成本极低)
|
|
36
|
+
- 源码文件 ≤ 30 个 且 无参考文档 → **跳过**(小项目直接读代码更快,建地图不划算)
|
|
37
|
+
|
|
38
|
+
输出格式(四选一):`📚 业务地图: 已全量生成(源码{N}个) / 已增量刷新(变更{N}个) / 跳过(小项目,源码仅{N}个) / 跳过(形态不适用,无项目描述文件)`
|
|
39
|
+
|
|
40
|
+
**判定结果落盘**:把同一行写入**代码项目根**(即 scan 的 PROJECT_ROOT,多层仓库下不是仓库根)的 CLAUDE.md「业务地图」字段;该处无 CLAUDE.md → 写入地图 `00-index.md` 头部并在输出中说明落点——/cm-plugin:prd 据此直接行动,不重复判断、不重复建议(实测教训:25 文件的临界项目,init 说跳过、prd 又建议 scan,两处判断打架)。
|
|
41
|
+
|
|
42
|
+
### 2. 生成文件结构
|
|
43
|
+
|
|
44
|
+
根据分析结果,生成以下结构(只创建与项目相关的文件):
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
.claude/
|
|
48
|
+
├── CLAUDE.md # 项目门面,≤150 行
|
|
49
|
+
├── rules/
|
|
50
|
+
│ ├── coding-style.md # 命名/缩进/import/注释规范
|
|
51
|
+
│ ├── testing.md # 测试约定、覆盖率要求
|
|
52
|
+
│ ├── security.md # 禁止事项、密钥处理
|
|
53
|
+
│ ├── git-workflow.md # 分支/commit/PR 规范
|
|
54
|
+
│ ├── chrome-extension.md # 扩展铁律:权限最小化/MV3 约束/禁远程代码(插件项目必建)
|
|
55
|
+
│ ├── frontend.md # (如有 UI 表面) popup/options/side panel 的组件规范
|
|
56
|
+
│ └── backend-api.md # (如有配套后端) paths: server/**, api/**
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 3. CLAUDE.md 模板
|
|
60
|
+
|
|
61
|
+
CLAUDE.md 必须包含以下部分,控制在 150 行以内:
|
|
62
|
+
|
|
63
|
+
```markdown
|
|
64
|
+
# {项目名}
|
|
65
|
+
|
|
66
|
+
{一句话简介}
|
|
67
|
+
|
|
68
|
+
## 技术栈
|
|
69
|
+
|
|
70
|
+
- 语言: {lang}
|
|
71
|
+
- 框架: {framework}
|
|
72
|
+
- 包管理: {pkg manager}
|
|
73
|
+
- 版本控制: {remote | local | none} # /cm-plugin:ai 各节点据此执行或降级 git 操作,不再重复询问
|
|
74
|
+
- 交付形态: Chrome 扩展 (MV3) · {表面组合,如 side panel+content script} · {目标浏览器} # 架构第一分叉,涉表面/浏览器的需求变更必须过人工确认
|
|
75
|
+
- 扩展脚手架: {WXT | Plasmo | CRXJS+Vite | 原生}
|
|
76
|
+
- 业务地图: {已全量生成 {日期} | 跳过(小项目,{N}文件) | 未初始化} # codebase-context 判定结果,/cm-plugin:prd 据此行动不再重复询问
|
|
77
|
+
|
|
78
|
+
## 常用命令
|
|
79
|
+
|
|
80
|
+
- 安装依赖: `{install cmd}`
|
|
81
|
+
- 开发运行: `{dev cmd}`
|
|
82
|
+
- 构建: `{build cmd}`
|
|
83
|
+
- 测试: `{test cmd}`
|
|
84
|
+
- Lint: `{lint cmd}`
|
|
85
|
+
|
|
86
|
+
## 目录结构
|
|
87
|
+
|
|
88
|
+
{树形结构速览,只列关键目录,不超过 20 行}
|
|
89
|
+
|
|
90
|
+
## 规则
|
|
91
|
+
|
|
92
|
+
@rules/coding-style.md
|
|
93
|
+
@rules/testing.md
|
|
94
|
+
@rules/security.md
|
|
95
|
+
@rules/git-workflow.md
|
|
96
|
+
@rules/chrome-extension.md
|
|
97
|
+
{以下按需引入}
|
|
98
|
+
@rules/frontend.md
|
|
99
|
+
@rules/backend-api.md
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 3.5 生成即核验(机械,写入前执行)
|
|
103
|
+
|
|
104
|
+
生成的 CLAUDE.md 与 rules 中**所有可执行断言逐条实证**,核验不过的条目不许静默写入(修正或显式标注「未验证」):
|
|
105
|
+
|
|
106
|
+
- 命令类(install/dev/test/lint/build):验证脚本真实存在(读 manifest scripts / Makefile),可安全 dry 的实跑一次
|
|
107
|
+
- globs 类:实测匹配非空——匹配零文件的 glob 是死规则
|
|
108
|
+
- 文件引用类(@rules/xxx、路径):存在性检查
|
|
109
|
+
|
|
110
|
+
> 依据:实跑事故——init 生成的 testing.md 写了 Node 24 下已失效的 `node --test tests/`,带病上岗直到任务踩上去才发现。能机械验的绝不靠嘴(凭证卡点同款基因)。
|
|
111
|
+
|
|
112
|
+
### 4. rules 文件格式
|
|
113
|
+
|
|
114
|
+
每个 rules 文件使用以下格式:
|
|
115
|
+
|
|
116
|
+
```markdown
|
|
117
|
+
---
|
|
118
|
+
description: { 规则一句话描述 }
|
|
119
|
+
globs: { 可选,如 "src/web/**" }
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
# {规则标题}
|
|
123
|
+
|
|
124
|
+
{具体规则内容,从项目实际配置中推断,简洁明了}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 5. 规则内容指引
|
|
128
|
+
|
|
129
|
+
**生成方式**:每个 rules 文件优先以 `~/.claude/templates/cm-plugin-rules/{名称}.md` 的模板骨架为基础——遵守模板头部的四原则(可执行 / Bad-Good 对比 / 量化 / 现代实践),将所有 `{占位符}` 替换为从项目实际推断的内容,删除不适用章节。模板不存在时按下方各条目描述自行生成(老安装降级路径)。
|
|
130
|
+
|
|
131
|
+
- **coding-style.md**: 从 eslint/prettier/editorconfig/rustfmt 等配置推断命名风格、缩进、import 排序、注释规范。如无配置则根据语言社区惯例设定。
|
|
132
|
+
- **testing.md**: 从测试框架配置和现有测试推断测试规范、文件命名、覆盖率要求。
|
|
133
|
+
- **security.md**: 列出禁止硬编码密钥、环境变量处理、敏感文件 .gitignore 规则等。
|
|
134
|
+
- **git-workflow.md**: 从 git 历史推断 commit 风格(conventional commits?),分支命名规范,PR 流程。**按版本控制字段裁剪**:`none` → 不生成本文件;`local` → 裁掉 PR/远程/保护分支章节,只留 commit 规范。
|
|
135
|
+
- **chrome-extension.md**: 扩展开发铁律——权限最小化与申请理由留档、MV3 约束(service worker 无 DOM 且会休眠、禁 eval/远程代码)、上下文间消息契约集中管理、manifest 变更单独提交(插件项目必建,以模板为骨架 + 项目实际权限清单填充)。
|
|
136
|
+
- **frontend.md**: popup/options/side panel 的组件规范、状态管理、样式约定;content script UI 的宿主页样式隔离(shadow DOM / CSS 前缀)(仅当项目有 UI 表面时创建)。
|
|
137
|
+
- **backend-api.md**: API 设计规范、错误处理、中间件约定、扩展侧调用的 CORS 与鉴权约定等(仅当项目有配套后端时创建)。
|
|
138
|
+
|
|
139
|
+
## 重要约束
|
|
140
|
+
|
|
141
|
+
- 如果 `.claude/` 已存在,先告知用户并询问是否覆盖
|
|
142
|
+
- 所有规则内容必须基于项目实际情况推断,不要生成空洞的通用规则
|
|
143
|
+
- CLAUDE.md 严格控制在 150 行以内
|
|
144
|
+
- 只创建与项目实际相关的 rules 文件,不要创建不适用的文件
|
|
145
|
+
- 生成完成后,列出所有创建的文件并给出简要说明
|
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
# /cm-plugin:prd — 需求文档 → 开发规格生成
|
|
2
|
+
|
|
3
|
+
支持两种模式:新建需求和需求变更。
|
|
4
|
+
|
|
5
|
+
## 输入参数
|
|
6
|
+
|
|
7
|
+
`$ARGUMENTS` 格式:
|
|
8
|
+
|
|
9
|
+
- **新建模式**:`/cm-plugin:prd {项目文件夹路径}`
|
|
10
|
+
- **变更模式**:`/cm-plugin:prd --change {N}.{feature-name} 变更内容描述`
|
|
11
|
+
|
|
12
|
+
用户提供一个项目文件夹路径,文件夹结构约定:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
{项目文件夹}/
|
|
16
|
+
├── docs/ ← 需求文档(必须存在,PRD 从这里读取)
|
|
17
|
+
├── 1.xxx/ ← 已有的 specs(如有)
|
|
18
|
+
├── 2.xxx/ ← 本次生成的 specs
|
|
19
|
+
└── ...
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 模式判断
|
|
23
|
+
|
|
24
|
+
如果 `$ARGUMENTS` 以 `--change` 开头 → **读取 `~/.claude/commands/cm-plugin-prd-modes/change-mode.md`** 执行变更模式(C1–C8)
|
|
25
|
+
否则 → 进入新建模式
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 新建模式
|
|
30
|
+
|
|
31
|
+
### Step 1: 解析输入,读取需求文档
|
|
32
|
+
|
|
33
|
+
从 `$ARGUMENTS` 提取项目文件夹路径,记为 `SPECS_DIR`。
|
|
34
|
+
|
|
35
|
+
读取 `{SPECS_DIR}/docs/` 下的所有文件作为需求源:
|
|
36
|
+
|
|
37
|
+
- 支持 `.md`、`.txt`、`.pdf`、`.html` 等文档格式
|
|
38
|
+
- **HTML 交互原型(可点击 PRD)→ 执行交互遍历协议,禁止只做静态截图**。可交互原型是一份可执行的需求文档,必须用无头浏览器(Playwright / Chrome DevTools)**主动遍历**:
|
|
39
|
+
|
|
40
|
+
1. **枚举**每个页面的全部可交互元素(按钮/链接/tab/表单/开关/列表项…)
|
|
41
|
+
2. **逐个操作**并记录三元组:`元素 → 动作 → 结果`(跳转到哪/弹了什么/状态怎么变/无响应)
|
|
42
|
+
3. 产出**功能点清单**:每个有响应的交互 → 对应一条 [F-xxx];**点了没反应的 → 列为"原型死区"进开放问题**(问用户:是原型没做完,还是本就不需要?不许静默丢弃)
|
|
43
|
+
4. **覆盖率自检**:可交互元素总数 = 功能需求数 + 死区数,对不上不得进入 Step 6
|
|
44
|
+
5. 遍历过程中逐状态截图(Step 8.5 的候选基准);三元组记录直接生成**交互流 AC 与 E2E 走查清单**
|
|
45
|
+
|
|
46
|
+
原型首先是需求,其次才是视觉候选。注意原型通病:只画理想态——异常态/空态/边界值靠 Step 5.5 歧义五问补齐
|
|
47
|
+
- 如果 docs/ 下有多个文件,全部读取并综合分析
|
|
48
|
+
- 如果 docs/ 不存在或为空,报错提示用户先在 docs/ 下放入需求文档
|
|
49
|
+
|
|
50
|
+
### Step 2: 获取项目名称
|
|
51
|
+
|
|
52
|
+
- 从当前目录的 `package.json` name 字段、`Cargo.toml`、`go.mod` 等提取项目名
|
|
53
|
+
- 如无法提取,使用当前目录名
|
|
54
|
+
- 转为 kebab-case,记为 `PROJECT_NAME`
|
|
55
|
+
|
|
56
|
+
### Step 3: 探测项目架构类型
|
|
57
|
+
|
|
58
|
+
**代码项目根的确定(防在错误目录生成脏规格)**:`$ARGUMENTS` 中显式给了代码项目路径(如 `代码在~/code/app`)→ 以其为准;未给 → 用当前工作目录(约定:在代码项目内运行本命令),但**必须先自检**——当前目录含项目描述文件或源码、且其内容与需求文档所述业务相符;明显不符(如当前目录是另一个项目/工具仓库)→ **停下询问代码项目路径**,不得静默把错误目录当项目上下文(空目录检测只兜全空 case,兜不住"错但有效"的目录)。
|
|
59
|
+
|
|
60
|
+
扫描项目根目录、配置文件、目录结构、依赖声明,自行判断架构类型(纯扩展单仓 / 扩展+后端 monorepo / 多仓库等)。记录 `ARCH_TYPE`。
|
|
61
|
+
|
|
62
|
+
**空项目检测**:代码项目不存在、或为空目录(无 package.json / Cargo.toml / go.mod 等项目描述文件,且无源码目录)→ **先问用户确认空目录的含义,不得自行假设**:
|
|
63
|
+
|
|
64
|
+
> "代码目录为空——这是【全新项目】(走 0→1 分支,我来推荐架构和脚手架),还是【存量项目还没 clone】(请先 clone 到该目录,再重新运行 /cm-plugin:prd)?"
|
|
65
|
+
|
|
66
|
+
- 确认全新项目 → 标记 `GREENFIELD=true`,**读取 `~/.claude/commands/cm-plugin-prd-modes/greenfield.md`** 叠加 G1–G4 规则,Step 4 跳过
|
|
67
|
+
- 确认未 clone → **中止本次执行**,提示 clone 完成后重跑(在不存在的项目上下文上生成 design.md 是有毒规格)
|
|
68
|
+
|
|
69
|
+
### Step 4: 读取项目上下文(存量项目 = 二开模式,叠加 B 规则)
|
|
70
|
+
|
|
71
|
+
- 读取各仓库的 `.claude/CLAUDE.md` 了解技术栈
|
|
72
|
+
- 读取 `.claude/rules/` 下所有规则文件
|
|
73
|
+
- 扫描目录结构,了解现有模块划分
|
|
74
|
+
- **B1 加载代码库参考文档**:**先读代码项目根 CLAUDE.md 的「业务地图」字段**(多层仓库下以代码项目根为准,仓库根 CLAUDE.md 无此字段再看地图 00-index 头部;init 已判定过,不重复判断):字段=已生成/已刷新 或 `docs/codebase-context/` 存在 → 按 `codebase-context` skill dev 模式加载 10 份文档(后续步骤查重与波及面分析的数据源);字段=跳过(小项目) → **不建议 scan,直接读代码**(小项目全量读的成本本来就低);字段缺失且文档不存在 → 建议先执行 `/codebase-context scan`;**skill 本身未安装** → 提示重装最新包,本次降级为直接读代码,波及面分析降级为 grep 推断(照常可跑,只是更贵更粗)
|
|
75
|
+
|
|
76
|
+
**二开模式追加规则**(GREENFIELD=false 且本次需求会修改存量代码时生效)→ **读取 `~/.claude/commands/cm-plugin-prd-modes/brownfield.md`** 执行 B2 波及面 / B3 防护网基线 / B4 增量 specs / B5 拆分锚定地图。
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
### Step 5: 分析需求
|
|
80
|
+
|
|
81
|
+
**调用 `cm-plugin-product-manager` skill 执行本步和 Step 5.5**——用户故事、编号功能需求、验收标准的编写方法和歧义五问以该 skill 为准。
|
|
82
|
+
|
|
83
|
+
需求涉及**新增权限 / 收集用户数据 / 注入第三方网站 / 加载远程内容**时,在本步同时做**商店合规预扫**(检查方法以 `cm-plugin-qa-engineer` skill 的商店合规检查单为准):每项权限给出用途理由、标记单一用途政策风险点、列出需要隐私政策披露的数据项——发现的问题作为合规开放问题并入 Step 5.5 一并确认,确认结果写入 requirements.md 非功能需求节与 design.md 安全考虑节。**权限问题在规格期确认的成本是一句话,上架被拒后的成本是整轮返工。**
|
|
84
|
+
|
|
85
|
+
从文档中提取功能目标、用户故事、验收标准、约束条件、依赖。
|
|
86
|
+
|
|
87
|
+
### Step 5.5: 开放问题确认
|
|
88
|
+
|
|
89
|
+
分析需求后,如果存在以下情况,**必须暂停并与用户对话确认**,不要自行假设:
|
|
90
|
+
|
|
91
|
+
- 需求描述模糊或有歧义的功能点
|
|
92
|
+
- 多种技术实现方案且差异较大
|
|
93
|
+
- 缺少关键信息(如目标平台、兼容性要求、第三方服务选型)
|
|
94
|
+
- 业务逻辑有矛盾或不完整
|
|
95
|
+
- 涉及权限、支付、敏感操作等需要明确确认的功能
|
|
96
|
+
|
|
97
|
+
格式:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
❓ 需要确认以下问题:
|
|
101
|
+
|
|
102
|
+
1. {问题描述} — {为什么需要确认}
|
|
103
|
+
2. {问题描述} — {为什么需要确认}
|
|
104
|
+
|
|
105
|
+
请逐一回复后继续生成 specs
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
所有问题确认完毕后再进入 Step 6。
|
|
109
|
+
|
|
110
|
+
### Step 6: 推断 feature 名称
|
|
111
|
+
|
|
112
|
+
根据需求内容生成一个简洁的 kebab-case 英文名称。
|
|
113
|
+
|
|
114
|
+
### Step 7: 生成 specs 目录
|
|
115
|
+
|
|
116
|
+
检查 `{SPECS_DIR}/` 下已有的编号目录(如 `1.xxx/`、`2.xxx/`),取最大编号 +1。
|
|
117
|
+
|
|
118
|
+
```text
|
|
119
|
+
{SPECS_DIR}/
|
|
120
|
+
├── docs/ ← 需求文档(输入)
|
|
121
|
+
├── 1.比如这是一个已有的标题/ ← 已有 specs
|
|
122
|
+
└── 2.{feature-name}/ ← 本次新建
|
|
123
|
+
├── requirements.md
|
|
124
|
+
├── design.md
|
|
125
|
+
└── tasks.md
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Step 8: 生成 requirements.md
|
|
129
|
+
|
|
130
|
+
```markdown
|
|
131
|
+
# {Feature 名称} — 需求规格
|
|
132
|
+
|
|
133
|
+
## 概述
|
|
134
|
+
|
|
135
|
+
{一句话描述}
|
|
136
|
+
|
|
137
|
+
## 项目信息
|
|
138
|
+
|
|
139
|
+
- 项目名: {PROJECT_NAME}
|
|
140
|
+
- 架构类型: {ARCH_TYPE}
|
|
141
|
+
|
|
142
|
+
## 需求版本
|
|
143
|
+
|
|
144
|
+
| 日期 | 版本 | 说明 |
|
|
145
|
+
| ------------ | ---- | -------- |
|
|
146
|
+
| {YYYY-MM-DD} | v1 | 初始需求 |
|
|
147
|
+
|
|
148
|
+
## 用户故事
|
|
149
|
+
|
|
150
|
+
- 作为 {角色},我想要 {功能},以便 {价值}
|
|
151
|
+
|
|
152
|
+
## 功能需求
|
|
153
|
+
|
|
154
|
+
1. [F-001] {需求描述}
|
|
155
|
+
2. [F-002] {需求描述}
|
|
156
|
+
|
|
157
|
+
## 非功能需求
|
|
158
|
+
|
|
159
|
+
- 性能: {要求}
|
|
160
|
+
- 安全: {要求}
|
|
161
|
+
- 兼容性: {要求}
|
|
162
|
+
|
|
163
|
+
## 验收标准
|
|
164
|
+
|
|
165
|
+
- [ ] [AC-001] {标准描述}
|
|
166
|
+
|
|
167
|
+
## 依赖
|
|
168
|
+
|
|
169
|
+
- {外部服务/库}
|
|
170
|
+
|
|
171
|
+
## 开放问题
|
|
172
|
+
|
|
173
|
+
- {待确认事项}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Step 8.5: UI 设计基准(涉及 UI 的 feature)
|
|
177
|
+
|
|
178
|
+
feature 涉及页面/界面时,在生成 design.md 前确定设计基准:
|
|
179
|
+
|
|
180
|
+
- **有 Figma/设计稿** → 通过 MCP 导出截图 + token 提取物,落盘 `{SPECS_DIR}/{N}.{feature-name}/design-baseline/`(防链接失效与云端改版导致基准漂移)
|
|
181
|
+
- **有 Stitch 项目** → 通过 Stitch MCP 拉取设计并导出 HTML/CSS 落盘 design-baseline/;导出的 HTML **按 Step 1 交互遍历协议处理**(多屏/流转设计可直接提取交互流与功能点)——Stitch 导出物默认按像素基准对待(它就是设计本体,不是示意)
|
|
182
|
+
- **有 HTML 交互原型**(Step 1 已截图)→ **必须人工三选一确认基准档位**(中性提问不带引导;高保真原型建议像素档,线框灰稿建议结构档):
|
|
183
|
+
- **① 像素基准**:UI 与交互 **1:1 还原**——截图落盘 design-baseline/ 作 BackstopJS 基准(≤1%),且**交互流提取为 E2E 走查清单**(每个跳转/状态切换/反馈逐条断言,交互不 1:1 视为验收失败)
|
|
184
|
+
- **② 结构基准**(多数原型的合理档):页面结构、信息层级、**交互流程必须一致**,视觉样式可再设计——验收为逐页元素清单核对 + 流程走查
|
|
185
|
+
- **③ 纯参考**:仅辅助理解需求,无对照验收——选此档即明确接受 UI 由 AI 自行发挥(历史事故:原型被降为参考后,产出与原型完全不符)
|
|
186
|
+
档位写入 design.md「设计基准」节;**无论哪档,原型的页面清单与跳转流程都已是需求的一部分(Step 1 规则),流程不允许自由发挥**
|
|
187
|
+
- **无设计稿且环境已安装 `huashu-design` skill** → 调用其生成高保真原型(**要求包含 hover/空态/错误态等交互态**),落盘同上;**人审规格时一并确认设计方向**(复用既有强制卡点,执行期零设计决策)
|
|
188
|
+
- **两者皆无** → 不建基准、**不生成 UI 还原任务**,该 feature 的 UI 由扩展工程师任务按 design.md 自行实现;可提示用户 `npx skills add alchaincyf/huashu-design`
|
|
189
|
+
|
|
190
|
+
有基准时,design.md 记录基准路径,且「接口契约」节须包含**组件契约**(组件名 / props / 事件)。
|
|
191
|
+
|
|
192
|
+
### Step 9: 生成 design.md
|
|
193
|
+
|
|
194
|
+
**必须先读取项目 `.claude/CLAUDE.md` 和 `.claude/rules/` 下所有规范文件**,设计方案必须遵循项目已有的技术规范和约定。
|
|
195
|
+
|
|
196
|
+
按功能模块设计,每个模块说明涉及哪些层(service worker / content script / popup / options / side panel / 配套后端等),具体分层根据项目实际架构决定,不做硬编码限制。**涉及多个扩展上下文的模块必须写清消息通信方向与消息格式**(谁发起、经过谁、`chrome.runtime.sendMessage` 还是 port 长连接)——上下文间通信契约是扩展开发的头号返工源。
|
|
197
|
+
|
|
198
|
+
```markdown
|
|
199
|
+
# {Feature 名称} — 技术设计
|
|
200
|
+
|
|
201
|
+
## 设计版本
|
|
202
|
+
|
|
203
|
+
| 日期 | 版本 | 说明 |
|
|
204
|
+
| ------------ | ---- | -------- |
|
|
205
|
+
| {YYYY-MM-DD} | v1 | 初始设计 |
|
|
206
|
+
|
|
207
|
+
## 项目架构
|
|
208
|
+
|
|
209
|
+
- 架构类型: {ARCH_TYPE}
|
|
210
|
+
- 涉及层: {根据项目实际情况列出}
|
|
211
|
+
|
|
212
|
+
## 功能模块设计
|
|
213
|
+
|
|
214
|
+
### 模块 1: {模块名}
|
|
215
|
+
|
|
216
|
+
{技术方案,遵循 .claude/rules/ 中的规范}
|
|
217
|
+
|
|
218
|
+
**涉及层及关键设计:**
|
|
219
|
+
|
|
220
|
+
{根据项目实际分层描述,如数据模型、API 接口、组件设计、合约接口等}
|
|
221
|
+
|
|
222
|
+
### 模块 2: {模块名}
|
|
223
|
+
|
|
224
|
+
...
|
|
225
|
+
|
|
226
|
+
## 接口契约
|
|
227
|
+
|
|
228
|
+
{扩展内消息契约(message type / payload / 响应)、配套后端 API 等 — 根据项目类型决定}
|
|
229
|
+
|
|
230
|
+
## 数据模型
|
|
231
|
+
|
|
232
|
+
{chrome.storage 分区(local/sync/session)与 schema、IndexedDB、后端数据表 — 根据项目类型决定}
|
|
233
|
+
|
|
234
|
+
## 安全考虑
|
|
235
|
+
|
|
236
|
+
{基于 .claude/rules/security.md 和项目特有的安全规范}
|
|
237
|
+
|
|
238
|
+
## 技术决策
|
|
239
|
+
|
|
240
|
+
| 决策 | 选项 | 理由 |
|
|
241
|
+
| ---- | ---- | ---- |
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Step 9.5: 方案对抗审查(最贵的决策补上第二双眼睛)
|
|
245
|
+
|
|
246
|
+
design.md 生成后,满足任一触发条件 → 交**第二模型对抗审查一轮**(Codex 主通道;不可用按 N4 降级链用对抗子代理):
|
|
247
|
+
|
|
248
|
+
- GREENFIELD 的 ADR(架构选型是最贵决策)
|
|
249
|
+
- 二开且修改存量模块(方案错误会伤及老功能)
|
|
250
|
+
- design 含新模块、依赖方向变化或跨模块数据流
|
|
251
|
+
- 功能点 F ≥ 5 的大 feature
|
|
252
|
+
|
|
253
|
+
**投喂内容**:requirements.md + design.md 全文 + 项目 `.claude/rules/` 相关规范 +(二开)「波及面」段与被改存量模块现状代码——只给 design 不给上下文,审查质量减半(10.6 有投喂清单本步没有,内部不一致,此处补齐)。
|
|
254
|
+
提示词要义:"**这是隔壁同事做的方案,详细审查一下**"——重点查架构隔离、模块边界、与现有管线的耦合、数据流缺口;只报告有具体失败场景的问题,零发现明说(审查产出纪律同 N4)。**仅 1 轮**:采纳项修正 design.md 后进 Step 10;分歧项写入摘要卡「风险点」交人裁决。小 feature 不触发,零额外负担。
|
|
255
|
+
**凭证落盘**:审查原文 tee 到 `{SPECS_DIR}/.reviews/prd-{feature}-design-r1.md`——摘要卡「方案对抗审查」行必须与凭证对得上,无凭证的数字是自报(凭证教义全框架一体,规格期不豁免)。
|
|
256
|
+
|
|
257
|
+
> 依据:代码有 N4 对抗、规格有 10.5 自检,唯独技术方案此前无第二模型把关——而方案错误是最贵的错误(行业重度实践的最大单笔收益正是方案期拦截架构缺陷)。
|
|
258
|
+
|
|
259
|
+
### Step 10: 生成 tasks.md
|
|
260
|
+
|
|
261
|
+
**按功能拆任务。** AI 执行时根据 design.md 自动判断每个任务涉及哪些层。
|
|
262
|
+
|
|
263
|
+
```markdown
|
|
264
|
+
# {Feature 名称} — 任务清单
|
|
265
|
+
|
|
266
|
+
## 任务版本
|
|
267
|
+
|
|
268
|
+
| 日期 | 版本 | 说明 |
|
|
269
|
+
| ------------ | ---- | -------- |
|
|
270
|
+
| {YYYY-MM-DD} | v1 | 初始任务 |
|
|
271
|
+
|
|
272
|
+
## 项目信息
|
|
273
|
+
|
|
274
|
+
- 项目名: {PROJECT_NAME}
|
|
275
|
+
- 架构类型: {ARCH_TYPE}
|
|
276
|
+
- specs 路径: {SPECS_DIR}/{N}.{feature-name}/
|
|
277
|
+
|
|
278
|
+
## 任务列表
|
|
279
|
+
|
|
280
|
+
### UI 还原(仅当存在 design-baseline 时生成本节)
|
|
281
|
+
|
|
282
|
+
- [ ] T-001: 还原 {页面/组件} ~30min(基准: design-baseline/;本 feature 的扩展功能任务依赖本任务)
|
|
283
|
+
|
|
284
|
+
### 功能 1: {功能名}
|
|
285
|
+
|
|
286
|
+
- [ ] T-002: {任务描述} ~{预估时间}
|
|
287
|
+
- [ ] T-003: {任务描述} ~{预估时间}
|
|
288
|
+
|
|
289
|
+
### 功能 2: {功能名}
|
|
290
|
+
|
|
291
|
+
- [ ] T-003: {任务描述} ~{预估时间}
|
|
292
|
+
|
|
293
|
+
### 集成与测试
|
|
294
|
+
|
|
295
|
+
- [ ] T-010: 联调测试 ~{预估时间}
|
|
296
|
+
- [ ] T-011: E2E 测试 ~{预估时间}
|
|
297
|
+
- [ ] T-012: 部署 staging 并冒烟验证 ~15min(依赖本 feature 全部开发与测试任务)
|
|
298
|
+
|
|
299
|
+
> 部署任务前提:项目存在部署形态(Dockerfile / CI 配置 / 部署脚本,或 0→1 项目——bootstrap 已建 CI 骨架)才生成 T-012;**纯本地工具、库等无部署形态的项目不生成**,避免执行期反复触发"无 staging 环境"上报。
|
|
300
|
+
|
|
301
|
+
## 依赖关系
|
|
302
|
+
|
|
303
|
+
- T-002 依赖 T-001
|
|
304
|
+
|
|
305
|
+
## 风险点
|
|
306
|
+
|
|
307
|
+
- {可能遇到的问题及应对}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
**任务拆解原则:**
|
|
311
|
+
|
|
312
|
+
- 按功能拆,AI 执行时读 design.md 自动识别涉及哪些层;**二开项目按 B5 锚定业务地图**(feature 沿 07 线路、任务尽量单模块)
|
|
313
|
+
- 原子性,可独立完成和验证
|
|
314
|
+
- **同一组件/同一文件内的行为不拆分为多个任务**(如"渲染列表项"和"列表项的删除确认"归一个任务)——拆开会导致执行时自然合并、任务标记与提交失配(实跑验证的教训)
|
|
315
|
+
- 预估完成时间(5min / 15min / 30min / 1h)
|
|
316
|
+
- **粒度控制**:每个子 specs(feature 目录)不宜过大,单个 tasks.md 控制在 **10-15 个任务以内**。如果需求过大,应在 Step 6 之前拆成多个独立的 feature 目录(如 `2.user-auth-login`、`3.user-auth-register`),每个 feature 有自己的 requirements/design/tasks 三件套。这样 cm-plugin:ai 执行时上下文可控,不会因为 specs 太大导致丢失关键信息。
|
|
317
|
+
|
|
318
|
+
### Step 10.5: 规格自检(机器项,AI 自查自修,人不参与)
|
|
319
|
+
|
|
320
|
+
输出摘要卡之前,先对刚生成的三件套跑一遍机器可查项——**机器项 AI 自己清干净,人审只留业务意图**:
|
|
321
|
+
|
|
322
|
+
**通用自检项(所有项目):**
|
|
323
|
+
|
|
324
|
+
- [ ] 任务依赖无环;单 feature ≤15 个任务;同一文件/组件的行为未拆散到多任务
|
|
325
|
+
- [ ] 每条 AC 都能回答"怎么验证"(验证方式不明的 AC 视为不过)
|
|
326
|
+
- [ ] 任务产物查重:不与项目已有资产重复造(有地图查 04/05/06,无地图 Grep 核实)
|
|
327
|
+
|
|
328
|
+
**二开附加项(存在业务地图时):**
|
|
329
|
+
|
|
330
|
+
- [ ] **引用真实性(治引用幻觉)**:specs 中提到的每个存量文件/函数/组件名,用 Grep 逐个核实真实存在——二开 spec 引用不存在的存量代码,人审查不出来、执行期才炸
|
|
331
|
+
- [ ] **B5 合规**:feature 未跨多条 07 业务线路;跨模块任务已在描述中列模块清单
|
|
332
|
+
- [ ] **B3 合规**:修改存量模块的 feature,第一个任务是防护网基线
|
|
333
|
+
- [ ] **B2 完整**:design.md 含「波及面」段,且所列模块在地图/代码中真实存在
|
|
334
|
+
|
|
335
|
+
**处置规则**:有不过项 → AI 自行修正 specs 后重跑自检,**最多 2 轮**;2 轮后仍不过的项不许静默放行,写入摘要卡「风险点」交人裁决。自检结果一行附在摘要卡底部。
|
|
336
|
+
|
|
337
|
+
### Step 10.6: Codex 规格审查(装了就用,未装才跳过)
|
|
338
|
+
|
|
339
|
+
10.5 自检是机器项,查不出"**拆得对不对**"。自检通过后,把拆分结果交 Codex 过第二模型(触发口径同 N4:`codex` 可用即触发,未安装/不可用才跳过):
|
|
340
|
+
|
|
341
|
+
- **投喂内容**:requirements.md 功能点清单 + tasks.md 全文 + design.md「波及面」段(二开)——喂拆分结果,不喂三件套全文
|
|
342
|
+
- **提示词要义**:"这是隔壁同事拆的开发任务单,审查拆分质量:①任务边界有无重叠/遗漏 ②依赖顺序会不会卡死 ③粒度是否适合单任务交付验证 ④二开:波及面清单有没有漏掉会被牵连的模块。只报有具体后果的问题,没有问题就明说。"
|
|
343
|
+
- **处置**:采纳项修正 specs 后重跑一次 10.5 自检;分歧项写入摘要卡「风险点」交人裁决。**仅 1 轮**,不与 Codex 拉扯
|
|
344
|
+
- **凭证落盘**:审查原文 tee 到 `{SPECS_DIR}/.reviews/prd-{feature}-split-r1.md`,摘要卡「Codex 规格审查」行与之对应
|
|
345
|
+
- **不设降级链**:Codex 未装 → 直接跳过并在摘要卡标注(规格审查是增益层;代码审查 N4 才是强制层)
|
|
346
|
+
- 调用失败处理同 N4 纪律:失败原文记录,超时重试 1 次,仍失败按未装处理
|
|
347
|
+
|
|
348
|
+
> 依据:拆分质量是二开乱改的最后闸门——10.5 只能查机器项(引用真实性、依赖环),"这个任务拆得会不会漏改关联模块"需要第二模型的判断力。
|
|
349
|
+
|
|
350
|
+
### Step 11: 输出总结(附规格摘要卡 + 审查清单)
|
|
351
|
+
|
|
352
|
+
**先输出规格摘要卡**——人审的第一入口是这张一屏卡片,不是三个长文件(实跑教训:直接丢长文件,人审会退化成扫一眼就"通过"):
|
|
353
|
+
|
|
354
|
+
```text
|
|
355
|
+
┌─ 📋 规格摘要卡 ────────────────────────────
|
|
356
|
+
│ 交付形态: {扩展表面组合,如 side panel+content script} ← 第一分叉,看错全错
|
|
357
|
+
│ 目标浏览器: {Chrome / Chrome+Edge / 含 Firefox}
|
|
358
|
+
│ 权限清单: {permissions + host_permissions,逐项带用途} ← 商店审核与用户信任的焦点
|
|
359
|
+
│ Feature: {N 个}: {名称列表}
|
|
360
|
+
│ 功能点: {N} 个 | AC: {N} 条 | 任务: {N} 个(预估 {x}h)
|
|
361
|
+
│ 开放问题: {已答 N / 共 N}——{逐条一行: 问题→答案}
|
|
362
|
+
│ 风险点: {商店合规/权限扩张/破坏性操作等敏感项,无则"无"}
|
|
363
|
+
│ UI 基准: {像素级/结构级/纯参考/无}
|
|
364
|
+
│ 🔎 规格自检: {N}/{N} 通过{(未过项已列入风险点)}
|
|
365
|
+
│ 🧠 方案对抗审查: {通过 / {N}条已修 / 跳过(未触发)}
|
|
366
|
+
│ 🤖 Codex 规格审查: {通过 / {N}条已修 / 跳过(未装)}
|
|
367
|
+
└────────────────────────────────────────────
|
|
368
|
+
有疑问的行,点开对应文件细看;摘要卡没问题再走下面的审查清单。
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
完成后报告:
|
|
372
|
+
|
|
373
|
+
- Feature 名称和序号、Specs 路径、涉及的技术层、总任务数和预估总时间
|
|
374
|
+
|
|
375
|
+
并输出**规格审查清单**——人审规格不是"看一眼",按此逐项检查:
|
|
376
|
+
|
|
377
|
+
```text
|
|
378
|
+
📋 规格审查清单(人审时逐项勾选)
|
|
379
|
+
- [ ] 任务跨 feature 查重:同一产物(文件/模块)未出现在多个任务中(实跑教训:bootstrap 底座与 feature 数据层重复)
|
|
380
|
+
- [ ] 依赖关系完整:每个任务的前置依赖已声明,无环
|
|
381
|
+
- [ ] AC 可测试:每条验收标准都能回答"怎么验证"
|
|
382
|
+
- [ ] 粒度合规:同一组件/文件的行为未拆成多任务;单 feature ≤15 个任务
|
|
383
|
+
- [ ] 开放问题已全部回答,敏感决策(法域/支付/权限)有人工确认记录
|
|
384
|
+
- [ ] **交付形态与需求意图一致**(要 App 别画成网页),且已写入 ADR 与 CLAUDE.md 字段
|
|
385
|
+
- [ ] **原型功能点覆盖 100%**(有交互原型时):遍历记录中每个可交互元素都有对应 [F-xxx] 或死区标注,无静默丢弃
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
**规格审批位落盘**:报告输出后,写入 `{SPECS_DIR}/.cm-specs-status` 单行 JSON:
|
|
389
|
+
`{"status":"awaiting_review","at":"{时间}","features":["1.xxx",...]}`
|
|
390
|
+
|
|
391
|
+
**硬停车(不可违反)**:本命令的终点就是摘要卡与审查清单——**任何情况下不得在本会话顺势启动开发**,对话里的"继续"不构成开发授权。提示用户:**逐项审查通过后,运行 `/cm-plugin:ai` 开始开发**(N1 有入口闸:未审批的 specs 会先要求确认摘要卡)
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## 模式文件(按需读取,勿全量加载)
|
|
398
|
+
|
|
399
|
+
- 0→1 全新项目: `cm-plugin-prd-modes/greenfield.md`(G1 选型/G2 bootstrap/G3 业务生成/G4 架构变更处置)
|
|
400
|
+
- 存量二开: `cm-plugin-prd-modes/brownfield.md`(B2–B5)
|
|
401
|
+
- 需求变更: `cm-plugin-prd-modes/change-mode.md`(C1–C8)
|
|
402
|
+
|
|
403
|
+
> 拆分目的: 主文件只承载通用流程,执行器按分支加载对应规则——注意力预算优先(v0.9.11 机械拆分,语义零变更)。
|