claude-sdlc 1.4.1 → 1.4.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/package.json +1 -1
- package/template/.claude/hooks/pre-compact.sh +1 -1
- package/template/.claude/hooks/session-start.sh +13 -5
- package/template/.claude/project-state.md +25 -4
- package/template/.claude/rules/01-lifecycle-phases.md +3 -1
- package/template/.claude/rules/05-anti-amnesia.md +3 -3
- package/template/CLAUDE.md +2 -1
package/package.json
CHANGED
|
@@ -23,6 +23,6 @@ WARNINGS=""
|
|
|
23
23
|
[ -z "$KC" ] && WARNINGS="key_context 为空!"
|
|
24
24
|
[ "${HAS_LU:-0}" -eq 0 ] && WARNINGS="${WARNINGS} last_updated 未设置。"
|
|
25
25
|
|
|
26
|
-
CONTEXT="[SDLC 压缩前紧急保存] 上下文即将被压缩!阶段=${PHASE},任务=${TASK},PRD ${PRD_COUNT:-0}条,已修改${FILES_COUNT:-0}个文件。${WARNINGS}请立即用 Edit 更新 project-state.md:(1) 确认 modified_files 列表完整 (2) 将当前工作摘要写入 key_context (3) 更新 last_updated
|
|
26
|
+
CONTEXT="[SDLC 压缩前紧急保存] 上下文即将被压缩!阶段=${PHASE},任务=${TASK},PRD ${PRD_COUNT:-0}条,已修改${FILES_COUNT:-0}个文件。${WARNINGS}请立即用 Edit 更新 project-state.md:(1) 确认 modified_files 列表完整 (2) 将当前工作摘要写入 key_context (3) 更新 last_updated (4) 确认 project_roadmap 和 global_architecture 已记录(如有长期规划)。压缩后早期对话将丢失,这是最后保存机会。"
|
|
27
27
|
|
|
28
28
|
printf '{"hookSpecificOutput":{"hookEventName":"PreCompact","additionalContext":"%s"}}' "$CONTEXT"
|
|
@@ -20,22 +20,30 @@ eval "$(awk '
|
|
|
20
20
|
/^task_description:/ { sub(/^task_description:[[:space:]]*"?/,""); sub(/"$/,""); task=$0 }
|
|
21
21
|
/^modified_files:/,/^[a-z]/ { if(/^\s*-\s/) fc++ }
|
|
22
22
|
/^key_context:/ { sub(/^key_context:[[:space:]]*"?/,""); sub(/"$/,""); kc=$0 }
|
|
23
|
+
/^project_roadmap:/ { sub(/^project_roadmap:[[:space:]]*"?/,""); sub(/"$/,""); rm=$0 }
|
|
24
|
+
/^completed_tasks:/,/^[a-z]/ { if(/^\s*-\s*task:/) ct++ }
|
|
23
25
|
END {
|
|
24
26
|
gsub(/["\\]/,"",task)
|
|
25
27
|
gsub(/["\\]/,"",kc)
|
|
26
|
-
|
|
28
|
+
gsub(/["\\]/,"",rm)
|
|
29
|
+
printf "PHASE=%s\nTASK=%s\nFILES_COUNT=%d\nKEY_CTX=%s\nROADMAP=%s\nCOMPLETED=%d\n", phase, task, fc, kc, rm, ct
|
|
27
30
|
}
|
|
28
31
|
' "$STATE_FILE" 2>/dev/null)"
|
|
29
32
|
|
|
33
|
+
# 构建持久化上下文提示
|
|
34
|
+
PERSIST=""
|
|
35
|
+
[ -n "$ROADMAP" ] && PERSIST="有长期规划(project_roadmap),"
|
|
36
|
+
[ "${COMPLETED:-0}" -gt 0 ] && PERSIST="${PERSIST}已完成${COMPLETED}个任务,"
|
|
37
|
+
|
|
30
38
|
# 构建上下文信息(根据 source 定制)
|
|
31
39
|
if [ "$PHASE" = "P0" ] || [ -z "$PHASE" ]; then
|
|
32
|
-
CONTEXT="SDLC 状态:P0
|
|
40
|
+
CONTEXT="SDLC 状态:P0(等待新任务)。${PERSIST}用户提出开发请求后自动进入 P1。请先 Read .claude/project-state.md 了解已有规划和历史。"
|
|
33
41
|
elif [ "$SOURCE" = "compact" ]; then
|
|
34
|
-
CONTEXT="SDLC 压缩恢复:阶段=${PHASE},任务=${TASK},已修改${FILES_COUNT:-0}
|
|
42
|
+
CONTEXT="SDLC 压缩恢复:阶段=${PHASE},任务=${TASK},已修改${FILES_COUNT:-0}个文件。${PERSIST}关键上下文=${KEY_CTX}。请用 Read 读取 .claude/project-state.md 获取完整状态(特别是 project_roadmap 和 completed_tasks),然后继续工作。注意:压缩前的对话已丢失,依赖 project-state.md 恢复。"
|
|
35
43
|
elif [ "$SOURCE" = "resume" ]; then
|
|
36
|
-
CONTEXT="SDLC 会话恢复:阶段=${PHASE},任务=${TASK},已修改${FILES_COUNT:-0}
|
|
44
|
+
CONTEXT="SDLC 会话恢复:阶段=${PHASE},任务=${TASK},已修改${FILES_COUNT:-0}个文件。${PERSIST}请用 Read 读取 .claude/project-state.md 确认状态后继续工作。"
|
|
37
45
|
else
|
|
38
|
-
CONTEXT="SDLC 状态恢复:阶段=${PHASE},任务=${TASK},已修改${FILES_COUNT:-0}
|
|
46
|
+
CONTEXT="SDLC 状态恢复:阶段=${PHASE},任务=${TASK},已修改${FILES_COUNT:-0}个文件。${PERSIST}请用 Read 读取 .claude/project-state.md 获取完整状态,然后继续工作。"
|
|
39
47
|
fi
|
|
40
48
|
|
|
41
49
|
# 通过 $CLAUDE_ENV_FILE 导出环境变量(仅 SessionStart 支持)
|
|
@@ -5,7 +5,12 @@
|
|
|
5
5
|
> 升级 claude-sdlc 时本文件不会被覆盖。
|
|
6
6
|
|
|
7
7
|
```yaml
|
|
8
|
-
# ===
|
|
8
|
+
# === 项目级别(跨任务持久化,任务重置时 ⚠️ 绝不清除) ===
|
|
9
|
+
project_roadmap: "" # 长期规划/里程碑/多阶段计划,任务重置时必须保留
|
|
10
|
+
completed_tasks: [] # 已完成任务归档(每条含 task/prd_summary/architecture/files)
|
|
11
|
+
global_architecture: [] # 跨任务的全局架构决策(技术选型、目录结构等)
|
|
12
|
+
|
|
13
|
+
# === 当前任务(任务重置时清除并归档到 completed_tasks) ===
|
|
9
14
|
current_phase: P0 # P0=未开始, P1=需求, P2=设计, P3=编码, P4=测试, P5=审查, P6=部署
|
|
10
15
|
task_description: ""
|
|
11
16
|
started_at: ""
|
|
@@ -29,14 +34,30 @@ key_context: "" # compaction 后恢复用
|
|
|
29
34
|
|
|
30
35
|
| 事件 | 更新字段 |
|
|
31
36
|
|------|---------|
|
|
32
|
-
| 新任务 | `current_phase`→P1, `task_description`, `started_at` |
|
|
37
|
+
| 新任务 | **归档旧任务到 `completed_tasks`** → 重置当前任务字段 → `current_phase`→P1, `task_description`, `started_at`。**`project_roadmap`/`completed_tasks`/`global_architecture` 绝不重置** |
|
|
33
38
|
| PRD 确认 | `prd`(编号化需求列表,此后为唯一依据) |
|
|
34
39
|
| 阶段推进 | `current_phase`, `phase_history`, `review_retry_count`→0, `last_updated` |
|
|
35
40
|
| 文件修改 | `modified_files`(追加路径), `last_updated` |
|
|
36
|
-
| 架构决策 | `architecture_decisions`, `last_updated` |
|
|
41
|
+
| 架构决策 | `architecture_decisions`(当前任务)+ 通用决策同步到 `global_architecture`, `last_updated` |
|
|
42
|
+
| 长期规划 | `project_roadmap`(用户确认的里程碑/多阶段计划) |
|
|
37
43
|
| 审查重试 | `review_retry_count`+1, `last_updated` |
|
|
38
44
|
| 即将压缩 | 所有字段确认最新, `key_context`(写入当前工作摘要) |
|
|
39
45
|
|
|
46
|
+
### 任务重置规则(关键)
|
|
47
|
+
|
|
48
|
+
新任务开始时:
|
|
49
|
+
|
|
50
|
+
1. **归档**:将当前任务摘要写入 `completed_tasks`:
|
|
51
|
+
```yaml
|
|
52
|
+
- task: "旧任务描述"
|
|
53
|
+
prd_summary: "R1:xx, R2:xx"
|
|
54
|
+
key_decisions: "关键架构决策"
|
|
55
|
+
files: ["file1.ts", "file2.ts"]
|
|
56
|
+
completed_at: "2024-01-01"
|
|
57
|
+
```
|
|
58
|
+
2. **重置**:清空 `current_phase`/`task_description`/`prd`/`architecture_decisions`/`modified_files`/`todo_items`/`review_retry_count`/`phase_history`/`key_context`
|
|
59
|
+
3. **保留**:`project_roadmap`、`completed_tasks`、`global_architecture` **绝不清除**
|
|
60
|
+
|
|
40
61
|
# Compact Instructions
|
|
41
62
|
|
|
42
|
-
压缩时必须保留:(1) 本文件路径和存在性 (2) 上方 YAML
|
|
63
|
+
压缩时必须保留:(1) 本文件路径和存在性 (2) 上方 YAML 块完整内容(含项目级别和当前任务两部分) (3) project_roadmap 和 completed_tasks 和 global_architecture (4) 当前阶段和任务 (5) 已修改文件列表 (6) 用户最近指令。恢复后:P1/P2 等待用户确认继续,P3-P6 自动恢复自动驱动继续完成。
|
|
@@ -7,11 +7,13 @@
|
|
|
7
7
|
## P1 — 需求分析
|
|
8
8
|
|
|
9
9
|
### 阶段活动
|
|
10
|
+
- **检查 `project_roadmap` 和 `completed_tasks`** — 了解长期规划和已完成的工作,确保新任务与整体规划一致
|
|
10
11
|
- 理解用户需求,逐条澄清,消除模糊点
|
|
11
|
-
- 分析现有代码库(Read, Glob, Grep
|
|
12
|
+
- 分析现有代码库(Read, Glob, Grep),参考 `global_architecture` 中的全局架构决策
|
|
12
13
|
- 识别技术约束、依赖关系和影响范围
|
|
13
14
|
- 搜索相关文档和最佳实践(WebSearch, WebFetch)
|
|
14
15
|
- **整理编号化 PRD 需求清单,提交给用户确认**
|
|
16
|
+
- 如用户提供了多阶段计划,写入 `project_roadmap`
|
|
15
17
|
|
|
16
18
|
### 必需产出物
|
|
17
19
|
- PRD(每条需求有编号 R1/R2...、验收标准、范围排除项)
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
| 长对话漂移 | 渐忘规范 | UserPromptSubmit 每次注入 + Stop 回复后自检 |
|
|
13
13
|
| Context Compaction | 早期对话丢失 | PreCompact 保存状态 → SessionStart 恢复注入 |
|
|
14
14
|
| 用户催促跳过 | 放弃规范 | Hooks 硬拦截 + Permissions 声明式 deny |
|
|
15
|
-
| 新任务覆盖 |
|
|
15
|
+
| 新任务覆盖 | 长期规划丢失 | 归档到 completed_tasks → 仅重置任务字段 → project_roadmap/completed_tasks/global_architecture 永不重置 |
|
|
16
16
|
| Claude 自行跳过 | 认为不需要流程 | CLAUDE.md 明确要求 |
|
|
17
17
|
| 子 Agent 脱离 | 不知 SDLC 上下文 | SubagentStart hook 注入阶段+PRD+工具限制 |
|
|
18
18
|
| 子任务不合规 | 代码不符 PRD | TaskCompleted hook 提醒验证 |
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
| 用户要求跳过流程 | 说明风险 → 用户确认 → 记录 phase_history → 强制推进 |
|
|
72
72
|
| 审查未通过 | 自动修复重试(最多3次)→ 仍失败则停下请求用户帮助 |
|
|
73
73
|
| 多次审查失败 | 停止自动驱动 → 报告问题 → 等待用户指导 |
|
|
74
|
-
| 新任务 |
|
|
74
|
+
| 新任务 | 归档旧任务到 `completed_tasks` → 仅重置任务字段 → 保留 `project_roadmap`/`completed_tasks`/`global_architecture` → 新 P1 参考已有规划 |
|
|
75
75
|
|
|
76
76
|
---
|
|
77
77
|
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
4. 【状态】project-state.md 最新吗?
|
|
85
85
|
|
|
86
86
|
**深度自检(阶段转换 / compaction 后 / /status 时)**:
|
|
87
|
-
Read project-state.md → 逐项确认 phase/task/modified_files/architecture_decisions/todo_items/phase_history → 有异常向用户报告。
|
|
87
|
+
Read project-state.md → 逐项确认 phase/task/modified_files/architecture_decisions/todo_items/phase_history/**project_roadmap**/**completed_tasks**/**global_architecture** → 有异常向用户报告。
|
|
88
88
|
|
|
89
89
|
**疑问时**:不猜测,Read `.claude/project-state.md`。
|
|
90
90
|
|
package/template/CLAUDE.md
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
- **严格按 PRD 开发**:每行代码对应 PRD 哪条需求?答不上来就不写。禁止增减 PRD 外内容
|
|
16
16
|
- **六阶段顺序执行**:P1需求→P2设计→P3编码→P4测试→P5审查→P6交付,每阶段须 `/review` 通过才可推进
|
|
17
17
|
- **自动驱动**:P1/P2 需用户确认,P3-P6 全自动。审查未通过自动修复(最多3次)
|
|
18
|
-
- **任务自动识别**:用户说"实现/修复/重构..." → 自动进入 P1。旧任务完成后新请求 →
|
|
18
|
+
- **任务自动识别**:用户说"实现/修复/重构..." → 自动进入 P1。旧任务完成后新请求 → 归档到 `completed_tasks` + 重置任务字段 + 新 P1。**`project_roadmap`/`completed_tasks`/`global_architecture` 永不重置**
|
|
19
19
|
|
|
20
20
|
## P2/P3 必须先调研
|
|
21
21
|
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
2. 要做的事对应 PRD 哪条?
|
|
28
28
|
3. 操作在当前阶段允许吗?
|
|
29
29
|
4. `.claude/project-state.md` 更新了吗?
|
|
30
|
+
5. 有 `project_roadmap` 吗?当前任务在整体规划中的位置?
|
|
30
31
|
|
|
31
32
|
有疑问 → Read `.claude/project-state.md`,不依赖记忆。
|
|
32
33
|
|