speccrew 0.1.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.
- package/.speccrew/agents/speccrew-feature-designer.md +142 -0
- package/.speccrew/agents/speccrew-product-manager.md +61 -0
- package/.speccrew/agents/speccrew-system-designer.md +200 -0
- package/.speccrew/agents/speccrew-system-developer.md +238 -0
- package/.speccrew/agents/speccrew-task-worker.md +80 -0
- package/.speccrew/agents/speccrew-team-leader.md +92 -0
- package/.speccrew/agents/speccrew-test-manager.md +313 -0
- package/.speccrew/skills/speccrew-create-agents/SKILL.md +98 -0
- package/.speccrew/skills/speccrew-create-agents/templates/agents/designer-agent.md +54 -0
- package/.speccrew/skills/speccrew-create-agents/templates/agents/dev-agent.md +79 -0
- package/.speccrew/skills/speccrew-create-agents/templates/agents/test-agent.md +80 -0
- package/.speccrew/skills/speccrew-dev-backend/SKILL.md +205 -0
- package/.speccrew/skills/speccrew-dev-backend/templates/TASK-RECORD-TEMPLATE.md +118 -0
- package/.speccrew/skills/speccrew-dev-desktop/SKILL.md +258 -0
- package/.speccrew/skills/speccrew-dev-desktop/templates/TASK-RECORD-TEMPLATE.md +161 -0
- package/.speccrew/skills/speccrew-dev-frontend/SKILL.md +202 -0
- package/.speccrew/skills/speccrew-dev-frontend/templates/TASK-RECORD-TEMPLATE.md +115 -0
- package/.speccrew/skills/speccrew-dev-mobile/SKILL.md +200 -0
- package/.speccrew/skills/speccrew-dev-mobile/templates/TASK-RECORD-TEMPLATE.md +125 -0
- package/.speccrew/skills/speccrew-fd-api-contract/SKILL.md +73 -0
- package/.speccrew/skills/speccrew-fd-api-contract/templates/API-CONTRACT-TEMPLATE.md +96 -0
- package/.speccrew/skills/speccrew-fd-feature-design/SKILL.md +395 -0
- package/.speccrew/skills/speccrew-fd-feature-design/templates/FEATURE-SPEC-TEMPLATE.md +387 -0
- package/.speccrew/skills/speccrew-get-timestamp/SKILL.md +80 -0
- package/.speccrew/skills/speccrew-get-timestamp/scripts/get-timestamp.js +35 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/SKILL.md +1116 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-FASTAPI.md +462 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-JAVA.md +480 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-NET.md +464 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE.md +480 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/MODULE-OVERVIEW-TEMPLATE.md +367 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/SKILL.md +667 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/STATUS-FORMATS.md +74 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/batch-orchestrator.js +176 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/get-next-batch.js +150 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/get-pending-features.js +106 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/mark-stale.js +249 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/process-batch-results.js +848 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/update-feature-status.js +226 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-init-features/SKILL.md +264 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-init-features/examples/features.json +34 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-init-features/scripts/generate-inventory.js +867 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-init-features/scripts/test-inventory.js +26 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/SKILL.md +165 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/scripts/apply-module-mapping.js +208 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/scripts/extract-module-summary.js +180 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/scripts/reindex-modules.js +358 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/SKILL.md +1055 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-DESKTOP.md +303 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-ELECTRON.md +327 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MINIAPP.md +292 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MOBILE.md +281 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI.md +324 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/SKILL.md +270 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/templates/COMPONENT-PATTERN-TEMPLATE.md +33 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/templates/LAYOUT-PATTERN-TEMPLATE.md +33 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/templates/PAGE-TYPE-TEMPLATE.md +33 -0
- package/.speccrew/skills/speccrew-knowledge-graph-query/SKILL.md +229 -0
- package/.speccrew/skills/speccrew-knowledge-graph-query/scripts/graph-query.js +549 -0
- package/.speccrew/skills/speccrew-knowledge-graph-write/SKILL.md +181 -0
- package/.speccrew/skills/speccrew-knowledge-graph-write/scripts/graph-write.js +651 -0
- package/.speccrew/skills/speccrew-knowledge-module-summarize/SKILL.md +305 -0
- package/.speccrew/skills/speccrew-knowledge-module-summarize/templates/MODULE-OVERVIEW-TEMPLATE.md +400 -0
- package/.speccrew/skills/speccrew-knowledge-system-summarize/SKILL.md +351 -0
- package/.speccrew/skills/speccrew-knowledge-system-summarize/templates/SYSTEM-OVERVIEW-TEMPLATE.md +294 -0
- package/.speccrew/skills/speccrew-knowledge-techs-dispatch/SKILL.md +683 -0
- package/.speccrew/skills/speccrew-knowledge-techs-dispatch/STATUS-FORMATS.md +550 -0
- package/.speccrew/skills/speccrew-knowledge-techs-dispatch/templates/techs-manifest-EXAMPLE.json +35 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/SKILL.md +1087 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/ARCHITECTURE-TEMPLATE.md +240 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/COLOR-SYSTEM-TEMPLATE.md +68 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/COMPONENT-LIBRARY-TEMPLATE.md +86 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-BUILD-TEMPLATE.md +466 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-DATA-TEMPLATE.md +432 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-DESIGN-TEMPLATE.md +1209 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-DEV-TEMPLATE.md +1433 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-SYSTEM-TEST-TEMPLATE.md +1052 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-UNIT-TEST-TEMPLATE.md +946 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/INDEX-TEMPLATE.md +29 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/PAGE-LAYOUTS-TEMPLATE.md +69 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/PAGE-TYPE-SUMMARY-TEMPLATE.md +74 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/TECH-STACK-TEMPLATE.md +232 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate-conventions/SKILL.md +628 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate-ui-style/SKILL.md +392 -0
- package/.speccrew/skills/speccrew-knowledge-techs-index/SKILL.md +489 -0
- package/.speccrew/skills/speccrew-knowledge-techs-index/templates/INDEX-TEMPLATE.md +243 -0
- package/.speccrew/skills/speccrew-knowledge-techs-init/SKILL.md +269 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/SKILL.md +562 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/BUSINESS-COMPONENTS-TEMPLATE.md +171 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/COMMON-COMPONENTS-TEMPLATE.md +177 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/COMPONENT-INDIVIDUAL-TEMPLATE.md +80 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/COMPONENT-LIBRARY-TEMPLATE.md +118 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/LAYOUT-INDIVIDUAL-TEMPLATE.md +97 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/LAYOUT-PATTERNS-TEMPLATE.md +208 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/NAVIGATION-PATTERNS-TEMPLATE.md +157 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/PAGE-TYPE-INDIVIDUAL-TEMPLATE.md +123 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/PAGE-TYPE-SUMMARY-TEMPLATE.md +58 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/SPACING-TEMPLATE.md +119 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/STYLE-SYSTEM-TEMPLATE.md +117 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/TYPOGRAPHY-TEMPLATE.md +107 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/UI-STYLE-GUIDE-TEMPLATE.md +171 -0
- package/.speccrew/skills/speccrew-pm-requirement-analysis/SKILL.md +434 -0
- package/.speccrew/skills/speccrew-pm-requirement-analysis/templates/BIZS-MODELING-TEMPLATE.md +332 -0
- package/.speccrew/skills/speccrew-pm-requirement-analysis/templates/PRD-TEMPLATE.md +200 -0
- package/.speccrew/skills/speccrew-pm-requirement-assess/SKILL.md +195 -0
- package/.speccrew/skills/speccrew-project-diagnosis/SKILL.md +208 -0
- package/.speccrew/skills/speccrew-project-diagnosis/templates/DIAGNOSIS-REPORT-TEMPLATE.md +202 -0
- package/.speccrew/skills/speccrew-sd-backend/SKILL.md +188 -0
- package/.speccrew/skills/speccrew-sd-backend/templates/INDEX-TEMPLATE.md +85 -0
- package/.speccrew/skills/speccrew-sd-backend/templates/SD-BACKEND-TEMPLATE.md +269 -0
- package/.speccrew/skills/speccrew-sd-desktop/SKILL.md +192 -0
- package/.speccrew/skills/speccrew-sd-desktop/templates/INDEX-TEMPLATE.md +271 -0
- package/.speccrew/skills/speccrew-sd-desktop/templates/SD-DESKTOP-TEMPLATE.md +673 -0
- package/.speccrew/skills/speccrew-sd-frontend/SKILL.md +176 -0
- package/.speccrew/skills/speccrew-sd-frontend/templates/INDEX-TEMPLATE.md +184 -0
- package/.speccrew/skills/speccrew-sd-frontend/templates/SD-FRONTEND-TEMPLATE.md +382 -0
- package/.speccrew/skills/speccrew-sd-mobile/SKILL.md +189 -0
- package/.speccrew/skills/speccrew-sd-mobile/templates/INDEX-TEMPLATE.md +219 -0
- package/.speccrew/skills/speccrew-sd-mobile/templates/SD-MOBILE-TEMPLATE.md +534 -0
- package/.speccrew/skills/speccrew-test-case-design/SKILL.md +284 -0
- package/.speccrew/skills/speccrew-test-case-design/templates/TEST-CASE-DESIGN-TEMPLATE.md +263 -0
- package/.speccrew/skills/speccrew-test-code-gen/SKILL.md +313 -0
- package/.speccrew/skills/speccrew-test-code-gen/templates/TEST-CODE-PLAN-TEMPLATE.md +180 -0
- package/.speccrew/skills/speccrew-test-execute/SKILL.md +283 -0
- package/.speccrew/skills/speccrew-test-execute/templates/BUG-REPORT-TEMPLATE.md +50 -0
- package/.speccrew/skills/speccrew-test-execute/templates/TEST-REPORT-TEMPLATE.md +57 -0
- package/.speccrew/skills/speccrew-workflow-diagnose/SKILL.md +155 -0
- package/LICENSE +21 -0
- package/README.ar.md +318 -0
- package/README.en.md +318 -0
- package/README.es.md +318 -0
- package/README.md +340 -0
- package/bin/cli.js +62 -0
- package/lib/commands/doctor.js +138 -0
- package/lib/commands/init.js +231 -0
- package/lib/commands/list.js +114 -0
- package/lib/commands/uninstall.js +117 -0
- package/lib/commands/update.js +351 -0
- package/lib/ide-adapters.js +73 -0
- package/lib/utils.js +104 -0
- package/package.json +28 -0
- package/workspace-template/docs/configs/document-templates.json +667 -0
- package/workspace-template/docs/configs/platform-mapping.json +194 -0
- package/workspace-template/docs/configs/tech-stack-mappings.json +313 -0
- package/workspace-template/docs/configs/validation-rules.json +87 -0
- package/workspace-template/docs/rules/mermaid-rule.md +114 -0
- package/workspace-template/docs/solutions/Agent/346/212/200/350/203/275/345/256/232/344/271/211+/351/234/200/346/261/202/346/226/207/346/241/243+UML/344/275/277/347/224/250/346/250/241/346/235/277/357/274/210ISA-95/345/205/255/346/256/265/345/274/217/350/236/215/345/220/210/347/211/210/357/274/211.md +586 -0
- package/workspace-template/docs/solutions/agent-knowledge-map.md +238 -0
- package/workspace-template/docs/solutions/bizs-knowledge-pipeline.md +678 -0
- package/workspace-template/docs/solutions/harness.md +410 -0
- package/workspace-template/docs/solutions/knowledge-incremental-sync-spec.md +943 -0
- package/workspace-template/docs/solutions/techs-knowledge-pipeline.md +803 -0
- package/workspace-template/docs/solutions/workspace-structure.md +318 -0
|
@@ -0,0 +1,943 @@
|
|
|
1
|
+
# 知识库增量同步方案(Git-based Incremental Sync)
|
|
2
|
+
|
|
3
|
+
> **Purpose**: 定义基于 Git 版本比较的知识库(Bizs & Techs)增量同步机制
|
|
4
|
+
> **Last Updated**: 2025-03
|
|
5
|
+
> **Related Skills**: `speccrew-knowledge-dispatch`
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. 架构概述
|
|
10
|
+
|
|
11
|
+
本方案定义了基于 Git 版本比较的知识库增量同步机制,支持业务知识(Bizs)和技术知识(Techs)的自动更新。
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
15
|
+
│ Git-based Incremental Sync Architecture │
|
|
16
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
17
|
+
│ │
|
|
18
|
+
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
19
|
+
│ │ Git Hook │ │ Manual │ │ Scheduled │ │
|
|
20
|
+
│ │ (自动) │ │ (手动) │ │ (定时) │ │
|
|
21
|
+
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
|
|
22
|
+
│ └──────────────────┼──────────────────┘ │
|
|
23
|
+
│ ▼ │
|
|
24
|
+
│ ┌─────────────────────────────────────────────────────────┐ │
|
|
25
|
+
│ │ Sync Dispatcher (统一入口) │ │
|
|
26
|
+
│ │ ┌─────────────────────────────────────────────────┐ │ │
|
|
27
|
+
│ │ │ 1. Detect Changes (Git diff) │ │ │
|
|
28
|
+
│ │ │ 2. Determine Granularity (模块级/功能级) │ │ │
|
|
29
|
+
│ │ │ 3. Check Conflicts (人工编辑检测) │ │ │
|
|
30
|
+
│ │ └─────────────────────────────────────────────────┘ │ │
|
|
31
|
+
│ └────────────────────────┬────────────────────────────────┘ │
|
|
32
|
+
│ ▼ │
|
|
33
|
+
│ ┌─────────────────────────────────────────────────────────┐ │
|
|
34
|
+
│ │ Pipeline Router │ │
|
|
35
|
+
│ │ ┌──────────────┐ ┌──────────────┐ │ │
|
|
36
|
+
│ │ │ Bizs Pipe │◄────────────►│ Techs Pipe │ │ │
|
|
37
|
+
│ │ │ (业务知识) │ 联动触发 │ (技术知识) │ │ │
|
|
38
|
+
│ │ └──────┬───────┘ └──────┬───────┘ │ │
|
|
39
|
+
│ │ │ │ │ │
|
|
40
|
+
│ │ ┌──────▼───────┐ ┌──────▼───────┐ │ │
|
|
41
|
+
│ │ │ Stage 2/3 │ │ Stage 2/3 │ │ │
|
|
42
|
+
│ │ │ (增量Worker) │ │ (增量Worker) │ │ │
|
|
43
|
+
│ │ └──────┬───────┘ └──────┬───────┘ │ │
|
|
44
|
+
│ │ │ │ │ │
|
|
45
|
+
│ │ ┌──────▼───────┐ ┌──────▼───────┐ │ │
|
|
46
|
+
│ │ │ Stage 4 │ │ Stage 3 │ │ │
|
|
47
|
+
│ │ │ (系统聚合) │ │ (索引聚合) │ │ │
|
|
48
|
+
│ │ └──────────────┘ └──────────────┘ │ │
|
|
49
|
+
│ └─────────────────────────────────────────────────────────┘ │
|
|
50
|
+
│ ▼ │
|
|
51
|
+
│ ┌─────────────────────────────────────────────────────────┐ │
|
|
52
|
+
│ │ Output & Report │ │
|
|
53
|
+
│ │ - 自动生成文档 → Git 暂存区 │ │
|
|
54
|
+
│ │ - 生成变更报告 → 提交信息/通知 │ │
|
|
55
|
+
│ │ - 冲突标记 → 等待人工解决 │ │
|
|
56
|
+
│ └─────────────────────────────────────────────────────────┘ │
|
|
57
|
+
│ │
|
|
58
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 2. 触发机制
|
|
64
|
+
|
|
65
|
+
### 2.1 触发方式(全支持)
|
|
66
|
+
|
|
67
|
+
| 触发方式 | 触发时机 | 适用场景 | 配置方式 |
|
|
68
|
+
|----------|----------|----------|----------|
|
|
69
|
+
| **Git Hook 自动** | pre-commit / post-merge / post-checkout | 日常开发,保持文档实时同步 | 项目初始化时自动配置到 `.git/hooks/` |
|
|
70
|
+
| **手动触发** | 开发者主动执行 | 需要精确控制更新范围 | Leader Agent 调用 Skill |
|
|
71
|
+
| **定时触发** | 定时任务扫描 | 长时间未提交的场景 | CI/CD Pipeline 配置 |
|
|
72
|
+
|
|
73
|
+
### 2.2 Git Hook 配置示例
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# .git/hooks/post-commit
|
|
77
|
+
#!/bin/bash
|
|
78
|
+
# speccrew 知识库自动同步钩子
|
|
79
|
+
|
|
80
|
+
echo "[speccrew] 检测知识库同步需求..."
|
|
81
|
+
|
|
82
|
+
# 调用增量同步 Skill
|
|
83
|
+
speccrew knowledge-sync \
|
|
84
|
+
--mode=incremental \
|
|
85
|
+
--source=bizs,techs \
|
|
86
|
+
--report=console
|
|
87
|
+
|
|
88
|
+
# 如果有文档变更,自动添加到暂存区(供下次提交)
|
|
89
|
+
if [ -f "speccrew-workspace/knowledges/base/sync-state/sync-report.json" ]; then
|
|
90
|
+
echo "[speccrew] 文档已更新,请查看变更并提交"
|
|
91
|
+
fi
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 2.3 手动触发命令
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# 完整同步(全量)
|
|
98
|
+
speccrew knowledge-sync --mode=full
|
|
99
|
+
|
|
100
|
+
# 增量同步(仅变更模块)
|
|
101
|
+
speccrew knowledge-sync --mode=incremental
|
|
102
|
+
|
|
103
|
+
# 仅同步业务知识
|
|
104
|
+
speccrew knowledge-sync --source=bizs
|
|
105
|
+
|
|
106
|
+
# 仅同步技术知识
|
|
107
|
+
speccrew knowledge-sync --source=techs
|
|
108
|
+
|
|
109
|
+
# 指定模块强制更新
|
|
110
|
+
speccrew knowledge-sync --module=order,payment --force
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 3. 变更粒度判定
|
|
116
|
+
|
|
117
|
+
### 3.1 自动判定策略
|
|
118
|
+
|
|
119
|
+
Leader Agent(speccrew-knowledge-dispatch)根据变更文件类型自动判定更新粒度:
|
|
120
|
+
|
|
121
|
+
**输入参数**(由调用方通过 context 传入):
|
|
122
|
+
- `changed_files`: 变更文件路径列表(相对于项目根目录)
|
|
123
|
+
- `modules.json`: 当前模块配置(已读取的 JSON 对象)
|
|
124
|
+
|
|
125
|
+
**判定逻辑**(在 Leader Agent 中执行):
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
Step 1: 遍历 changed_files 中的每个文件路径
|
|
129
|
+
|
|
130
|
+
Step 2: 检查文件是否匹配技术配置文件模式
|
|
131
|
+
- 模式列表: ["**/package.json", "**/pom.xml", "**/go.mod", "**/requirements.txt", "**/Cargo.toml"]
|
|
132
|
+
- IF 匹配 → 返回 UpdateType.TECHS_FULL
|
|
133
|
+
|
|
134
|
+
Step 3: 检查文件是否匹配构建配置文件模式
|
|
135
|
+
- 模式列表: ["**/tsconfig.json", "**/vite.config.*", "**/webpack.config.*", "**/nest-cli.json"]
|
|
136
|
+
- IF 匹配 → 返回 UpdateType.TECHS_PLATFORM
|
|
137
|
+
|
|
138
|
+
Step 4: 检查文件是否匹配约定配置文件模式
|
|
139
|
+
- 模式列表: ["**/.eslintrc*", "**/.prettierrc*", "**/.editorconfig", "**/jest.config.*"]
|
|
140
|
+
- IF 匹配 → 返回 UpdateType.TECHS_CONVENTION
|
|
141
|
+
|
|
142
|
+
Step 5: 检查文件是否属于模块入口文件
|
|
143
|
+
- 根据 modules.json 中的 entry_points 进行匹配
|
|
144
|
+
- IF 匹配 → 返回 UpdateType.MODULE_LEVEL(模块名)
|
|
145
|
+
|
|
146
|
+
Step 6: 检查文件是否属于共享工具代码
|
|
147
|
+
- 路径包含: ["**/utils/**", "**/common/**", "**/shared/**"]
|
|
148
|
+
- IF 匹配 → 查找引用该文件的所有模块,返回 UpdateType.MODULES_LEVEL(模块列表)
|
|
149
|
+
|
|
150
|
+
Step 7: 默认情况 → 返回 UpdateType.FEATURE_LEVEL(推断的功能ID)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**输出结果**:返回更新类型枚举值,Dispatcher 据此决定后续执行策略。
|
|
154
|
+
|
|
155
|
+
### 3.2 文件类型映射表
|
|
156
|
+
|
|
157
|
+
| 文件类型 | 判定规则 | 更新粒度 | 示例 |
|
|
158
|
+
|----------|----------|----------|------|
|
|
159
|
+
| **技术配置** | `package.json`, `pom.xml`, `go.mod` 等 | Techs 全量 | 依赖升级、框架变更 |
|
|
160
|
+
| **构建配置** | `tsconfig.json`, `vite.config.*` 等 | Techs 平台级 | 构建设置调整 |
|
|
161
|
+
| **约定配置** | `.eslintrc*`, `.prettierrc*` 等 | Techs 约定级 | 代码规范变更 |
|
|
162
|
+
| **模块入口** | `module.ts`, `index.ts` (模块根) | Bizs 模块级 | 模块结构变更 |
|
|
163
|
+
| **功能文件** | `*.controller.ts`, `*.service.ts` | Bizs 功能级 | 接口/逻辑变更 |
|
|
164
|
+
| **共享工具** | `utils/`, `common/`, `shared/` | Bizs 多模块级 | 工具函数变更 |
|
|
165
|
+
|
|
166
|
+
### 3.3 跨模块依赖处理
|
|
167
|
+
|
|
168
|
+
当共享代码变更时,采用**保守策略**:
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
变更文件: src/shared/utils/order-helper.ts
|
|
172
|
+
|
|
173
|
+
处理流程:
|
|
174
|
+
1. 识别文件属于 shared 模块
|
|
175
|
+
2. 查找所有引用该文件的模块
|
|
176
|
+
- order.module.ts (import)
|
|
177
|
+
- payment.module.ts (import)
|
|
178
|
+
3. 标记 order 和 payment 模块为 CHANGED
|
|
179
|
+
4. 触发这两个模块的 Stage 2/3 更新
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## 4. 增量同步算法
|
|
185
|
+
|
|
186
|
+
### 4.1 核心流程
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
输入: BASE_COMMIT (上次同步提交), HEAD (当前提交)
|
|
190
|
+
输出: 更新的文档 + 同步报告
|
|
191
|
+
|
|
192
|
+
算法步骤:
|
|
193
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
194
|
+
│ 1. 变更检测 │
|
|
195
|
+
│ ├─ git diff --name-only BASE_COMMIT HEAD │
|
|
196
|
+
│ └─ 获取 changed_files 列表 │
|
|
197
|
+
├─────────────────────────────────────────────────────────────┤
|
|
198
|
+
│ 2. 重新扫描 (Stage 1) │
|
|
199
|
+
│ ├─ 运行 speccrew-knowledge-bizs-init │
|
|
200
|
+
│ ├─ 运行 speccrew-knowledge-techs-init (如需要) │
|
|
201
|
+
│ └─ 生成新的 modules.json / techs-manifest.json │
|
|
202
|
+
├─────────────────────────────────────────────────────────────┤
|
|
203
|
+
│ 3. 变更映射 │
|
|
204
|
+
│ ├─ 对比新旧 modules.json │
|
|
205
|
+
│ ├─ 根据 entry_points 映射文件到模块 │
|
|
206
|
+
│ ├─ 标记模块状态: NEW / CHANGED / DELETED / UNMODIFIED │
|
|
207
|
+
│ └─ 构建 affected_modules 列表 │
|
|
208
|
+
├─────────────────────────────────────────────────────────────┤
|
|
209
|
+
│ 4. 冲突检测 │
|
|
210
|
+
│ ├─ 检查 affected_modules 对应文档是否有人工编辑 │
|
|
211
|
+
│ ├─ 如有冲突,生成冲突报告并标记 NEED_MANUAL_REVIEW │
|
|
212
|
+
│ └─ 无冲突则继续 │
|
|
213
|
+
├─────────────────────────────────────────────────────────────┤
|
|
214
|
+
│ 5. 增量执行 │
|
|
215
|
+
│ ├─ Stage 2: 仅对 NEW/CHANGED 模块派发 Worker │
|
|
216
|
+
│ ├─ Stage 3: 仅对 NEW/CHANGED 模块派发 Worker │
|
|
217
|
+
│ ├─ Stage 4 (Bizs): 总是重新生成 system-overview.md │
|
|
218
|
+
│ ├─ Stage 3 (Techs): 总是重新生成根 INDEX.md │
|
|
219
|
+
│ └─ 清理 DELETED 模块的文档 │
|
|
220
|
+
├─────────────────────────────────────────────────────────────┤
|
|
221
|
+
│ 6. 状态更新 │
|
|
222
|
+
│ ├─ 保存新的 modules.json (更新 source_commit = HEAD) │
|
|
223
|
+
│ ├─ 自动生成同步报告 │
|
|
224
|
+
│ └─ 如有文档变更,添加到 Git 暂存区 │
|
|
225
|
+
└─────────────────────────────────────────────────────────────┘
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 4.2 模块状态判定
|
|
229
|
+
|
|
230
|
+
Leader Agent 根据新旧 modules.json 和变更文件列表,判定每个模块的状态。
|
|
231
|
+
|
|
232
|
+
**输入参数**:
|
|
233
|
+
- `old_modules.json`: 上次同步时的模块配置(从 sync-state 目录读取)
|
|
234
|
+
- `new_modules.json`: 本次 Stage 1 新生成的模块配置
|
|
235
|
+
- `changed_files`: Git diff 获取的变更文件列表
|
|
236
|
+
|
|
237
|
+
**判定逻辑**:
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
Step 1: 遍历 new_modules.json 中的所有模块
|
|
241
|
+
|
|
242
|
+
Step 2: 对于每个模块,获取其 code_name
|
|
243
|
+
|
|
244
|
+
Step 3: 在 old_modules.json 中查找同名模块
|
|
245
|
+
|
|
246
|
+
Step 4: 判定状态
|
|
247
|
+
IF old_modules 中不存在 AND new_modules 中存在
|
|
248
|
+
→ 标记为 NEW
|
|
249
|
+
|
|
250
|
+
IF old_modules 中存在 AND new_modules 中不存在
|
|
251
|
+
→ 标记为 DELETED
|
|
252
|
+
|
|
253
|
+
IF old_modules 和 new_modules 中都存在
|
|
254
|
+
→ 检查 entry_points 关联文件是否在 changed_files 中
|
|
255
|
+
- 构建模块文件路径: platform.source_path + entry_points[*]
|
|
256
|
+
- IF 任一文件匹配 changed_files → 标记为 CHANGED
|
|
257
|
+
- ELSE → 标记为 UNMODIFIED
|
|
258
|
+
|
|
259
|
+
Step 5: 返回模块状态映射表
|
|
260
|
+
{
|
|
261
|
+
"web/order": "CHANGED",
|
|
262
|
+
"web/payment": "NEW",
|
|
263
|
+
"web/user": "UNMODIFIED",
|
|
264
|
+
"mobile-flutter/order": "DELETED"
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
**状态说明**:
|
|
269
|
+
|
|
270
|
+
| 状态 | 含义 | Stage 2/3 处理策略 |
|
|
271
|
+
|------|------|-------------------|
|
|
272
|
+
| `NEW` | 新模块(旧快照不存在) | 派发 Worker 生成文档 |
|
|
273
|
+
| `CHANGED` | 模块存在且关联文件有变更 | 派发 Worker 更新文档 |
|
|
274
|
+
| `DELETED` | 模块已删除(新快照不存在) | 清理对应文档目录 |
|
|
275
|
+
| `UNMODIFIED` | 模块存在且无关联文件变更 | 跳过,不派发 Worker |
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 5. 冲突处理
|
|
280
|
+
|
|
281
|
+
### 5.1 冲突检测策略
|
|
282
|
+
|
|
283
|
+
Leader Agent 在派发 Worker 前,检查目标文档是否有人工编辑。
|
|
284
|
+
|
|
285
|
+
**输入参数**:
|
|
286
|
+
- `module_name`: 模块代码名(如 "order")
|
|
287
|
+
- `doc_path`: 文档完整路径(如 "speccrew-workspace/knowledges/bizs/web/order/order-overview.md")
|
|
288
|
+
|
|
289
|
+
**检测逻辑**:
|
|
290
|
+
|
|
291
|
+
```
|
|
292
|
+
Step 1: 检查 .editing 标记文件
|
|
293
|
+
- 检查文件是否存在: "{doc_path}.editing"
|
|
294
|
+
- IF 存在 → 返回 MARKED_EDITING
|
|
295
|
+
|
|
296
|
+
Step 2: 对比 Git 版本与工作区(通过工具调用)
|
|
297
|
+
- 使用 read_file 读取当前工作区内容
|
|
298
|
+
- 使用 git show HEAD:{doc_path} 获取上次提交版本
|
|
299
|
+
- IF 两者不一致 → 返回 UNCOMMITTED_CHANGES
|
|
300
|
+
|
|
301
|
+
Step 3: 检查文件修改时间
|
|
302
|
+
- 获取 doc_path 的 mtime(文件系统元数据)
|
|
303
|
+
- 与 stage2-status.json 中该模块的 completed_at 对比
|
|
304
|
+
- IF mtime > completed_at → 返回 RECENTLY_MODIFIED
|
|
305
|
+
|
|
306
|
+
Step 4: 默认情况
|
|
307
|
+
→ 返回 NONE
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
**冲突类型说明**:
|
|
311
|
+
|
|
312
|
+
| 类型 | 含义 | 处理建议 |
|
|
313
|
+
|------|------|----------|
|
|
314
|
+
| `MARKED_EDITING` | 用户创建了 .editing 标记文件 | 完全跳过该模块,等待用户完成编辑 |
|
|
315
|
+
| `UNCOMMITTED_CHANGES` | 文档已被修改但未提交 | 生成冲突报告,暂停自动更新 |
|
|
316
|
+
| `RECENTLY_MODIFIED` | 文档在同步后被人修改过 | 生成冲突报告,提示用户确认 |
|
|
317
|
+
| `NONE` | 无冲突 | 正常派发 Worker |
|
|
318
|
+
|
|
319
|
+
### 5.2 冲突处理流程
|
|
320
|
+
|
|
321
|
+
当检测到冲突时,系统生成冲突报告并暂停自动更新:
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
冲突处理流程:
|
|
325
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
326
|
+
│ 1. 检测到冲突 │
|
|
327
|
+
│ └─ 模块: order, 文档: order-overview.md │
|
|
328
|
+
├─────────────────────────────────────────────────────────────┤
|
|
329
|
+
│ 2. 生成三向对比 │
|
|
330
|
+
│ ├─ BASE: 上次提交的版本 │
|
|
331
|
+
│ ├─ OURS: 当前工作区版本(人工编辑) │
|
|
332
|
+
│ └─ THEIRS: 自动生成版本 │
|
|
333
|
+
├─────────────────────────────────────────────────────────────┤
|
|
334
|
+
│ 3. 保存冲突报告 │
|
|
335
|
+
│ └─ speccrew-workspace/docs/conflicts/order.conflict.md │
|
|
336
|
+
├─────────────────────────────────────────────────────────────┤
|
|
337
|
+
│ 4. 标记模块状态 │
|
|
338
|
+
│ └─ modules.json: order.status = "CONFLICT" │
|
|
339
|
+
├─────────────────────────────────────────────────────────────┤
|
|
340
|
+
│ 5. 通知开发者 │
|
|
341
|
+
│ ├─ 控制台输出冲突摘要 │
|
|
342
|
+
│ ├─ 同步报告标记冲突模块 │
|
|
343
|
+
│ └─ 跳过该模块的自动更新 │
|
|
344
|
+
├─────────────────────────────────────────────────────────────┤
|
|
345
|
+
│ 6. 等待人工解决 │
|
|
346
|
+
│ ├─ 查看冲突报告: cat conflicts/order.conflict.md │
|
|
347
|
+
│ ├─ 选择策略并执行 │
|
|
348
|
+
│ └─ 标记解决: speccrew knowledge-resolve --module=order │
|
|
349
|
+
└─────────────────────────────────────────────────────────────┘
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### 5.3 冲突解决命令
|
|
353
|
+
|
|
354
|
+
```bash
|
|
355
|
+
# 查看冲突详情
|
|
356
|
+
cat speccrew-workspace/docs/conflicts/order.conflict.md
|
|
357
|
+
|
|
358
|
+
# 策略1: 保留人工版本
|
|
359
|
+
speccrew knowledge-resolve --module=order --strategy=keep-ours
|
|
360
|
+
|
|
361
|
+
# 策略2: 采用生成版本
|
|
362
|
+
speccrew knowledge-resolve --module=order --strategy=keep-theirs
|
|
363
|
+
|
|
364
|
+
# 策略3: 手动合并后标记解决
|
|
365
|
+
# 编辑文件后执行:
|
|
366
|
+
speccrew knowledge-resolve --module=order --strategy=resolved
|
|
367
|
+
|
|
368
|
+
# 批量解决所有冲突
|
|
369
|
+
speccrew knowledge-resolve --all --strategy=keep-ours
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### 5.4 冲突报告格式
|
|
373
|
+
|
|
374
|
+
```markdown
|
|
375
|
+
# 文档冲突待解决: order-overview.md
|
|
376
|
+
|
|
377
|
+
## 冲突摘要
|
|
378
|
+
- 模块: order
|
|
379
|
+
- 文档路径: speccrew-workspace/knowledges/bizs/web/order/order-overview.md
|
|
380
|
+
- 检测时间: 2024-03-21 10:30:00
|
|
381
|
+
- 冲突类型: UNCOMMITTED_CHANGES
|
|
382
|
+
|
|
383
|
+
## 冲突位置详情
|
|
384
|
+
|
|
385
|
+
### Section 3: 业务实体
|
|
386
|
+
| 版本 | 内容摘要 |
|
|
387
|
+
|------|----------|
|
|
388
|
+
| BASE | Order, OrderItem, Payment |
|
|
389
|
+
| OURS | Order, OrderItem, Payment, Refund |
|
|
390
|
+
| THEIRS | Order, OrderItem, Payment, Shipping |
|
|
391
|
+
|
|
392
|
+
**分析**: 人工版本添加了 Refund 实体,自动生成版本添加了 Shipping 实体
|
|
393
|
+
|
|
394
|
+
### Section 5: 核心流程
|
|
395
|
+
| 版本 | 变更 |
|
|
396
|
+
|------|------|
|
|
397
|
+
| OURS | 补充了异常处理流程说明 |
|
|
398
|
+
| THEIRS | 根据新代码更新了流程步骤 |
|
|
399
|
+
|
|
400
|
+
## 建议
|
|
401
|
+
- 业务实体: 建议合并两个版本(同时保留 Refund 和 Shipping)
|
|
402
|
+
- 核心流程: 建议保留人工版本(异常处理说明有价值)
|
|
403
|
+
|
|
404
|
+
## 解决命令
|
|
405
|
+
```bash
|
|
406
|
+
# 手动编辑文件后标记解决
|
|
407
|
+
speccrew knowledge-resolve --module=order --strategy=resolved
|
|
408
|
+
```
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
## 6. Techs 联动更新
|
|
414
|
+
|
|
415
|
+
### 6.1 联动触发规则
|
|
416
|
+
|
|
417
|
+
```yaml
|
|
418
|
+
# speccrew-workspace/docs/techs-trigger-rules.yaml
|
|
419
|
+
techs_update_triggers:
|
|
420
|
+
# 依赖文件变更 → 全量 Techs 更新
|
|
421
|
+
- name: "dependency_change"
|
|
422
|
+
patterns:
|
|
423
|
+
- "**/package.json"
|
|
424
|
+
- "**/pom.xml"
|
|
425
|
+
- "**/go.mod"
|
|
426
|
+
- "**/requirements.txt"
|
|
427
|
+
- "**/Cargo.toml"
|
|
428
|
+
action: trigger_techs_full_sync
|
|
429
|
+
priority: high
|
|
430
|
+
|
|
431
|
+
# 构建配置变更 → 对应平台更新
|
|
432
|
+
- name: "build_config_change"
|
|
433
|
+
patterns:
|
|
434
|
+
- "**/tsconfig.json"
|
|
435
|
+
- "**/vite.config.*"
|
|
436
|
+
- "**/webpack.config.*"
|
|
437
|
+
- "**/nest-cli.json"
|
|
438
|
+
- "**/next.config.*"
|
|
439
|
+
action: trigger_techs_platform_sync
|
|
440
|
+
priority: medium
|
|
441
|
+
|
|
442
|
+
# 约定配置变更 → 约定文档更新
|
|
443
|
+
- name: "convention_change"
|
|
444
|
+
patterns:
|
|
445
|
+
- "**/.eslintrc*"
|
|
446
|
+
- "**/.prettierrc*"
|
|
447
|
+
- "**/.editorconfig"
|
|
448
|
+
- "**/jest.config.*"
|
|
449
|
+
action: trigger_techs_conventions_sync
|
|
450
|
+
priority: low
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
### 6.2 联动执行流程
|
|
454
|
+
|
|
455
|
+
```
|
|
456
|
+
Bizs Pipeline 执行时:
|
|
457
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
458
|
+
│ 1. Stage 1 扫描变更文件 │
|
|
459
|
+
│ └─ 识别到 package.json 变更 │
|
|
460
|
+
├─────────────────────────────────────────────────────────────┤
|
|
461
|
+
│ 2. 匹配触发规则 │
|
|
462
|
+
│ └─ 命中 dependency_change → trigger_techs_full_sync │
|
|
463
|
+
├─────────────────────────────────────────────────────────────┤
|
|
464
|
+
│ 3. 并行启动 Techs Pipeline │
|
|
465
|
+
│ ├─ Bizs: 继续执行 Stage 2/3/4 │
|
|
466
|
+
│ └─ Techs: 同时启动 Techs Stage 1/2/3 │
|
|
467
|
+
├─────────────────────────────────────────────────────────────┤
|
|
468
|
+
│ 4. 记录联动关系 │
|
|
469
|
+
│ └─ 保存到 sync-relationship.json │
|
|
470
|
+
├─────────────────────────────────────────────────────────────┤
|
|
471
|
+
│ 5. 合并执行报告 │
|
|
472
|
+
│ └─ 生成统一的同步报告 │
|
|
473
|
+
└─────────────────────────────────────────────────────────────┘
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
### 6.3 联动关系记录
|
|
477
|
+
|
|
478
|
+
```json
|
|
479
|
+
{
|
|
480
|
+
"sync_id": "sync-20240321-001",
|
|
481
|
+
"triggered_at": "2024-03-21T10:30:00Z",
|
|
482
|
+
"trigger_commit": "def5678",
|
|
483
|
+
"trigger_reason": "package.json changed",
|
|
484
|
+
"pipelines": [
|
|
485
|
+
{
|
|
486
|
+
"type": "bizs",
|
|
487
|
+
"status": "completed",
|
|
488
|
+
"affected_modules": ["order", "payment"],
|
|
489
|
+
"execution_time_ms": 45000
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
"type": "techs",
|
|
493
|
+
"status": "completed",
|
|
494
|
+
"trigger_reason": "dependency_change",
|
|
495
|
+
"affected_platforms": ["web-react", "backend-nestjs"],
|
|
496
|
+
"execution_time_ms": 32000
|
|
497
|
+
}
|
|
498
|
+
],
|
|
499
|
+
"summary": {
|
|
500
|
+
"total_docs_generated": 12,
|
|
501
|
+
"total_docs_updated": 5,
|
|
502
|
+
"conflicts_detected": 0
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
---
|
|
508
|
+
|
|
509
|
+
## 7. 同步报告
|
|
510
|
+
|
|
511
|
+
### 7.1 报告格式
|
|
512
|
+
|
|
513
|
+
```markdown
|
|
514
|
+
## speccrew 知识库同步报告
|
|
515
|
+
|
|
516
|
+
### 基本信息
|
|
517
|
+
- 同步ID: sync-20240321-001
|
|
518
|
+
- 触发方式: git-hook (post-commit)
|
|
519
|
+
- 提交范围: abc1234 → def5678
|
|
520
|
+
- 执行时间: 2024-03-21 10:30:00
|
|
521
|
+
|
|
522
|
+
### 变更检测
|
|
523
|
+
- 变更文件数: 5
|
|
524
|
+
- 新增文件: 1
|
|
525
|
+
- 修改文件: 3
|
|
526
|
+
- 删除文件: 1
|
|
527
|
+
|
|
528
|
+
### Bizs 知识库更新
|
|
529
|
+
|
|
530
|
+
| 模块 | 状态 | 更新粒度 | 生成文档 |
|
|
531
|
+
|------|------|----------|----------|
|
|
532
|
+
| order | CHANGED | 功能级 | order-overview.md, features/create-order.md |
|
|
533
|
+
| payment | UNMODIFIED | - | - |
|
|
534
|
+
| user | NEW | 模块级 | user-overview.md, features/*.md (4个) |
|
|
535
|
+
| inventory | DELETED | - | 文档已归档 |
|
|
536
|
+
|
|
537
|
+
### Techs 知识库更新
|
|
538
|
+
|
|
539
|
+
| 平台 | 触发原因 | 更新文档 |
|
|
540
|
+
|------|----------|----------|
|
|
541
|
+
| web-react | dependency_change | tech-stack.md, conventions-dev.md |
|
|
542
|
+
| backend-nestjs | dependency_change | tech-stack.md |
|
|
543
|
+
|
|
544
|
+
### 冲突情况
|
|
545
|
+
- 冲突模块数: 0
|
|
546
|
+
- 详情: 无
|
|
547
|
+
|
|
548
|
+
### 建议操作
|
|
549
|
+
- [x] 文档已自动添加到 Git 暂存区
|
|
550
|
+
- [ ] 请 review 变更内容
|
|
551
|
+
- [ ] 执行 `git commit` 提交文档更新
|
|
552
|
+
|
|
553
|
+
### 详细日志
|
|
554
|
+
见: speccrew-workspace/knowledges/base/sync-state/sync-history/sync-20240321-001.log
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
### 7.2 报告存储位置
|
|
558
|
+
|
|
559
|
+
```
|
|
560
|
+
speccrew-workspace/
|
|
561
|
+
└── knowledges/
|
|
562
|
+
└── base/
|
|
563
|
+
└── sync-state/
|
|
564
|
+
├── sync-report.json # 最新报告(JSON格式)
|
|
565
|
+
├── sync-report.md # 最新报告(Markdown格式)
|
|
566
|
+
└── sync-history/
|
|
567
|
+
├── sync-20240321-001.json # 历史报告
|
|
568
|
+
├── sync-20240321-001.log # 详细日志
|
|
569
|
+
└── sync-20240320-003.json
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
---
|
|
573
|
+
|
|
574
|
+
## 8. 存储结构
|
|
575
|
+
|
|
576
|
+
### 8.1 状态文件位置
|
|
577
|
+
|
|
578
|
+
```
|
|
579
|
+
speccrew-workspace/
|
|
580
|
+
└── knowledges/
|
|
581
|
+
└── base/
|
|
582
|
+
└── sync-state/
|
|
583
|
+
├── knowledge-bizs/
|
|
584
|
+
│ ├── modules.json # 模块清单(含 source_commit)
|
|
585
|
+
│ ├── stage2-status.json # Stage 2 执行状态
|
|
586
|
+
│ ├── stage3-status.json # Stage 3 执行状态
|
|
587
|
+
│ └── final-report.json # 最终报告
|
|
588
|
+
│
|
|
589
|
+
├── knowledge-techs/
|
|
590
|
+
│ ├── techs-manifest.json # 技术栈清单
|
|
591
|
+
│ ├── stage2-status.json # Stage 2 执行状态
|
|
592
|
+
│ ├── stage3-status.json # Stage 3 执行状态
|
|
593
|
+
│ └── final-report.json # 最终报告
|
|
594
|
+
│
|
|
595
|
+
├── conflicts/ # 冲突报告目录
|
|
596
|
+
│ ├── order.conflict.md
|
|
597
|
+
│ └── payment.conflict.md
|
|
598
|
+
│
|
|
599
|
+
├── sync-report.json # 最新同步报告
|
|
600
|
+
├── sync-report.md
|
|
601
|
+
└── sync-history/ # 历史报告归档
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
### 8.2 modules.json 扩展结构
|
|
605
|
+
|
|
606
|
+
增量同步在标准 `modules.json` 结构基础上,依赖 `source_commit` 字段作为基准版本标记:
|
|
607
|
+
|
|
608
|
+
```json
|
|
609
|
+
{
|
|
610
|
+
"generated_at": "2024-03-21T10:30:00Z",
|
|
611
|
+
"source_commit": "def5678",
|
|
612
|
+
"last_sync_id": "sync-20240321-001",
|
|
613
|
+
"source_path": "/project",
|
|
614
|
+
"language": "zh",
|
|
615
|
+
"analysis_method": "ui-based",
|
|
616
|
+
"platform_count": 2,
|
|
617
|
+
"platforms": [
|
|
618
|
+
{
|
|
619
|
+
"platform_name": "Web Frontend",
|
|
620
|
+
"platform_type": "web",
|
|
621
|
+
"source_path": "src/web",
|
|
622
|
+
"tech_stack": ["react", "typescript"],
|
|
623
|
+
"module_count": 3,
|
|
624
|
+
"modules": [
|
|
625
|
+
{
|
|
626
|
+
"name": "Order Management",
|
|
627
|
+
"code_name": "order",
|
|
628
|
+
"user_value": "订单生命周期管理",
|
|
629
|
+
"system_type": "ui",
|
|
630
|
+
"entry_points": [
|
|
631
|
+
"src/pages/orders/index.tsx",
|
|
632
|
+
"src/pages/orders/[id].tsx"
|
|
633
|
+
],
|
|
634
|
+
"backend_apis": [
|
|
635
|
+
"GET /api/orders",
|
|
636
|
+
"POST /api/orders",
|
|
637
|
+
"GET /api/orders/:id"
|
|
638
|
+
],
|
|
639
|
+
"status": "active",
|
|
640
|
+
"last_sync": "2024-03-21T10:30:00Z"
|
|
641
|
+
}
|
|
642
|
+
]
|
|
643
|
+
},
|
|
644
|
+
{
|
|
645
|
+
"platform_name": "Mobile App",
|
|
646
|
+
"platform_type": "mobile",
|
|
647
|
+
"platform_subtype": "flutter",
|
|
648
|
+
"source_path": "src/mobile",
|
|
649
|
+
"tech_stack": ["flutter", "dart"],
|
|
650
|
+
"module_count": 3,
|
|
651
|
+
"modules": [
|
|
652
|
+
{
|
|
653
|
+
"name": "Order Management",
|
|
654
|
+
"code_name": "order",
|
|
655
|
+
"user_value": "订单生命周期管理",
|
|
656
|
+
"system_type": "ui",
|
|
657
|
+
"entry_points": [
|
|
658
|
+
"lib/pages/orders/list.dart",
|
|
659
|
+
"lib/pages/orders/detail.dart"
|
|
660
|
+
],
|
|
661
|
+
"status": "active",
|
|
662
|
+
"last_sync": "2024-03-21T10:30:00Z"
|
|
663
|
+
}
|
|
664
|
+
]
|
|
665
|
+
}
|
|
666
|
+
]
|
|
667
|
+
}
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
**增量同步关键字段说明**:
|
|
671
|
+
|
|
672
|
+
| 字段 | 说明 | 增量同步用途 |
|
|
673
|
+
|------|------|-------------|
|
|
674
|
+
| `source_commit` | 生成时的 Git commit hash (HEAD) | 作为下次增量同步的 `base_commit` 基准 |
|
|
675
|
+
| `last_sync_id` | 最近一次同步 ID | 关联同步历史记录 |
|
|
676
|
+
| `platforms[].source_path` | 平台源码根路径 | 结合 `entry_points` 构建文件映射 |
|
|
677
|
+
| `modules[].entry_points` | 模块入口文件(相对于平台 source_path) | 映射 changed_files 到模块 |
|
|
678
|
+
| `modules[].backend_apis` | 关联后端 API(ui 类型模块) | 辅助判断 API 变更影响的业务模块 |
|
|
679
|
+
| `modules[].status` | 模块状态(active / CONFLICT 等) | 标记需人工处理的模块 |
|
|
680
|
+
|
|
681
|
+
---
|
|
682
|
+
|
|
683
|
+
## 9. 中断恢复机制
|
|
684
|
+
|
|
685
|
+
### 9.1 设计目标
|
|
686
|
+
|
|
687
|
+
Pipeline 执行过程中可能因断电、系统崩溃或用户手动停止而中断。中断恢复机制确保再次执行时:
|
|
688
|
+
- **Stage 1 中断**:重新运行 Stage 1(成本低,直接重新生成 `modules.json` / `techs-manifest.json`)
|
|
689
|
+
- **Stage 2/3 中断**:基于 `stage2-status.json` / `stage3-status.json` 恢复,跳过已完成的 Worker,仅补跑未完成部分
|
|
690
|
+
- **Stage 4 (Bizs) / Stage 3 (Techs) 中断**:重新运行聚合阶段(单任务,成本低)
|
|
691
|
+
|
|
692
|
+
### 9.2 stage-status.json 实时写入机制
|
|
693
|
+
|
|
694
|
+
**关键调整**:`stage2-status.json` 和 `stage3-status.json` 改为**实时增量写入**,而非等整个 Stage 完成后才生成。
|
|
695
|
+
|
|
696
|
+
**写入时机**:
|
|
697
|
+
- Stage 开始时:生成文件框架,所有 Worker 状态设为 `pending`
|
|
698
|
+
- **每个 Worker 完成时**:立即更新该 Worker 的状态为 `completed` 并写入文件
|
|
699
|
+
- Stage 全部完成时:更新顶层 `completed_at` 字段
|
|
700
|
+
|
|
701
|
+
**调整后的 stage2-status.json 结构**:
|
|
702
|
+
```json
|
|
703
|
+
{
|
|
704
|
+
"pipeline": "bizs",
|
|
705
|
+
"stage": 2,
|
|
706
|
+
"sync_mode": "full",
|
|
707
|
+
"source_commit": "def5678",
|
|
708
|
+
"language": "zh",
|
|
709
|
+
"started_at": "2024-03-21T14:30:22Z",
|
|
710
|
+
"last_updated_at": "2024-03-21T14:38:44Z",
|
|
711
|
+
"completed_at": null,
|
|
712
|
+
"total_modules": 18,
|
|
713
|
+
"completed": 5,
|
|
714
|
+
"failed": 0,
|
|
715
|
+
"platforms": [
|
|
716
|
+
{
|
|
717
|
+
"platform_type": "web/vue",
|
|
718
|
+
"platform_name": "管理后台 Web(Vue3)",
|
|
719
|
+
"modules": [
|
|
720
|
+
{
|
|
721
|
+
"module_name": "system",
|
|
722
|
+
"status": "completed",
|
|
723
|
+
"completed_at": "2024-03-21T14:32:10Z",
|
|
724
|
+
"features_count": 18,
|
|
725
|
+
"output_path": "speccrew-workspace/knowledges/bizs/web-vue/system/"
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
"module_name": "infra",
|
|
729
|
+
"status": "in_progress",
|
|
730
|
+
"started_at": "2024-03-21T14:38:44Z",
|
|
731
|
+
"completed_at": null,
|
|
732
|
+
"features_count": null,
|
|
733
|
+
"output_path": "speccrew-workspace/knowledges/bizs/web-vue/infra/"
|
|
734
|
+
},
|
|
735
|
+
{
|
|
736
|
+
"module_name": "bpm",
|
|
737
|
+
"status": "pending",
|
|
738
|
+
"output_path": "speccrew-workspace/knowledges/bizs/web-vue/bpm/"
|
|
739
|
+
}
|
|
740
|
+
]
|
|
741
|
+
}
|
|
742
|
+
]
|
|
743
|
+
}
|
|
744
|
+
```
|
|
745
|
+
|
|
746
|
+
**Worker 状态说明**:
|
|
747
|
+
|
|
748
|
+
| 状态 | 含义 | 恢复策略 |
|
|
749
|
+
|------|------|----------|
|
|
750
|
+
| `pending` | 尚未开始 | 正常派发 Worker |
|
|
751
|
+
| `in_progress` | 已派发但未完成 | **重新派发**(可能中断时未完成) |
|
|
752
|
+
| `completed` | 已完成 | **跳过**,不重复执行 |
|
|
753
|
+
| `failed` | 执行失败 | 根据重试策略处理 |
|
|
754
|
+
|
|
755
|
+
### 9.3 Dispatcher 恢复逻辑
|
|
756
|
+
|
|
757
|
+
**执行主体**:Leader Agent(speccrew-knowledge-dispatch)
|
|
758
|
+
|
|
759
|
+
**输入参数**:
|
|
760
|
+
- `pipeline_type`: "bizs" 或 "techs"
|
|
761
|
+
- `sync_mode`: "full" 或 "incremental"
|
|
762
|
+
- `source_commit`: 当前 HEAD commit(由调用方传入)
|
|
763
|
+
|
|
764
|
+
**Stage 2 恢复流程**:
|
|
765
|
+
|
|
766
|
+
```
|
|
767
|
+
Step 1: 检查 stage2-status.json 是否存在
|
|
768
|
+
- 文件路径: "speccrew-workspace/knowledges/base/sync-state/knowledge-{bizs|techs}/stage2-status.json"
|
|
769
|
+
- IF 文件不存在 → 跳转到 Step 6 (全新执行)
|
|
770
|
+
- IF 文件存在 → 读取 JSON 内容,继续 Step 2
|
|
771
|
+
|
|
772
|
+
Step 2: 一致性校验
|
|
773
|
+
- 检查 stage2-status.json 中的 source_commit 是否等于传入的 source_commit
|
|
774
|
+
- IF 不匹配 → 输出警告: "源代码已变更,建议重新运行 Stage 1"
|
|
775
|
+
- 等待用户确认: [重新全量执行 / 强制继续恢复]
|
|
776
|
+
- 检查 stage2-status.json 中的 sync_mode 是否等于传入的 sync_mode
|
|
777
|
+
- IF 不匹配 → 输出提示: "同步模式变更,按当前模式重新执行"
|
|
778
|
+
- 跳转到 Step 6 (全新执行)
|
|
779
|
+
|
|
780
|
+
Step 3: 判断 Stage 2 整体完成状态
|
|
781
|
+
- 检查 stage2-status.json 中的 completed_at 字段
|
|
782
|
+
- IF completed_at 有值(非 null)→ Stage 2 已完成
|
|
783
|
+
- 输出: "Stage 2 已完成,跳过进入 Stage 3"
|
|
784
|
+
- 跳转到 Stage 3 执行流程
|
|
785
|
+
- IF completed_at 为 null → Stage 2 未完成,进入 Step 4
|
|
786
|
+
|
|
787
|
+
Step 4: Worker 级恢复(遍历所有模块)
|
|
788
|
+
- 遍历 stage2-status.json 中的 platforms[].modules[]
|
|
789
|
+
- 对于每个模块,检查其 status 字段:
|
|
790
|
+
|
|
791
|
+
CASE status = "completed":
|
|
792
|
+
- 输出: "模块 {platform}/{module} 已完成,跳过"
|
|
793
|
+
- 不派发 Worker
|
|
794
|
+
|
|
795
|
+
CASE status = "in_progress":
|
|
796
|
+
- 输出: "模块 {platform}/{module} 上次中断,重新派发 Worker"
|
|
797
|
+
- 调用 speccrew-task-worker 执行 speccrew-knowledge-module-analyze
|
|
798
|
+
- Worker 完成后,更新该模块 status 为 "completed"
|
|
799
|
+
- 立即写入 stage2-status.json(实时更新)
|
|
800
|
+
|
|
801
|
+
CASE status = "pending":
|
|
802
|
+
- 输出: "模块 {platform}/{module} 待执行,派发 Worker"
|
|
803
|
+
- 调用 speccrew-task-worker 执行 speccrew-knowledge-module-analyze
|
|
804
|
+
- Worker 完成后,更新该模块 status 为 "completed"
|
|
805
|
+
- 立即写入 stage2-status.json(实时更新)
|
|
806
|
+
|
|
807
|
+
CASE status = "failed":
|
|
808
|
+
- 根据重试策略处理(如:重试3次后仍失败则跳过,记录错误)
|
|
809
|
+
|
|
810
|
+
Step 5: Stage 2 收尾
|
|
811
|
+
- 等待所有 Worker 完成
|
|
812
|
+
- 更新 stage2-status.json:
|
|
813
|
+
- completed_at = 当前时间
|
|
814
|
+
- completed = 已完成模块数
|
|
815
|
+
- 进入 Stage 3 执行流程
|
|
816
|
+
|
|
817
|
+
Step 6: 全新执行 Stage 2(无恢复文件或用户选择重新执行)
|
|
818
|
+
- 从 modules.json 读取所有模块列表
|
|
819
|
+
- 初始化 stage2-status.json:
|
|
820
|
+
- 所有模块 status = "pending"
|
|
821
|
+
- completed_at = null
|
|
822
|
+
- started_at = 当前时间
|
|
823
|
+
- 跳转到 Step 4(按 pending 状态派发所有 Worker)
|
|
824
|
+
```
|
|
825
|
+
|
|
826
|
+
**关键文件操作**:
|
|
827
|
+
|
|
828
|
+
| 操作 | 文件路径 | 说明 |
|
|
829
|
+
|------|----------|------|
|
|
830
|
+
| 读取 | `sync-state/knowledge-bizs/stage2-status.json` | 判断是否需要恢复 |
|
|
831
|
+
| 写入 | `sync-state/knowledge-bizs/stage2-status.json` | 每个 Worker 完成后立即更新 |
|
|
832
|
+
| 读取 | `sync-state/knowledge-bizs/modules.json` | 获取模块列表(全新执行时) |
|
|
833
|
+
| 读取 | `sync-state/knowledge-techs/techs-manifest.json` | Techs Pipeline 恢复时 |
|
|
834
|
+
|
|
835
|
+
### 9.4 跨 Stage 依赖处理
|
|
836
|
+
|
|
837
|
+
**Stage 3 启动前的前置检查流程**:
|
|
838
|
+
|
|
839
|
+
```
|
|
840
|
+
Step 1: 检查 Stage 2 是否完成
|
|
841
|
+
- 读取文件: "sync-state/knowledge-bizs/stage2-status.json"
|
|
842
|
+
- 检查字段: completed_at
|
|
843
|
+
- IF completed_at 有值(非 null)→ Stage 2 已完成,继续 Step 2
|
|
844
|
+
- IF completed_at 为 null → Stage 2 未完成
|
|
845
|
+
- 输出: "Stage 2 未完成,先恢复 Stage 2"
|
|
846
|
+
- 跳转到 Stage 2 恢复流程(9.3 节)
|
|
847
|
+
|
|
848
|
+
Step 2: 检查 Stage 3 恢复文件
|
|
849
|
+
- 读取文件: "sync-state/knowledge-bizs/stage3-status.json"
|
|
850
|
+
- IF 文件不存在 → 全新执行 Stage 3(跳转到 Step 4)
|
|
851
|
+
- IF 文件存在 → 继续 Step 3
|
|
852
|
+
|
|
853
|
+
Step 3: Stage 3 恢复判断
|
|
854
|
+
- 检查 stage3-status.json 中的 completed_at
|
|
855
|
+
- IF completed_at 有值 → Stage 3 已完成
|
|
856
|
+
- 输出: "Stage 3 已完成,跳过进入 Stage 4"
|
|
857
|
+
- 跳转到 Stage 4 执行流程
|
|
858
|
+
- IF completed_at 为 null → Stage 3 未完成,进入 Step 4
|
|
859
|
+
|
|
860
|
+
Step 4: 执行 Stage 3(全新或恢复)
|
|
861
|
+
- IF 恢复模式(stage3-status.json 存在):
|
|
862
|
+
- 遍历 modules,按 status 派发 Worker:
|
|
863
|
+
- "completed" → 跳过
|
|
864
|
+
- "in_progress" / "pending" → 派发 speccrew-knowledge-module-summarize
|
|
865
|
+
- IF 全新执行:
|
|
866
|
+
- 从 stage2-status.json 获取所有 completed 的模块
|
|
867
|
+
- 初始化 stage3-status.json(所有 status = "pending")
|
|
868
|
+
- 为所有模块派发 Worker
|
|
869
|
+
|
|
870
|
+
Step 5: Worker 完成处理
|
|
871
|
+
- 每个 Worker 完成后:
|
|
872
|
+
- 更新对应模块 status 为 "completed"
|
|
873
|
+
- 立即写入 stage3-status.json
|
|
874
|
+
|
|
875
|
+
Step 6: Stage 3 收尾
|
|
876
|
+
- 所有 Worker 完成后:
|
|
877
|
+
- 更新 stage3-status.json: completed_at = 当前时间
|
|
878
|
+
- 进入 Stage 4 执行流程
|
|
879
|
+
```
|
|
880
|
+
|
|
881
|
+
**关键原则**:
|
|
882
|
+
- Stage N 的恢复**必须**确认 Stage N-1 的 `completed_at` 已设置
|
|
883
|
+
- 防止因前一阶段未完成导致数据不一致
|
|
884
|
+
- 各 Pipeline(Bizs/Techs)独立检查,互不影响
|
|
885
|
+
|
|
886
|
+
### 9.5 文件清单与恢复能力
|
|
887
|
+
|
|
888
|
+
| 文件 | 支持恢复 | 恢复策略 |
|
|
889
|
+
|------|----------|----------|
|
|
890
|
+
| `modules.json` | ❌ | Stage 1 重新运行 |
|
|
891
|
+
| `techs-manifest.json` | ❌ | Stage 1 重新运行 |
|
|
892
|
+
| `stage2-status.json` | ✅ | 实时写入,Worker 级恢复 |
|
|
893
|
+
| `stage3-status.json` | ✅ | 实时写入,Worker 级恢复 |
|
|
894
|
+
| `final-report.json` | ❌ | 最终阶段,重新生成 |
|
|
895
|
+
|
|
896
|
+
---
|
|
897
|
+
|
|
898
|
+
## 10. 实施阶段
|
|
899
|
+
|
|
900
|
+
### Phase 1: MVP(基础增量同步)
|
|
901
|
+
|
|
902
|
+
- [ ] Git diff 检测实现
|
|
903
|
+
- [ ] 文件到模块的映射算法
|
|
904
|
+
- [ ] 增量 Stage 2/3 调度逻辑
|
|
905
|
+
- [ ] 基础同步报告生成
|
|
906
|
+
- [ ] **stage-status.json 实时写入机制**
|
|
907
|
+
- [ ] **Stage 2/3 中断恢复逻辑**
|
|
908
|
+
|
|
909
|
+
### Phase 2: 增强功能
|
|
910
|
+
|
|
911
|
+
- [ ] 跨模块依赖追踪
|
|
912
|
+
- [ ] 人工编辑检测与冲突处理
|
|
913
|
+
- [ ] Techs 联动更新
|
|
914
|
+
- [ ] 性能优化(缓存、并行)
|
|
915
|
+
- [ ] **source_commit 一致性校验**
|
|
916
|
+
- [ ] **跨 Stage 恢复依赖检查**
|
|
917
|
+
|
|
918
|
+
### Phase 3: 高级特性
|
|
919
|
+
|
|
920
|
+
- [ ] 智能合并建议
|
|
921
|
+
- [ ] 变更影响分析
|
|
922
|
+
- [ ] 历史版本对比
|
|
923
|
+
- [ ] 自动化测试集成
|
|
924
|
+
|
|
925
|
+
---
|
|
926
|
+
|
|
927
|
+
## 11. 相关文档
|
|
928
|
+
|
|
929
|
+
| 文档 | 路径 | 说明 |
|
|
930
|
+
|------|------|------|
|
|
931
|
+
| Bizs Pipeline | `bizs-knowledge-pipeline.md` | 业务知识生成流程 |
|
|
932
|
+
| Techs Pipeline | `techs-knowledge-pipeline.md` | 技术知识生成流程 |
|
|
933
|
+
| Agent 知识地图 | `agent-knowledge-map.md` | Agent 知识需求映射 |
|
|
934
|
+
|
|
935
|
+
---
|
|
936
|
+
|
|
937
|
+
## 12. 维护日志
|
|
938
|
+
|
|
939
|
+
| Date | Changes | Owner |
|
|
940
|
+
|------|---------|-------|
|
|
941
|
+
| 2024-03-21 | 初始版本,定义增量同步完整方案 | - |
|
|
942
|
+
| 2025-03 | 对齐 bizs/techs pipeline 最新实现:更新技能名称、状态文件路径、modules.json 结构(含 platforms 层级)、Techs 改为 3 Stage 架构 | - |
|
|
943
|
+
| 2025-03 | 新增中断恢复机制:stage-status.json 实时写入、Worker 级恢复、source_commit 一致性校验 | - |
|