ai-dev-cli 2.0.1 → 2.0.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/dist/index.js +38 -24
- package/package.json +1 -1
- package/templates/level-0/settings.json.tpl +3 -3
- package/templates/level-1/commit.md +31 -12
- package/templates/level-1/plan.md +51 -11
- package/templates/level-1/review.md +48 -14
- package/templates/level-3/check.md +49 -0
- package/templates/level-3/code-standards.md +19 -24
- package/templates/level-3/debug.md +39 -10
- package/templates/level-3/doc.md +27 -11
- package/templates/level-3/docaudit.md +56 -0
- package/templates/level-3/health-report.md +52 -0
- package/templates/level-3/impact.md +61 -0
- package/templates/level-3/retro.md +62 -0
- package/templates/level-3/spec.md +257 -40
- package/templates/level-3/takeover.md +72 -0
- package/templates/level-3/test.md +42 -0
- package/templates/level-3/ui-page.md +36 -0
package/dist/index.js
CHANGED
|
@@ -288,7 +288,7 @@ function select(question, options, defaultIndex = 0) {
|
|
|
288
288
|
}
|
|
289
289
|
|
|
290
290
|
// src/commands/init.ts
|
|
291
|
-
var VERSION = "2.0.
|
|
291
|
+
var VERSION = "2.0.2";
|
|
292
292
|
var DATABASE_OPTIONS = [
|
|
293
293
|
"prisma-sqlite",
|
|
294
294
|
"prisma-pg",
|
|
@@ -296,10 +296,10 @@ var DATABASE_OPTIONS = [
|
|
|
296
296
|
"supabase-cn"
|
|
297
297
|
];
|
|
298
298
|
var DATABASE_LABELS = {
|
|
299
|
-
"prisma-sqlite": "Prisma + SQLite \u2014
|
|
300
|
-
"prisma-pg": "Prisma + PostgreSQL \u2014
|
|
301
|
-
"supabase-cloud": "Supabase (Cloud) \u2014 BaaS
|
|
302
|
-
"supabase-cn": "Supabase (China) \u2014
|
|
299
|
+
"prisma-sqlite": "Prisma + SQLite \u2014 \u96F6\u914D\u7F6E\u672C\u5730\u5F00\u53D1",
|
|
300
|
+
"prisma-pg": "Prisma + PostgreSQL \u2014 \u4F20\u7EDF\u5173\u7CFB\u578B\u6570\u636E\u5E93",
|
|
301
|
+
"supabase-cloud": "Supabase (Cloud) \u2014 \u542B\u8BA4\u8BC1/\u5B58\u50A8/\u5B9E\u65F6\u529F\u80FD\u7684 BaaS",
|
|
302
|
+
"supabase-cn": "Supabase (China) \u2014 \u56FD\u5185\u81EA\u6258\u7BA1\u65B9\u6848"
|
|
303
303
|
};
|
|
304
304
|
var DATABASE_CONFIGS = {
|
|
305
305
|
"prisma-sqlite": {
|
|
@@ -366,11 +366,11 @@ async function runInit(options) {
|
|
|
366
366
|
level = parseInt(options.level, 10);
|
|
367
367
|
} else {
|
|
368
368
|
console.log("");
|
|
369
|
-
console.log("
|
|
370
|
-
console.log(" 0)
|
|
371
|
-
console.log(" 1)
|
|
372
|
-
console.log(" 2)
|
|
373
|
-
console.log(" 3)
|
|
369
|
+
console.log("\u9009\u62E9\u521D\u59CB\u5316\u7EA7\u522B\uFF1A");
|
|
370
|
+
console.log(" 0) \u6700\u5C0F\u5316 \u2014 CLAUDE.md + \u57FA\u7840\u6743\u9650");
|
|
371
|
+
console.log(" 1) \u547D\u4EE4\u5C42 \u2014 + /plan /review /commit");
|
|
372
|
+
console.log(" 2) \u8D28\u91CF\u5C42 \u2014 + Hooks \u81EA\u52A8\u5316");
|
|
373
|
+
console.log(" 3) \u5B8C\u6574\u7248 \u2014 + MCP + Skills + \u6587\u6863");
|
|
374
374
|
console.log("");
|
|
375
375
|
const input = await ask("Level [0-3]", "1");
|
|
376
376
|
level = parseInt(input, 10);
|
|
@@ -432,10 +432,14 @@ function initLevel0(vars) {
|
|
|
432
432
|
appendGitignore(".claude/memory.jsonl");
|
|
433
433
|
}
|
|
434
434
|
function initLevel1() {
|
|
435
|
-
info("=== Level 1: Core
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
435
|
+
info("=== Level 1: Core Skills ===");
|
|
436
|
+
const coreSkills = ["plan", "review", "commit"];
|
|
437
|
+
for (const skill of coreSkills) {
|
|
438
|
+
safeWrite(
|
|
439
|
+
`.claude/skills/${skill}/SKILL.md`,
|
|
440
|
+
loadTemplate(`level-1/${skill}.md`)
|
|
441
|
+
);
|
|
442
|
+
}
|
|
439
443
|
}
|
|
440
444
|
function initLevel2() {
|
|
441
445
|
info("=== Level 2: Quality Gates (Hooks) ===");
|
|
@@ -466,16 +470,26 @@ function initLevel2() {
|
|
|
466
470
|
function initLevel3(vars) {
|
|
467
471
|
info("=== Level 3: Full System ===");
|
|
468
472
|
safeWrite(".mcp.json", loadTemplate("level-3/mcp.json"));
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
"
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
"
|
|
477
|
-
|
|
478
|
-
|
|
473
|
+
const skills = [
|
|
474
|
+
"debug",
|
|
475
|
+
"doc",
|
|
476
|
+
"check",
|
|
477
|
+
"test",
|
|
478
|
+
"impact",
|
|
479
|
+
"code-standards",
|
|
480
|
+
"spec",
|
|
481
|
+
"retro",
|
|
482
|
+
"health-report",
|
|
483
|
+
"docaudit",
|
|
484
|
+
"takeover",
|
|
485
|
+
"ui-page"
|
|
486
|
+
];
|
|
487
|
+
for (const skill of skills) {
|
|
488
|
+
safeWrite(
|
|
489
|
+
`.claude/skills/${skill}/SKILL.md`,
|
|
490
|
+
loadTemplate(`level-3/${skill}.md`)
|
|
491
|
+
);
|
|
492
|
+
}
|
|
479
493
|
safeWrite("docs/approved-deps.md", loadAndRender("level-3/approved-deps.md", vars));
|
|
480
494
|
const adrKeep = "docs/adr/.gitkeep";
|
|
481
495
|
if (!import_node_fs4.default.existsSync(adrKeep)) {
|
package/package.json
CHANGED
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
],
|
|
16
16
|
"deny": [
|
|
17
17
|
"Bash(sudo:*)",
|
|
18
|
-
"Bash(curl
|
|
19
|
-
"Bash(wget
|
|
18
|
+
"Bash(curl *|*sh)",
|
|
19
|
+
"Bash(wget *|*sh)",
|
|
20
20
|
"Bash(rm -rf /)",
|
|
21
|
-
"Bash(git push
|
|
21
|
+
"Bash(git push *--force*)",
|
|
22
22
|
"Bash(git reset --hard)",
|
|
23
23
|
"Bash(chmod 777:*)",
|
|
24
24
|
"Read(.env)",
|
|
@@ -1,17 +1,36 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
name: commit
|
|
3
|
+
description: >
|
|
4
|
+
智能提交。完成功能并通过审查后使用。
|
|
5
|
+
生成语义化的 commit message 并执行提交。
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
# 智能提交
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
2. If no staged files, `git add` relevant files individually (never use `git add .`)
|
|
10
|
-
3. Analyze changes and generate Conventional Commits format message:
|
|
11
|
-
feat|fix|refactor|docs|test|chore(scope): description
|
|
10
|
+
## 步骤
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
-
|
|
12
|
+
1. 运行 `git status` 和 `git diff --staged` 查看变更
|
|
13
|
+
2. 如果没有 staged 文件,先 `git add` 相关文件(不要用 `git add .`)
|
|
14
|
+
3. 分析变更内容,生成 Conventional Commits 格式的 message:
|
|
15
|
+
`type(scope): 描述`
|
|
16
|
+
- type: feat / fix / refactor / docs / test / chore
|
|
17
|
+
- scope: 取模块名
|
|
18
|
+
- 描述: 英文 50 字符以内,说明 why 而非 what
|
|
19
|
+
|
|
20
|
+
## 提交前检查
|
|
21
|
+
|
|
22
|
+
提交前确认以下全部通过:
|
|
23
|
+
- `npm run lint` — 零警告
|
|
24
|
+
- `npx tsc --noEmit` — 零类型错误
|
|
25
|
+
- `npm run test` — 全部通过
|
|
26
|
+
|
|
27
|
+
任何一项不通过,不允许提交。
|
|
28
|
+
|
|
29
|
+
## 大变更处理
|
|
30
|
+
|
|
31
|
+
如果变更超过 10 个文件,建议拆分为多次提交,按逻辑单元分组。
|
|
32
|
+
|
|
33
|
+
IMPORTANT:
|
|
34
|
+
- 不要 `git add .`,逐个添加相关文件
|
|
35
|
+
- 不要提交 .env 或包含密钥的文件
|
|
36
|
+
- commit message 用英文
|
|
@@ -1,16 +1,56 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
name: plan
|
|
3
|
+
description: >
|
|
4
|
+
需求分析与方案设计。当开始新功能或大改动时使用。
|
|
5
|
+
输出结构化的实现方案,等待人工审批后再执行。
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
# 需求分析与方案设计
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
2. Search the codebase for existing similar features or reusable modules
|
|
10
|
-
3. Output the implementation plan:
|
|
11
|
-
- Overview (one sentence)
|
|
12
|
-
- Impact scope (new files, modified files, dependency changes)
|
|
13
|
-
- Implementation steps (specific to file and function level)
|
|
14
|
-
- Risk points and mitigations
|
|
10
|
+
## 步骤
|
|
15
11
|
|
|
16
|
-
|
|
12
|
+
1. **理解需求**(按规模分路径)
|
|
13
|
+
使用 AskUserQuestion 向用户确认功能行为、边界、是否有类似功能可参考。
|
|
14
|
+
- **小功能**(改动 < 3 文件,无新数据模型):确认需求后直接进入步骤 2
|
|
15
|
+
- **中大功能**(跨模块/新数据模型/新 API):如果已有 spec.md,直接基于它设计方案;如果没有,建议先运行 /spec。若用户选择跳过,追加结构化提问:
|
|
16
|
+
- 目标用户是谁?要解决什么问题?
|
|
17
|
+
- 核心用户故事(3-7 条)
|
|
18
|
+
- In scope / Out of scope
|
|
19
|
+
- 验收标准(每条用户故事的 Given/When/Then)
|
|
20
|
+
|
|
21
|
+
2. **检查现有代码**
|
|
22
|
+
搜索代码库中已有的类似功能或可复用模块。
|
|
23
|
+
列出可复用的组件、工具函数、类型定义。
|
|
24
|
+
|
|
25
|
+
3. **输出实现方案**
|
|
26
|
+
|
|
27
|
+
基础格式(所有功能):
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
## 方案概述
|
|
31
|
+
[一句话描述实现思路]
|
|
32
|
+
|
|
33
|
+
## 影响范围
|
|
34
|
+
- 新建文件:[列出]
|
|
35
|
+
- 修改文件:[列出,标注改动点]
|
|
36
|
+
- 依赖变更:[列出新增/移除的包]
|
|
37
|
+
|
|
38
|
+
## 实现步骤
|
|
39
|
+
1. [步骤1 - 具体到文件和函数级别]
|
|
40
|
+
2. [步骤2]
|
|
41
|
+
...
|
|
42
|
+
|
|
43
|
+
## 风险点
|
|
44
|
+
- [可能出问题的地方及应对措施]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
中大功能额外在方案开头包含:
|
|
48
|
+
- **目标与非目标** + **用户故事与验收标准** + **范围边界**(精简 PRD)
|
|
49
|
+
- 当存在 API 变更时,先定义 API 契约(路径、方法、请求/响应 schema)
|
|
50
|
+
- 大功能附加实现顺序:Foundation(数据模型+类型)→ Core(业务逻辑)→ Integration(模块连接)→ Polish(错误处理+日志+文档)
|
|
51
|
+
|
|
52
|
+
4. **等待确认**
|
|
53
|
+
|
|
54
|
+
IMPORTANT:
|
|
55
|
+
- 方案输出后必须等待用户确认,不要自行开始实现。
|
|
56
|
+
- 本 Skill 负责需求分析与方案设计(产出方案文档)。代码级实现规划由 Claude Code 内置 Plan Mode 负责。典型流程:/plan → 审批 → Plan Mode → 审批 → 执行。
|
|
@@ -1,19 +1,53 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
name: review
|
|
3
|
+
description: >
|
|
4
|
+
代码审查。完成功能实现后、提交前使用。
|
|
5
|
+
从正确性、安全性、性能三个维度审查最近变更。
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
# 代码审查
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
2. Review dimensions:
|
|
10
|
-
- Correctness: logic, edge cases, null defense, async error handling
|
|
11
|
-
- Security: injection risks, input validation, sensitive info exposure
|
|
12
|
-
- Performance: unnecessary re-renders, N+1 queries, large list pagination
|
|
13
|
-
- Standards: compliance with CLAUDE.md rules
|
|
10
|
+
## 步骤
|
|
14
11
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
1. 运行 `git diff HEAD` 或 `git diff main..HEAD` 查看所有变更
|
|
13
|
+
2. 按以下清单逐项检查
|
|
14
|
+
|
|
15
|
+
## 审查维度
|
|
16
|
+
|
|
17
|
+
### 正确性(Must Check)
|
|
18
|
+
- 逻辑是否正确,边界条件是否处理
|
|
19
|
+
- 空值/undefined 是否防御
|
|
20
|
+
- 异步操作的错误处理是否完整
|
|
21
|
+
- 类型是否严格,有无隐式 any
|
|
22
|
+
|
|
23
|
+
### 安全性(Must Check)
|
|
24
|
+
- 用户输入是否做了校验(zod schema)
|
|
25
|
+
- 是否有 SQL 注入、XSS 风险
|
|
26
|
+
- 敏感信息是否暴露在响应或日志中
|
|
27
|
+
- 文件上传是否校验了类型和大小
|
|
28
|
+
|
|
29
|
+
### 性能(Should Check)
|
|
30
|
+
- 是否有不必要的重复渲染(缺少 memo/useMemo)
|
|
31
|
+
- 数据库查询是否有 N+1 问题
|
|
32
|
+
- 大列表是否做了分页
|
|
33
|
+
|
|
34
|
+
### 规范(Should Check)
|
|
35
|
+
- 是否符合 CLAUDE.md 中的编码规范
|
|
36
|
+
- 命名是否清晰、一致
|
|
37
|
+
|
|
38
|
+
### 规格对照(当有设计文档时)
|
|
39
|
+
如果存在 prd.md 或 API 契约:
|
|
40
|
+
- 逐条检查验收标准是否都已实现
|
|
41
|
+
- 对照 API 契约,检查接口定义(路径、方法、请求/响应 schema)是否匹配
|
|
42
|
+
- 标记:Pass / Fail / Partial
|
|
43
|
+
|
|
44
|
+
## 输出格式
|
|
45
|
+
|
|
46
|
+
按严重程度分类:
|
|
47
|
+
- **必须修复**:安全漏洞、逻辑错误、数据丢失风险
|
|
48
|
+
- **建议改进**:代码异味、缺失错误处理、性能问题
|
|
49
|
+
- **小建议**:命名优化、风格统一
|
|
50
|
+
|
|
51
|
+
每条包含:文件名:行号、问题描述、修复建议。
|
|
52
|
+
|
|
53
|
+
IMPORTANT:客观报告,不美化。没有问题就说"审查通过",有问题就直说。
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: check
|
|
3
|
+
description: >
|
|
4
|
+
项目合规体检。随时可用,检查代码和配置是否符合体系规范。
|
|
5
|
+
脚本 check 的智能补充层,处理需要理解代码语义的检查项。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 项目合规体检
|
|
9
|
+
|
|
10
|
+
先运行脚本的基础检查(如果可用):
|
|
11
|
+
`./scripts/ai-dev.sh check 2>/dev/null || true`
|
|
12
|
+
|
|
13
|
+
然后执行以下 AI 深度检查:
|
|
14
|
+
|
|
15
|
+
## 1. CLAUDE.md 健康度
|
|
16
|
+
- "架构" 章节是否与实际目录结构一致
|
|
17
|
+
- "命令" 章节是否与 package.json scripts 一致
|
|
18
|
+
- "常见陷阱" 中是否有过时条目
|
|
19
|
+
- 指令条数接近 150 条时给出警告
|
|
20
|
+
|
|
21
|
+
## 2. 代码规范深度检查
|
|
22
|
+
- 抽查 5 个最近修改的 .ts/.tsx 文件:类型完整性、zod 校验、AppError 使用、裸 throw
|
|
23
|
+
- 检查 services/ 函数是否有返回类型注解
|
|
24
|
+
|
|
25
|
+
## 3. 依赖合规
|
|
26
|
+
- 对比 package.json 与 docs/approved-deps.md,列出未在白名单中的依赖
|
|
27
|
+
|
|
28
|
+
## 4. 测试覆盖评估
|
|
29
|
+
- 对比 src/ 模块与测试文件,标出完全没有测试的核心模块(services/, app/api/)
|
|
30
|
+
|
|
31
|
+
## 输出格式
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
## 体检报告
|
|
35
|
+
|
|
36
|
+
### 合规项
|
|
37
|
+
- [列出通过的检查]
|
|
38
|
+
|
|
39
|
+
### 需要关注
|
|
40
|
+
- [列出警告项,附具体位置和建议]
|
|
41
|
+
|
|
42
|
+
### 必须修复
|
|
43
|
+
- [列出违规项,附修复建议]
|
|
44
|
+
|
|
45
|
+
### 建议
|
|
46
|
+
- [可选的改进建议]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
IMPORTANT:客观报告,不要美化。没有问题就说没有问题,有问题就直说。
|
|
@@ -1,37 +1,32 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-standards
|
|
3
3
|
description: >
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
编码规范守卫。任何代码生成请求时自动参考。
|
|
5
|
+
确保生成的代码符合项目约定的类型安全、错误处理和命名规范。
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
#
|
|
8
|
+
# 编码规范
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
生成代码前强制检查以下规则:
|
|
11
11
|
|
|
12
12
|
## TypeScript
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
13
|
+
- 所有函数必须有完整类型注解,禁止 any
|
|
14
|
+
- 使用 named export,禁止 default export
|
|
15
|
+
- 优先使用 interface 定义对象类型,type 用于联合/交叉类型
|
|
16
16
|
|
|
17
17
|
## API Route
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
18
|
+
- 所有输入用 zod schema 校验
|
|
19
|
+
- 统一响应格式:`{ data, error, meta }`
|
|
20
|
+
- 错误使用 AppError 类,不裸 throw Error
|
|
21
21
|
|
|
22
|
-
## React
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
22
|
+
## React 组件
|
|
23
|
+
- 函数式组件 + hooks,Props 定义为独立 type
|
|
24
|
+
- 状态管理优先级:useState → useReducer → Zustand → Server State
|
|
25
|
+
- 列表渲染必须有稳定的 key
|
|
26
26
|
|
|
27
|
-
##
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
27
|
+
## 文件结构
|
|
28
|
+
- 单文件不超过 300 行,超出则拆分
|
|
29
|
+
- 文件命名 kebab-case,组件 PascalCase
|
|
30
|
+
- 新增代码优先参考项目中已有的同类实现
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
| Scenario | Reference |
|
|
34
|
-
|----------|-----------|
|
|
35
|
-
| API Route | See existing implementations under /app/api/ |
|
|
36
|
-
| Service | See existing implementations under /services/ |
|
|
37
|
-
| Component | See existing implementations under /components/ |
|
|
32
|
+
IMPORTANT:这些规则在任何代码生成时自动参考,不需要用户手动调用。
|
|
@@ -1,15 +1,44 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
name: debug
|
|
3
|
+
description: >
|
|
4
|
+
问题诊断。当遇到 Bug、报错或异常行为时使用。
|
|
5
|
+
系统性定位根因,给出修复方案。
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
# 问题诊断
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
1. Collect info: read error logs, find related source code
|
|
10
|
-
2. Check recent git changes: `git log --oneline -10`
|
|
11
|
-
3. Trace the call chain upward from the error point
|
|
12
|
-
4. Rank possible root causes by probability
|
|
13
|
-
5. Output: root cause analysis + fix plan + verification method
|
|
10
|
+
## 步骤
|
|
14
11
|
|
|
15
|
-
|
|
12
|
+
1. **收集信息**
|
|
13
|
+
- 读取报错信息/日志
|
|
14
|
+
- 找到相关源代码
|
|
15
|
+
- 检查最近的 git 变更(`git log --oneline -10`)
|
|
16
|
+
|
|
17
|
+
2. **定位根因**
|
|
18
|
+
- 从报错点沿调用链向上追踪
|
|
19
|
+
- 检查输入数据是否符合预期
|
|
20
|
+
- 检查是否有最近的代码变更引入了问题
|
|
21
|
+
|
|
22
|
+
3. **验证假设**
|
|
23
|
+
- 阅读相关测试用例,确认测试是否覆盖了出错场景
|
|
24
|
+
- 如果有多个可能原因,按概率排序,逐一排查
|
|
25
|
+
|
|
26
|
+
4. **给出修复方案**
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
## 根因
|
|
30
|
+
[一句话描述]
|
|
31
|
+
|
|
32
|
+
## 修复方案
|
|
33
|
+
[具体修改内容]
|
|
34
|
+
|
|
35
|
+
## 验证方法
|
|
36
|
+
[如何确认修复有效]
|
|
37
|
+
|
|
38
|
+
## 防御措施
|
|
39
|
+
[如何防止类似问题再次发生]
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
5. **等待确认后执行修复**
|
|
43
|
+
|
|
44
|
+
IMPORTANT:如果不确定根因,明确告知用户你的不确定性,不要猜测性地修改代码。
|
package/templates/level-3/doc.md
CHANGED
|
@@ -1,15 +1,31 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
name: doc
|
|
3
|
+
description: >
|
|
4
|
+
文档更新。代码变更后使用,确保文档与代码同步。
|
|
5
|
+
检查并更新 CLAUDE.md、README、API 文档等。
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
# 文档更新
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
## 步骤
|
|
11
|
+
|
|
12
|
+
1. 运行 `git diff --name-only` 查看本次变更的文件列表
|
|
13
|
+
|
|
14
|
+
2. 检查以下文档是否需要更新:
|
|
15
|
+
- 新增模块/目录 → CLAUDE.md "架构" 章节
|
|
16
|
+
- 新增命令/脚本 → CLAUDE.md "命令" 章节
|
|
17
|
+
- 新增/修改 API → README 或 API 文档
|
|
18
|
+
- 新增依赖 → docs/approved-deps.md
|
|
19
|
+
- 重大技术决策 → docs/adr/ 新增 ADR
|
|
20
|
+
- 环境变量变更 → README 或 .env.example
|
|
21
|
+
|
|
22
|
+
3. 执行必要的更新
|
|
23
|
+
|
|
24
|
+
4. 输出更新摘要:
|
|
25
|
+
```
|
|
26
|
+
## 文档更新摘要
|
|
27
|
+
- 已更新:[列出更新的文档及改动点]
|
|
28
|
+
- 无需更新:[说明为什么不需要更新]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
IMPORTANT:只更新确实需要更新的文档,不要过度补充。没有需要更新的文档就明确告知。
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docaudit
|
|
3
|
+
description: >
|
|
4
|
+
文档体系审计。检查文档完整性、索引一致性和规范合规性。
|
|
5
|
+
当新增/修改/删除文档后使用,确保索引、CHANGELOG 和规范得到遵守。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 文档体系审计
|
|
9
|
+
|
|
10
|
+
## 步骤
|
|
11
|
+
|
|
12
|
+
1. **索引一致性检查**
|
|
13
|
+
- 读取项目的文档索引文件(如 README.md 或 docs/ 下的索引)
|
|
14
|
+
- 扫描文档目录下所有 .md 文件
|
|
15
|
+
- 比对:索引中列出但文件不存在的条目 → 报错
|
|
16
|
+
- 比对:文件存在但索引中未列出的条目 → 报错
|
|
17
|
+
|
|
18
|
+
2. **编号连续性检查**
|
|
19
|
+
- 提取所有文档的编号前缀(00, 01, 02...)
|
|
20
|
+
- 检查是否有跳号或重号
|
|
21
|
+
|
|
22
|
+
3. **CHANGELOG 时效性检查**
|
|
23
|
+
- 读取 CHANGELOG.md
|
|
24
|
+
- 检查最新条目的日期是否为最近 7 天内
|
|
25
|
+
- 如果最近有 git 提交修改了文档目录下的文件,但 CHANGELOG 未更新 → 警告
|
|
26
|
+
|
|
27
|
+
4. **文档行数检查**
|
|
28
|
+
- 统计每篇文档的行数
|
|
29
|
+
- 超过 500 行的文档 → 警告,建议拆分
|
|
30
|
+
|
|
31
|
+
5. **交叉引用检查**
|
|
32
|
+
- 扫描文档中的内部链接
|
|
33
|
+
- 检查链接目标是否存在
|
|
34
|
+
|
|
35
|
+
## 输出格式
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
## 文档审计报告
|
|
39
|
+
|
|
40
|
+
### 通过
|
|
41
|
+
- [列出通过的检查项]
|
|
42
|
+
|
|
43
|
+
### 警告
|
|
44
|
+
- [列出警告项,附具体位置和建议]
|
|
45
|
+
|
|
46
|
+
### 错误
|
|
47
|
+
- [列出必须修复的问题]
|
|
48
|
+
|
|
49
|
+
### 统计
|
|
50
|
+
- 文档总数:N 篇
|
|
51
|
+
- 总行数:N 行
|
|
52
|
+
- 平均行数:N 行/篇
|
|
53
|
+
- 最长文档:[文件名](N 行)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
IMPORTANT:客观报告,不美化。有问题就直说,没有问题就确认通过。
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: health-report
|
|
3
|
+
description: >
|
|
4
|
+
项目健康度报告。定期使用(建议每两周),评估项目可靠性现状。
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 项目健康度报告
|
|
8
|
+
|
|
9
|
+
执行以下检查并输出报告:
|
|
10
|
+
|
|
11
|
+
## 1. 测试覆盖评估
|
|
12
|
+
- 列出 services/ 下每个文件是否有对应测试
|
|
13
|
+
- 列出 app/api/ 下每个 Route 是否有对应测试
|
|
14
|
+
- 标注完全没有测试的模块
|
|
15
|
+
|
|
16
|
+
## 2. 类型安全评估
|
|
17
|
+
- 运行 `npx tsc --noEmit 2>&1 | head -50`
|
|
18
|
+
- 搜索代码中的 `any` 类型使用
|
|
19
|
+
- 搜索 `@ts-ignore` 和 `@ts-expect-error`
|
|
20
|
+
|
|
21
|
+
## 3. 模块耦合评估
|
|
22
|
+
- 检查是否有组件直接 import prisma
|
|
23
|
+
- 检查是否有跨 Service 的直接调用
|
|
24
|
+
- 检查调用方向是否符合 CLAUDE.md 中定义的架构
|
|
25
|
+
|
|
26
|
+
## 4. 风险区域识别
|
|
27
|
+
- 最近 30 次提交中修改最频繁的文件(变更热点 = 风险热点)
|
|
28
|
+
`git log --oneline -30 --name-only | sort | uniq -c | sort -rn | head -10`
|
|
29
|
+
- 超过 300 行的文件
|
|
30
|
+
- 有 TODO/FIXME/HACK 的文件
|
|
31
|
+
|
|
32
|
+
## 输出格式
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
## 健康度报告 [日期]
|
|
36
|
+
|
|
37
|
+
### 得分
|
|
38
|
+
- 测试覆盖: [X/Y] 个核心模块有测试
|
|
39
|
+
- 类型安全: [数量] 处 any / ts-ignore
|
|
40
|
+
- 架构合规: [是否有违反模块边界的情况]
|
|
41
|
+
- 变更热点: [最危险的 3 个文件]
|
|
42
|
+
|
|
43
|
+
### 本期最大风险
|
|
44
|
+
[一句话说明当前最大的可靠性风险]
|
|
45
|
+
|
|
46
|
+
### 建议优先改进
|
|
47
|
+
1. [第一优先]
|
|
48
|
+
2. [第二优先]
|
|
49
|
+
3. [第三优先]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
IMPORTANT:客观报告,不美化。用数据说话,不用模糊的"还行"或"不错"。
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: impact
|
|
3
|
+
description: >
|
|
4
|
+
改动影响分析。修改现有功能、重构、升级依赖前使用。
|
|
5
|
+
分析改动的爆炸半径,列出所有受影响的模块和风险点。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 改动影响分析
|
|
9
|
+
|
|
10
|
+
对改动 "$ARGUMENTS" 进行影响分析:
|
|
11
|
+
|
|
12
|
+
## 1. 直接影响
|
|
13
|
+
搜索项目中所有直接引用目标模块/类型/函数的文件:
|
|
14
|
+
- 用 Grep 搜索 import 语句
|
|
15
|
+
- 用 Grep 搜索类型引用
|
|
16
|
+
- 用 Grep 搜索函数调用
|
|
17
|
+
|
|
18
|
+
列出每个引用点的文件路径和行号。
|
|
19
|
+
|
|
20
|
+
## 2. 间接影响
|
|
21
|
+
对直接影响的文件,追踪它们的调用者(向上一层):
|
|
22
|
+
- 如果改的是 Service 层,谁调用了这个 Service?
|
|
23
|
+
- 如果改的是类型定义,哪些 API Route 和组件用了这个类型?
|
|
24
|
+
- 如果改的是数据库 Schema,哪些 Service 和 migration 受影响?
|
|
25
|
+
|
|
26
|
+
## 3. 测试影响
|
|
27
|
+
列出覆盖该模块的现有测试:
|
|
28
|
+
- 单元测试:哪些测试文件测的是这个模块?
|
|
29
|
+
- 集成测试:哪些测试覆盖了受影响的 API?
|
|
30
|
+
- 标注:哪些受影响的模块**没有**测试覆盖?
|
|
31
|
+
|
|
32
|
+
## 4. 风险评估
|
|
33
|
+
|
|
34
|
+
输出格式:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
## 影响分析报告
|
|
38
|
+
|
|
39
|
+
### 直接影响(改了就会影响)
|
|
40
|
+
| 文件 | 引用方式 | 风险 |
|
|
41
|
+
|------|---------|------|
|
|
42
|
+
| [文件路径] | [import/调用/类型引用] | [高/中/低] |
|
|
43
|
+
|
|
44
|
+
### 间接影响(可能波及)
|
|
45
|
+
| 文件 | 传导路径 | 风险 |
|
|
46
|
+
|------|---------|------|
|
|
47
|
+
|
|
48
|
+
### 测试覆盖
|
|
49
|
+
- 已覆盖:[列出]
|
|
50
|
+
- 未覆盖(需要补测试):[列出]
|
|
51
|
+
|
|
52
|
+
### 建议的改动顺序
|
|
53
|
+
1. [先改什么]
|
|
54
|
+
2. [再改什么]
|
|
55
|
+
3. [每步验证什么]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
IMPORTANT:
|
|
59
|
+
- 宁可多列不要漏列
|
|
60
|
+
- 未覆盖测试的模块标注为高风险
|
|
61
|
+
- 建议的改动顺序必须是可以逐步验证的
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: retro
|
|
3
|
+
description: >
|
|
4
|
+
会话回顾。完成重要任务或准备结束会话时使用。
|
|
5
|
+
引导回答三个反思问题,将经验沉淀到 CLAUDE.md,关闭进化闭环。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 会话回顾
|
|
9
|
+
|
|
10
|
+
## 步骤
|
|
11
|
+
|
|
12
|
+
1. **回顾本次会话**
|
|
13
|
+
快速扫描当前会话的对话历史,总结:
|
|
14
|
+
- 本次完成了哪些任务
|
|
15
|
+
- 过程中是否有需要纠正 AI 的地方
|
|
16
|
+
- 使用了哪些 Skills / 工具
|
|
17
|
+
|
|
18
|
+
2. **引导三个反思问题**
|
|
19
|
+
|
|
20
|
+
逐一向用户提问(使用 AskUserQuestion):
|
|
21
|
+
|
|
22
|
+
### Q1: AI 犯了什么错?
|
|
23
|
+
- 是否有需要反复纠正的问题
|
|
24
|
+
- 是否有生成了不准确/不一致的代码
|
|
25
|
+
- 是否有理解偏差
|
|
26
|
+
|
|
27
|
+
### Q2: 哪个 prompt 效果好?
|
|
28
|
+
- 哪条指令让 AI 一次到位
|
|
29
|
+
- 哪种描述方式最高效
|
|
30
|
+
- 是否有值得模板化的 prompt
|
|
31
|
+
|
|
32
|
+
### Q3: 需要更新 CLAUDE.md 吗?
|
|
33
|
+
- AI 犯的错是否需要写入 "常见陷阱"
|
|
34
|
+
- 好用的 prompt 是否需要固化为规则
|
|
35
|
+
- 是否发现了新的模式需要记录
|
|
36
|
+
|
|
37
|
+
3. **执行沉淀**
|
|
38
|
+
如果用户确认有需要沉淀的内容:
|
|
39
|
+
- 读取当前 CLAUDE.md
|
|
40
|
+
- 将新规则/陷阱追加到对应章节
|
|
41
|
+
- 展示 diff 让用户确认
|
|
42
|
+
|
|
43
|
+
4. **输出会话摘要**
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
## 会话回顾 [日期]
|
|
47
|
+
|
|
48
|
+
### 完成的任务
|
|
49
|
+
- [任务列表]
|
|
50
|
+
|
|
51
|
+
### 经验沉淀
|
|
52
|
+
- [新增到 CLAUDE.md 的规则,如果有]
|
|
53
|
+
- [记录的好 prompt,如果有]
|
|
54
|
+
|
|
55
|
+
### 待办
|
|
56
|
+
- [下次会话需要继续的事项,如果有]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
IMPORTANT:
|
|
60
|
+
- 不要自己编造答案,等用户回答每个问题
|
|
61
|
+
- 如果用户说没什么要沉淀的,尊重判断,不要强行凑内容
|
|
62
|
+
- 保持简短,不要把回顾变成负担
|
|
@@ -1,56 +1,273 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spec
|
|
3
3
|
description: >
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Produces a structured spec.md through Socratic questioning, as input for /plan.
|
|
4
|
+
需求分析与产品定义。当有新想法、新功能需求或业务需求需要正式化时使用。
|
|
5
|
+
通过苏格拉底提问挖掘真实需求,输出结构化的 spec.md,作为 /plan 的输入。
|
|
7
6
|
---
|
|
8
7
|
|
|
9
|
-
#
|
|
8
|
+
# 需求分析与产品定义
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
将模糊的想法转化为结构化、经过验证的产品规格文档 `spec.md`,作为后续技术设计(/plan)的输入。
|
|
12
11
|
|
|
13
|
-
##
|
|
12
|
+
## 步骤
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
2. **Socratic Questioning** — 5 Whys to find root problem + probe 3-5 key dimensions:
|
|
17
|
-
Clarification / Assumptions / Evidence / Perspectives / Implications / Meta-questions
|
|
18
|
-
3. **Clarity Scoring** — Rate requirement on 100-point scale:
|
|
19
|
-
Business Context /20, Functional Clarity /30, Technical Specificity /25, Scope /25.
|
|
20
|
-
Must reach ≥ 90 before proceeding.
|
|
21
|
-
4. **Strategy Exploration** — Compare 2-3 approaches (trade-offs, effort). User chooses.
|
|
22
|
-
5. **User Stories** — Given/When/Then acceptance criteria (happy path + errors + edge cases)
|
|
23
|
-
6. **Feature Breakdown** — Dependency graph + data model + API surface (when applicable)
|
|
24
|
-
7. **Multi-Perspective Review** — Engineer / User / Business viewpoints
|
|
25
|
-
8. **Generate spec.md** — Wait for user approval before proceeding to /plan
|
|
14
|
+
### Step 1: 捕获原始想法
|
|
26
15
|
|
|
27
|
-
|
|
16
|
+
让用户以任何形式表达想法 — 一句话、一段描述、一个竞品参考。不要过早施加结构。
|
|
28
17
|
|
|
29
|
-
|
|
30
|
-
- Background & root problem (5 Whys chain)
|
|
31
|
-
- Objectives & anti-goals
|
|
32
|
-
- Target users with pain level
|
|
33
|
-
- Strategy chosen with rationale
|
|
34
|
-
- User stories with acceptance criteria
|
|
35
|
-
- Feature dependency graph
|
|
36
|
-
- Data model & API surface (if applicable)
|
|
37
|
-
- Risks from multi-perspective review
|
|
38
|
-
- Scope boundaries (in/out)
|
|
39
|
-
- Success metrics
|
|
18
|
+
听完后用一句话复述确认:
|
|
40
19
|
|
|
41
|
-
|
|
20
|
+
> "如果我理解正确,你想要 [摘要]。是这样吗?"
|
|
42
21
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
22
|
+
### Step 2: 苏格拉底提问 — 挖掘真实需求
|
|
23
|
+
|
|
24
|
+
#### 5 Whys(追根溯源)
|
|
25
|
+
|
|
26
|
+
从表面需求开始连续追问"为什么",直到找到根本问题:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
用户:"我们需要一个通知系统"
|
|
30
|
+
→ Why? "用户会错过重要更新"
|
|
31
|
+
→ Why? "他们不经常打开应用"
|
|
32
|
+
→ Why? "没有理由回来,除非有变化"
|
|
33
|
+
→ Why? "我们没有主动触达用户的机制"
|
|
34
|
+
→ 根本需求:主动触达系统(通知只是方案之一)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
将根本问题呈现给用户,这常常会重新定义整个需求。
|
|
38
|
+
|
|
39
|
+
#### 6 维度探查(选 3-5 个最相关的问问题,分批进行,每批 2-3 个)
|
|
40
|
+
|
|
41
|
+
1. **澄清** — "你说的 [X] 具体指什么?能举个例子吗?"
|
|
42
|
+
2. **假设** — "我们在假设用户会 [Y],如果不是呢?"
|
|
43
|
+
3. **证据** — "什么数据/反馈表明这是真实问题?影响多少用户?"
|
|
44
|
+
4. **视角** — "新用户和老用户体验会有什么不同?"
|
|
45
|
+
5. **影响** — "如果不做这个,代价是什么?做了之后有什么连锁反应?"
|
|
46
|
+
6. **元问题** — "我们在解决正确的问题吗?有什么能让这个需求变得不必要?"
|
|
47
|
+
|
|
48
|
+
### Step 3: 清晰度评分
|
|
49
|
+
|
|
50
|
+
对话结束后,对需求进行 100 分制评估:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
Business Context /20 (问题清晰 /7, 目标用户 /7, 成功指标 /6)
|
|
54
|
+
Functional Clarity /30 (核心功能 /10, 用户流程 /10, 边界情况 /10)
|
|
55
|
+
Technical Specificity /25 (技术约束 /8, 集成点 /8, 性能需求 /9)
|
|
56
|
+
Scope Definition /25 (In-scope /10, Out-of-scope /8, 优先级 /7)
|
|
57
|
+
TOTAL /100
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
- **≥ 90**:进入 Step 4
|
|
61
|
+
- **70-89**:针对低分维度追问
|
|
62
|
+
- **< 70**:需要更多对话,回到 Step 2
|
|
63
|
+
|
|
64
|
+
向用户展示评分和具体差距,例如:"你的需求得分 75/100,边界情况(4/10)和性能需求(3/9)需要补充。"
|
|
65
|
+
|
|
66
|
+
**评分达到 ≥ 90 后才继续。**
|
|
67
|
+
|
|
68
|
+
### Step 4: 策略探索
|
|
69
|
+
|
|
70
|
+
不要直接跳到产品定义。先探索 2-3 种实现策略:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
策略 A: [名称 — 如"最小可行"]
|
|
74
|
+
核心方案:[做什么]
|
|
75
|
+
取舍:[得到什么 vs 放弃什么]
|
|
76
|
+
工作量:S/M/L/XL
|
|
77
|
+
|
|
78
|
+
策略 B: [名称 — 如"完整方案"]
|
|
79
|
+
...
|
|
80
|
+
|
|
81
|
+
策略 C: [名称 — 如"平台化"]
|
|
82
|
+
...
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
让用户选择、组合或提出新方向。
|
|
86
|
+
|
|
87
|
+
**何时跳过**:需求非常明确、方案空间很窄时(Bug 修复、合规要求、有明确规格的直接需求)。
|
|
88
|
+
|
|
89
|
+
### Step 5: 用户故事与验收标准
|
|
90
|
+
|
|
91
|
+
为每个核心功能编写用户故事和 Given/When/Then 验收标准:
|
|
92
|
+
|
|
93
|
+
```markdown
|
|
94
|
+
### Story [N]: [标题]
|
|
95
|
+
**As a** [用户], **I want to** [行为], **so that** [价值]
|
|
96
|
+
**Priority**: P0/P1/P2 | **Complexity**: S/M/L/XL
|
|
97
|
+
|
|
98
|
+
Acceptance Criteria:
|
|
99
|
+
Happy Path:
|
|
100
|
+
- [ ] Given [前提], when [操作], then [结果]
|
|
101
|
+
|
|
102
|
+
Validation:
|
|
103
|
+
- [ ] Given [无效输入], when [操作], then [具体错误处理]
|
|
104
|
+
|
|
105
|
+
Edge Cases:
|
|
106
|
+
- [ ] Given [边界条件], when [操作], then [行为]
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**要求**:
|
|
110
|
+
- 每条标准独立可测试
|
|
111
|
+
- 包含具体数值(不是"快速",而是"200ms 内响应")
|
|
112
|
+
- 覆盖正常路径、错误路径和边界情况
|
|
113
|
+
|
|
114
|
+
### Step 6: 特性分解与数据/API 设计
|
|
115
|
+
|
|
116
|
+
#### 特性依赖图
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
F1 [基础能力] ──→ F2 [核心功能] ──→ F4 [增强功能]
|
|
120
|
+
└──→ F3 [辅助功能] ──→ F5 [集成]
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
#### 数据模型(当涉及新数据实体时)
|
|
124
|
+
|
|
125
|
+
```markdown
|
|
126
|
+
### Entity: [Name]
|
|
127
|
+
| Field | Type | Constraints | Required | Default |
|
|
128
|
+
|-------|------|-------------|:--------:|---------|
|
|
129
|
+
| id | UUID | PK, auto | Yes | gen_random_uuid() |
|
|
130
|
+
| ... | ... | ... | ... | ... |
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### API 概要(当涉及新 API 时)
|
|
134
|
+
|
|
135
|
+
```markdown
|
|
136
|
+
| Method | Endpoint | Description | Auth | Request | Response |
|
|
137
|
+
|--------|----------|-------------|:----:|---------|----------|
|
|
138
|
+
| POST | /api/v1/... | ... | Yes | {...} | {...} |
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Step 7: 多视角审查
|
|
142
|
+
|
|
143
|
+
从三个视角审查,发现盲点:
|
|
144
|
+
|
|
145
|
+
- **工程视角**:技术可行性?最难的部分?有更简单的替代方案吗?
|
|
146
|
+
- **用户视角**:用户能理解这个功能吗?学习成本多高?
|
|
147
|
+
- **业务视角**:ROI 合理吗?和产品战略一致吗?
|
|
148
|
+
|
|
149
|
+
记录各视角的担忧,写入 spec.md 的风险章节。
|
|
150
|
+
|
|
151
|
+
### Step 8: 生成 spec.md
|
|
152
|
+
|
|
153
|
+
使用下方模板生成 `docs/spec.md`(或 `docs/[feature-name]-spec.md`)。
|
|
154
|
+
|
|
155
|
+
### Step 9: 等待确认
|
|
156
|
+
|
|
157
|
+
IMPORTANT:
|
|
158
|
+
- spec.md 输出后必须等待用户确认,不要自行开始技术设计。
|
|
159
|
+
- 下一步引导用户使用 `/plan` 进行技术方案设计。
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 输出模板
|
|
164
|
+
|
|
165
|
+
```markdown
|
|
166
|
+
# Spec: [项目/功能名称]
|
|
167
|
+
|
|
168
|
+
## Clarity Score: [X]/100
|
|
169
|
+
| Dimension | Score | Notes |
|
|
170
|
+
|-----------|:-----:|-------|
|
|
171
|
+
| Business Context | /20 | |
|
|
172
|
+
| Functional Clarity | /30 | |
|
|
173
|
+
| Technical Specificity | /25 | |
|
|
174
|
+
| Scope Definition | /25 | |
|
|
175
|
+
|
|
176
|
+
## 1. Background & Root Problem
|
|
177
|
+
|
|
178
|
+
### Surface Request
|
|
179
|
+
[用户最初提出的需求]
|
|
180
|
+
|
|
181
|
+
### Root Problem
|
|
182
|
+
[通过 5 Whys 发现的根本问题]
|
|
183
|
+
|
|
184
|
+
### Why Now
|
|
185
|
+
[触发因素 — 事故、反馈、市场变化、战略调整]
|
|
186
|
+
|
|
187
|
+
## 2. Objectives
|
|
188
|
+
- **Primary**: [主要目标 — 具体可衡量]
|
|
189
|
+
- **Secondary**: [次要目标]
|
|
190
|
+
- **Anti-Goals**: [明确不做的事]
|
|
191
|
+
|
|
192
|
+
## 3. Target Users
|
|
193
|
+
|
|
194
|
+
| Attribute | Description |
|
|
195
|
+
|-----------|-------------|
|
|
196
|
+
| Who | [角色/画像] |
|
|
197
|
+
| Context | [使用场景] |
|
|
198
|
+
| Current workaround | [现在怎么解决] |
|
|
199
|
+
| Pain level | [痛点程度] |
|
|
200
|
+
|
|
201
|
+
## 4. Strategy Chosen
|
|
202
|
+
[选择的策略及原因,备选策略简述]
|
|
203
|
+
|
|
204
|
+
## 5. User Stories & Acceptance Criteria
|
|
205
|
+
|
|
206
|
+
### Story 1: [Title]
|
|
207
|
+
**As a** ..., **I want to** ..., **so that** ...
|
|
208
|
+
**Priority**: P0 | **Complexity**: M
|
|
209
|
+
|
|
210
|
+
**Acceptance Criteria**:
|
|
211
|
+
- [ ] Given ..., when ..., then ...
|
|
212
|
+
(Happy path + Validation + Edge cases)
|
|
213
|
+
|
|
214
|
+
## 6. Feature Breakdown & Dependencies
|
|
215
|
+
|
|
216
|
+
| ID | Feature | Priority | Complexity | Dependencies | Stories |
|
|
217
|
+
|----|---------|----------|------------|--------------|---------|
|
|
218
|
+
| F1 | ... | P0 | M | None | S1, S2 |
|
|
219
|
+
|
|
220
|
+
### Dependency Graph
|
|
221
|
+
F1 ──→ F2
|
|
222
|
+
|
|
223
|
+
## 7. Data Model
|
|
224
|
+
[Entity tables with constraints — only if new data entities are involved]
|
|
225
|
+
|
|
226
|
+
## 8. API Surface
|
|
227
|
+
[Method / Endpoint / Description / Auth / Request / Response — only if new APIs are involved]
|
|
228
|
+
|
|
229
|
+
## 9. UI/UX Notes
|
|
230
|
+
- Loading / Empty / Error states
|
|
231
|
+
- Responsive / Accessibility requirements
|
|
232
|
+
|
|
233
|
+
## 10. Risks & Concerns
|
|
234
|
+
|
|
235
|
+
### Engineering
|
|
236
|
+
- [Concern]: [Mitigation]
|
|
237
|
+
|
|
238
|
+
### User Experience
|
|
239
|
+
- [Concern]: [Mitigation]
|
|
240
|
+
|
|
241
|
+
### Business
|
|
242
|
+
- [Concern]: [Mitigation]
|
|
243
|
+
|
|
244
|
+
## 11. Out of Scope
|
|
245
|
+
- [Item] — Reason: [why]
|
|
246
|
+
|
|
247
|
+
## 12. Open Questions
|
|
248
|
+
- [ ] [Question] — Owner: [who]
|
|
249
|
+
|
|
250
|
+
## 13. Success Metrics
|
|
251
|
+
| Metric | Current | Target | How to Measure |
|
|
252
|
+
|--------|---------|--------|----------------|
|
|
253
|
+
| ... | ... | ... | ... |
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
---
|
|
46
257
|
|
|
47
258
|
## Quality Gate
|
|
48
259
|
|
|
49
|
-
|
|
260
|
+
进入 /plan 前,以下条件必须满足:
|
|
50
261
|
- [ ] Clarity Score ≥ 90
|
|
51
|
-
- [ ]
|
|
52
|
-
- [ ]
|
|
53
|
-
- [ ] Scope
|
|
54
|
-
- [ ]
|
|
55
|
-
- [ ]
|
|
56
|
-
- [ ]
|
|
262
|
+
- [ ] 根本问题已识别(非表面需求)
|
|
263
|
+
- [ ] 至少 3 条用户故事,每条有 ≥ 3 个验收标准
|
|
264
|
+
- [ ] Scope 边界明确(In-scope AND Out-of-scope)
|
|
265
|
+
- [ ] 至少 2 个可衡量的成功指标
|
|
266
|
+
- [ ] 多视角审查已完成
|
|
267
|
+
- [ ] 用户已审阅并确认
|
|
268
|
+
|
|
269
|
+
## Tips
|
|
270
|
+
|
|
271
|
+
- **小功能不需要走这个流程** — 改动 < 3 文件的需求直接用 /plan
|
|
272
|
+
- **用户抗拒提问时** — 提供默认值让对方确认:"我先假设 X,你觉得不对再告诉我"
|
|
273
|
+
- **需求文档已有时** — 可以跳过 Step 1-2,直接从 Step 3 评分开始
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: takeover
|
|
3
|
+
description: >
|
|
4
|
+
接管现有项目。接手别人的项目或长期未维护的项目时使用。
|
|
5
|
+
全面分析代码库,生成 CLAUDE.md 和体系配置。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 接管现有项目
|
|
9
|
+
|
|
10
|
+
## 步骤
|
|
11
|
+
|
|
12
|
+
1. **全局扫描**
|
|
13
|
+
使用 Explore Agent 遍历项目结构,理解:
|
|
14
|
+
- 目录组织和架构模式
|
|
15
|
+
- 核心模块之间的依赖关系
|
|
16
|
+
- 数据流向(前端 → API → 服务层 → 数据库)
|
|
17
|
+
- 外部依赖和第三方集成
|
|
18
|
+
|
|
19
|
+
2. **文档盘点**
|
|
20
|
+
逐项检查现有文档的存在性和新鲜度:
|
|
21
|
+
- README、CLAUDE.md、API 文档、Schema 文档、CHANGELOG 等
|
|
22
|
+
- 标注状态:**Current**(与代码匹配)/ **Stale**(明显落后)/ **Outdated**(严重不匹配)
|
|
23
|
+
- 缺失的关键文档标注为生成候选
|
|
24
|
+
|
|
25
|
+
3. **技术栈识别**
|
|
26
|
+
从配置文件提取:
|
|
27
|
+
- package.json → 框架、库、scripts
|
|
28
|
+
- tsconfig.json → TypeScript 配置
|
|
29
|
+
- .eslintrc / prettier → 代码风格
|
|
30
|
+
- docker-compose / Dockerfile → 部署方式
|
|
31
|
+
- prisma/schema.prisma → 数据模型
|
|
32
|
+
|
|
33
|
+
4. **代码质量快照**
|
|
34
|
+
快速评估:
|
|
35
|
+
- 测试覆盖现状(有测试的模块 vs 没有的)
|
|
36
|
+
- 代码风格一致性
|
|
37
|
+
- TODO/FIXME/HACK 数量
|
|
38
|
+
- 超长文件和复杂函数
|
|
39
|
+
|
|
40
|
+
5. **生成配置**
|
|
41
|
+
基于分析结果生成:
|
|
42
|
+
- CLAUDE.md — 项目描述、命令、架构、关键规则
|
|
43
|
+
- .claude/settings.json — 权限配置
|
|
44
|
+
- docs/approved-deps.md — 从现有依赖生成白名单
|
|
45
|
+
|
|
46
|
+
6. **输出分析报告**
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
## 项目分析报告
|
|
50
|
+
|
|
51
|
+
### 技术栈
|
|
52
|
+
[框架、语言、数据库、部署方式]
|
|
53
|
+
|
|
54
|
+
### 架构概览
|
|
55
|
+
[核心模块及其关系]
|
|
56
|
+
|
|
57
|
+
### 代码健康度
|
|
58
|
+
[测试覆盖、代码质量、技术债评估]
|
|
59
|
+
|
|
60
|
+
### 风险区域
|
|
61
|
+
[缺少测试的关键模块、潜在安全问题、过度耦合]
|
|
62
|
+
|
|
63
|
+
### 建议的首要改进
|
|
64
|
+
1. [优先级1]
|
|
65
|
+
2. [优先级2]
|
|
66
|
+
3. [优先级3]
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
IMPORTANT:
|
|
70
|
+
- 生成的配置是草稿,提醒用户必须审阅
|
|
71
|
+
- 不要编造项目中不存在的内容
|
|
72
|
+
- 对推断内容标注置信度:[HIGH] / [MEDIUM] / [LOW]
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test
|
|
3
|
+
description: >
|
|
4
|
+
测试生成与验证。新功能完成后或修复 Bug 时使用。
|
|
5
|
+
根据代码生成单元测试和集成测试,执行并验证结果。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 测试生成与验证
|
|
9
|
+
|
|
10
|
+
## 步骤
|
|
11
|
+
|
|
12
|
+
1. **确定测试范围**
|
|
13
|
+
- 读取最近变更:`git diff --name-only`
|
|
14
|
+
- 识别需要测试的模块(Service 函数、API Route)
|
|
15
|
+
- 检查是否已有测试文件
|
|
16
|
+
|
|
17
|
+
2. **生成测试用例**
|
|
18
|
+
|
|
19
|
+
对每个目标模块,生成三类测试:
|
|
20
|
+
|
|
21
|
+
a) **正常路径** — 标准输入产生正确输出
|
|
22
|
+
b) **边界条件** — 空值、极大值、空数组、特殊字符
|
|
23
|
+
c) **错误路径** — 无效输入、依赖服务失败、权限不足
|
|
24
|
+
|
|
25
|
+
Bug 修复额外要求:
|
|
26
|
+
d) **回归测试** — 精确复现 Bug 的测试用例
|
|
27
|
+
|
|
28
|
+
3. **执行测试**
|
|
29
|
+
```
|
|
30
|
+
npm run test # 全量单元测试
|
|
31
|
+
npm run test -- --run [文件] # 指定文件
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
4. **验证结果**
|
|
35
|
+
- 全部通过 → 报告覆盖的场景清单
|
|
36
|
+
- 有失败 → 分析是测试写错了还是代码有 Bug
|
|
37
|
+
|
|
38
|
+
IMPORTANT:
|
|
39
|
+
- 测试代码基于**接口合同**写,不基于内部实现
|
|
40
|
+
- 不要写验证实现细节的测试(如"调用了某个内部方法 3 次")
|
|
41
|
+
- Bug 修复必须有回归测试,这是不可跳过的
|
|
42
|
+
- 如果发现现有代码没有测试,先补测试再改代码
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-page
|
|
3
|
+
description: >
|
|
4
|
+
快速生成 UI 页面骨架。新增页面时使用。
|
|
5
|
+
用 shadcn/ui 默认样式,功能优先不美化。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 快速 UI 页面生成
|
|
9
|
+
|
|
10
|
+
生成页面 "$ARGUMENTS":
|
|
11
|
+
|
|
12
|
+
## 规则
|
|
13
|
+
- 使用 shadcn/ui 组件,不自定义样式
|
|
14
|
+
- 使用项目现有的 layout 结构
|
|
15
|
+
- 列表用 Table,表单用 Form + zod,弹窗用 Dialog
|
|
16
|
+
- 必须处理三种状态:加载中(Skeleton)、空数据、错误
|
|
17
|
+
- 必须连接真实 API,不用 mock 数据
|
|
18
|
+
- 不做样式美化
|
|
19
|
+
|
|
20
|
+
## 页面类型速查
|
|
21
|
+
|
|
22
|
+
| 类型 | 组件组合 |
|
|
23
|
+
|------|---------|
|
|
24
|
+
| 列表页 | Table + Pagination + 搜索 Input + 新增 Button |
|
|
25
|
+
| 详情页 | Card + Tabs + 返回 Button |
|
|
26
|
+
| 表单页 | Form + zod schema + Submit Button + Toast |
|
|
27
|
+
| 仪表盘 | Card 网格 + 数字统计 |
|
|
28
|
+
|
|
29
|
+
## 步骤
|
|
30
|
+
|
|
31
|
+
1. 确认页面类型和数据来源(API 接口)
|
|
32
|
+
2. 检查 shadcn/ui 是否已安装需要的组件,未安装则先安装
|
|
33
|
+
3. 生成页面组件 + 对应的 API Route(如果还没有)
|
|
34
|
+
4. 跑通数据流,验证功能正确
|
|
35
|
+
|
|
36
|
+
IMPORTANT:功能优先。不要花时间在颜色、间距、动画上。
|