aodw-skill 0.7.13 → 0.7.17
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/.aodw-next/01-core/ai-interaction-rules-summary.md +37 -0
- package/.aodw-next/01-core/ai-interaction-rules.md +20 -6
- package/.aodw-next/01-core/ai-knowledge-rules-summary.md +25 -0
- package/.aodw-next/01-core/ai-knowledge-rules.md +19 -21
- package/.aodw-next/01-core/ai-project-overview-rules.md +11 -11
- package/.aodw-next/01-core/aodw-constitution.md +7 -414
- package/.aodw-next/01-core/csf-thinking-framework.md +14 -14
- package/.aodw-next/01-core/git-discipline-summary.md +36 -0
- package/.aodw-next/01-core/git-discipline.md +129 -73
- package/.aodw-next/01-core/module-doc-rules.md +2 -2
- package/.aodw-next/02-workflow/rt-id-generation-rules.md +16 -259
- package/.aodw-next/02-workflow/rt-manager-summary.md +1 -1
- package/.aodw-next/02-workflow/rt-manager.md +73 -344
- package/.aodw-next/02-workflow/spec-full-profile.md +149 -307
- package/.aodw-next/02-workflow/spec-lite-profile.md +170 -253
- package/.aodw-next/02-workflow/ui-workflow-rules-summary.md +39 -0
- package/.aodw-next/02-workflow/ui-workflow-rules.md +57 -292
- package/.aodw-next/03-standards/ai-coding-rules-common.md +1 -1
- package/.aodw-next/03-standards/ai-coding-rules.md +91 -25
- package/.aodw-next/03-standards/stacks/java-springboot/ai-coding-rules-backend.md +9 -9
- package/.aodw-next/03-standards/stacks/python-fastapi/ai-coding-rules-backend.md +13 -13
- package/.aodw-next/03-standards/stacks/react-typescript/ai-coding-rules-frontend.md +10 -10
- package/.aodw-next/03-standards/stacks/rust-axum/ai-coding-rules-backend.md +4 -4
- package/.aodw-next/03-standards/stacks/vue2/ai-coding-rules-frontend.md +9 -9
- package/.aodw-next/04-auditors/aodw-development-auditor-rules.md +15 -10
- package/.aodw-next/04-auditors/aodw-full-auditor-rules.md +14 -14
- package/.aodw-next/04-auditors/aodw-requirement-auditor-rules.md +130 -338
- package/.aodw-next/05-tooling/ai-tools-init-rules.md +74 -367
- package/.aodw-next/06-project/README.md +16 -0
- package/.aodw-next/07-optimization/token-usage-analysis.md +2 -2
- package/.aodw-next/README.md +53 -20
- package/.aodw-next/SKILL.md +32 -0
- package/.aodw-next/config.yaml +2 -2
- package/.aodw-next/manifest.yaml +64 -57
- package/.aodw-next/project.yaml +1 -0
- package/.aodw-next/templates/TEMPLATE-APPLICATION-GUIDE.md +21 -157
- package/.aodw-next/templates/ai-overview.template.md +72 -0
- package/.aodw-next/templates/aodw-kernel-loader-template.md +19 -19
- package/.aodw-next/templates/checklists/coding-standards-template.md +24 -4
- package/.aodw-next/templates/modules-index.template.yaml +13 -0
- package/.aodw-next/templates/plan-lite-template.md +9 -0
- package/.aodw-next/templates/rt-intake-template.md +2 -2
- package/.aodw-next/templates/rt-meta-template.yaml +2 -2
- package/.aodw-next/templates/spec-lite-template.md +9 -0
- package/.aodw-next/templates/tools-config/README.md +1 -1
- package/.aodw-next/templates/tools-config/backend/clippy.config.template.toml +5 -0
- package/.aodw-next/templates/tools-config/backend/rustfmt.config.template.toml +4 -0
- package/.aodw-next/tools-status.yaml +51 -0
- package/AODW_Adapters/antigravity/.agent/rules/aodw-next.md +2 -2
- package/AODW_Adapters/claude/CLAUDE.md +2 -2
- package/AODW_Adapters/cursor/.cursor/rules/aodw-next.mdc +2 -2
- package/AODW_Adapters/gemini/.agent/rules/aodw-next.md +2 -2
- package/AODW_Adapters/gemini/GEMINI.md +6 -5
- package/AODW_Adapters/general/AGENTS.md +2 -2
- package/README.md +62 -45
- package/bin/aodw.js +44 -16
- package/bin/commands/init-overview.js +3 -3
- package/bin/commands/init-tools.js +34 -51
- package/bin/utils/config.js +1 -1
- package/package.json +1 -1
- package/.aodw-next/.aodw-next/01-core/ai-interaction-rules.md +0 -218
- package/.aodw-next/.aodw-next/01-core/ai-knowledge-rules.md +0 -302
- package/.aodw-next/.aodw-next/01-core/ai-project-overview-rules.md +0 -284
- package/.aodw-next/.aodw-next/01-core/aodw-constitution-summary.md +0 -20
- package/.aodw-next/.aodw-next/01-core/aodw-constitution.md +0 -419
- package/.aodw-next/.aodw-next/01-core/csf-thinking-framework.md +0 -373
- package/.aodw-next/.aodw-next/01-core/git-discipline.md +0 -226
- package/.aodw-next/.aodw-next/01-core/module-doc-rules.md +0 -90
- package/.aodw-next/.aodw-next/02-workflow/aodw-development-stages.md +0 -235
- package/.aodw-next/.aodw-next/02-workflow/rt-id-generation-rules.md +0 -267
- package/.aodw-next/.aodw-next/02-workflow/rt-manager-summary.md +0 -15
- package/.aodw-next/.aodw-next/02-workflow/rt-manager.md +0 -399
- package/.aodw-next/.aodw-next/02-workflow/spec-full-profile-summary.md +0 -13
- package/.aodw-next/.aodw-next/02-workflow/spec-full-profile.md +0 -391
- package/.aodw-next/.aodw-next/02-workflow/spec-lite-profile.md +0 -313
- package/.aodw-next/.aodw-next/02-workflow/ui-workflow-rules.md +0 -334
- package/.aodw-next/.aodw-next/03-standards/ai-coding-rules-common.md +0 -89
- package/.aodw-next/.aodw-next/03-standards/ai-coding-rules.md +0 -370
- package/.aodw-next/.aodw-next/03-standards/stacks/java-springboot/ai-coding-rules-backend.md +0 -231
- package/.aodw-next/.aodw-next/03-standards/stacks/python-fastapi/ai-coding-rules-backend.md +0 -612
- package/.aodw-next/.aodw-next/03-standards/stacks/react-typescript/ai-coding-rules-frontend.md +0 -291
- package/.aodw-next/.aodw-next/03-standards/stacks/rust-axum/ai-coding-rules-backend.md +0 -134
- package/.aodw-next/.aodw-next/03-standards/stacks/vue2/ai-coding-rules-frontend.md +0 -220
- package/.aodw-next/.aodw-next/03-standards/ui-kit/ui-kit.md +0 -163
- package/.aodw-next/.aodw-next/04-auditors/aodw-development-auditor-rules.md +0 -470
- package/.aodw-next/.aodw-next/04-auditors/aodw-full-auditor-rules.md +0 -365
- package/.aodw-next/.aodw-next/04-auditors/aodw-requirement-auditor-rules.md +0 -408
- package/.aodw-next/.aodw-next/05-tooling/ai-tools-init-rules.md +0 -676
- package/.aodw-next/.aodw-next/06-project/ai-overview.md +0 -116
- package/.aodw-next/.aodw-next/06-project/modules-index.yaml +0 -11
- package/.aodw-next/.aodw-next/07-optimization/token-usage-analysis.md +0 -253
- package/.aodw-next/.aodw-next/README.md +0 -26
- package/.aodw-next/.aodw-next/RELEASE-CHECKLIST.md +0 -144
- package/.aodw-next/.aodw-next/config.yaml +0 -2
- package/.aodw-next/.aodw-next/manifest.yaml +0 -98
- package/.aodw-next/.aodw-next/templates/SOURCE-TO-DISTRIBUTION-GUIDE.md +0 -276
- package/.aodw-next/.aodw-next/templates/TEMPLATE-APPLICATION-GUIDE.md +0 -246
- package/.aodw-next/.aodw-next/templates/aodw-kernel-loader-template.md +0 -70
- package/.aodw-next/.aodw-next/templates/audit-report-template.md +0 -232
- package/.aodw-next/.aodw-next/templates/changelog-template.md +0 -16
- package/.aodw-next/.aodw-next/templates/checklists/coding-standards-template.md +0 -110
- package/.aodw-next/.aodw-next/templates/csf-review-template.md +0 -201
- package/.aodw-next/.aodw-next/templates/impact-template.md +0 -17
- package/.aodw-next/.aodw-next/templates/invariants-template.md +0 -12
- package/.aodw-next/.aodw-next/templates/module-readme-template.md +0 -39
- package/.aodw-next/.aodw-next/templates/plan-lite-template.md +0 -11
- package/.aodw-next/.aodw-next/templates/rt-decision-template.md +0 -13
- package/.aodw-next/.aodw-next/templates/rt-intake-template.md +0 -33
- package/.aodw-next/.aodw-next/templates/rt-meta-template.yaml +0 -43
- package/.aodw-next/.aodw-next/templates/spec-lite-template.md +0 -17
- package/.aodw-next/.aodw-next/templates/tests-template.md +0 -13
- package/.aodw-next/.aodw-next/templates/tools-config/README.md +0 -112
- package/.aodw-next/.aodw-next/templates/tools-config/backend/black.config.template.toml +0 -6
- package/.aodw-next/.aodw-next/templates/tools-config/backend/pre-commit.config.template.yaml +0 -16
- package/.aodw-next/.aodw-next/templates/tools-config/backend/ruff.config.template.toml +0 -23
- package/.aodw-next/.aodw-next/templates/tools-config/frontend/eslint.config.template.json +0 -113
- package/.aodw-next/.aodw-next/templates/tools-config/frontend/prettier.config.template.json +0 -10
- package/.aodw-next/.aodw-next/templates/tools-config/frontend/tsconfig.paths.template.json +0 -11
- package/.aodw-next/.aodw-next/workflow-guide.md +0 -51
- package/.aodw-next/01-core/aodw-constitution-summary.md +0 -20
- package/.aodw-next/02-workflow/aodw-development-stages.md +0 -235
- package/.aodw-next/02-workflow/spec-full-profile-summary.md +0 -13
- package/.aodw-next/06-project/ai-overview.md +0 -116
- package/.aodw-next/06-project/modules-index.yaml +0 -11
- package/.aodw-next/RELEASE-CHECKLIST.md +0 -144
- package/.aodw-next/templates/SOURCE-TO-DISTRIBUTION-GUIDE.md +0 -276
- package/.aodw-next/workflow-guide.md +0 -51
|
@@ -3,25 +3,63 @@
|
|
|
3
3
|
本文件定义 AODW 工作流中必须遵守的 Git 操作规范。
|
|
4
4
|
这些规则旨在确保代码历史清晰、可回溯,并便于自动化工具检查。
|
|
5
5
|
|
|
6
|
-
>
|
|
6
|
+
> **核心原则**:AI 可以执行所有 Git 操作,但涉及不可逆操作前必须向用户明确确认,获得同意后立即执行。
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
## 0. AI 操作边界
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
- 创建 feature 分支
|
|
14
|
-
- 切换分支
|
|
15
|
-
- 提交代码(`git add` + `git commit`)
|
|
16
|
-
- 创建标签(仅限特殊情况,如发布流程)
|
|
12
|
+
### 核心原则:确认门控执行(Confirm-Gated Execution)
|
|
17
13
|
|
|
18
|
-
|
|
19
|
-
- 合并分支(`git merge`)
|
|
20
|
-
- 推送到远程(`git push`)
|
|
21
|
-
- 删除分支(`git branch -d`)
|
|
22
|
-
- 变基操作(`git rebase`)
|
|
14
|
+
AI 可以执行所有 Git 操作,包括提交、合并、推送、打标签、创建和清理 worktree 等。
|
|
23
15
|
|
|
24
|
-
|
|
16
|
+
**凡涉及不可逆操作,AI 必须在执行前向用户做明确确认,获得用户同意后立即执行。**
|
|
17
|
+
|
|
18
|
+
> 背景:用户主要通过语音与 AI 交互,AI 是唯一的操作执行手。"提供脚本让用户手动执行"的模式不再适用。
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
### 需要确认门控的操作
|
|
23
|
+
|
|
24
|
+
| 操作 | 确认内容要点 |
|
|
25
|
+
|------|------------|
|
|
26
|
+
| `git commit` | 提交哪些文件、commit message 是什么、关联哪个 RT |
|
|
27
|
+
| `git merge --no-ff` | 从哪个分支合并到哪里、是否存在冲突风险 |
|
|
28
|
+
| `git push` | 推送到哪个远程、推送内容(分支 + tag) |
|
|
29
|
+
| `git tag` | 打什么 tag、打在哪个 commit 上 |
|
|
30
|
+
| `git worktree add` | 创建哪个 worktree、挂载哪个分支、对应哪个 RT |
|
|
31
|
+
| `git worktree remove` | 删除哪个 worktree、确认该 RT 已完成合并 |
|
|
32
|
+
| `git branch -d` | 删除哪个本地分支 |
|
|
33
|
+
|
|
34
|
+
### 确认格式规范
|
|
35
|
+
|
|
36
|
+
确认话术必须满足:
|
|
37
|
+
- **简短**:不超过 3 句话
|
|
38
|
+
- **明确**:说清楚做什么、影响是什么、是否可撤销
|
|
39
|
+
- **二选一**:以"要我现在执行吗?"结尾,用户回答"可以"即执行
|
|
40
|
+
|
|
41
|
+
**示例:**
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
合并前:
|
|
45
|
+
"RT-XXX 的代码已全部提交,我准备将 feature/RT-XXX-short-name 合并到 master,
|
|
46
|
+
使用 --no-ff 保留分支历史,随后打 done-RT-XXX 标签并推送。合并后无法撤销。要我现在执行吗?"
|
|
47
|
+
|
|
48
|
+
Worktree 清理:
|
|
49
|
+
"RT-XXX 已合并完成,我准备删除本地 worktree 目录 VoiceX-RT-XXX/ 和
|
|
50
|
+
feature/RT-XXX-short-name 分支。要我现在执行吗?"
|
|
51
|
+
|
|
52
|
+
代码提交:
|
|
53
|
+
"我准备提交以下文件到 feature/RT-XXX:[文件列表],
|
|
54
|
+
commit message 为 'feat(stt): xxx — Refs: RT-XXX'。要我现在执行吗?"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 无需确认、AI 可直接执行的操作
|
|
58
|
+
|
|
59
|
+
- 读取文件、查看 git log / status / diff
|
|
60
|
+
- 创建 RT 目录和文档
|
|
61
|
+
- 创建 feature 分支(`git checkout -b`)
|
|
62
|
+
- 切换到已存在的分支(`git checkout`)
|
|
25
63
|
|
|
26
64
|
---
|
|
27
65
|
|
|
@@ -45,11 +83,50 @@ feature/RT-{seq}-{short-name}
|
|
|
45
83
|
|
|
46
84
|
---
|
|
47
85
|
|
|
48
|
-
## 2.
|
|
86
|
+
## 2. Worktree 管理 (Worktree Management)
|
|
87
|
+
|
|
88
|
+
### 2.0 核心约定
|
|
89
|
+
|
|
90
|
+
**一个 RT = 一个 Worktree = 一个 Feature 分支**,三者 RT 序号严格对齐。
|
|
91
|
+
|
|
92
|
+
| 角色 | 路径 | 分支 |
|
|
93
|
+
|------|------|------|
|
|
94
|
+
| 主仓库 | `~/VoiceX-0409/VoiceX/` | `master`(只读参考,禁止在此改代码)|
|
|
95
|
+
| RT 工作区 | `~/VoiceX-0409/VoiceX-RT-{seq}/` | `feature/RT-{seq}-{name}` |
|
|
96
|
+
|
|
97
|
+
### 2.1 创建 Worktree(Decision 阶段)
|
|
98
|
+
|
|
99
|
+
feature 分支创建完成后,AI 向用户确认 worktree 创建,用户同意后执行:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
git worktree add ../VoiceX-RT-XXX feature/RT-XXX-short-name
|
|
103
|
+
git worktree list # 验证
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**并行 RT 冲突检查(必须执行)**:创建新 worktree 前,AI 读取 `RT/index.yaml`,检查所有 `in-progress` 状态的 RT 是否与新 RT 涉及同一模块。如有重叠,向用户明确告知冲突范围和合并风险,由用户决策是否继续。
|
|
107
|
+
|
|
108
|
+
### 2.2 工具隔离原则
|
|
109
|
+
|
|
110
|
+
每个 AI 工具实例(Cursor / Codex 等)只能读写自己绑定的 worktree 目录,禁止跨目录操作。多个实例可并行工作于各自的 worktree,互不干扰。
|
|
111
|
+
|
|
112
|
+
### 2.3 Merge 顺序
|
|
113
|
+
|
|
114
|
+
多个 RT 同时完成时,合并顺序、冲突解决全部由用户决定,AI 不推断合并优先级。
|
|
115
|
+
|
|
116
|
+
### 2.4 状态检查命令
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
git worktree list # 查看所有 worktree
|
|
120
|
+
git worktree prune --dry-run # 检查可清理的 worktree
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 3. 提交信息 (Commit Message)
|
|
49
126
|
|
|
50
127
|
提交信息必须遵循 Conventional Commits 规范,并包含 RT 引用。
|
|
51
128
|
|
|
52
|
-
###
|
|
129
|
+
### 3.1 格式模板
|
|
53
130
|
```text
|
|
54
131
|
<type>(<scope>): <subject>
|
|
55
132
|
|
|
@@ -58,7 +135,7 @@ feature/RT-{seq}-{short-name}
|
|
|
58
135
|
Refs: <RT-ID>
|
|
59
136
|
```
|
|
60
137
|
|
|
61
|
-
###
|
|
138
|
+
### 3.2 字段说明
|
|
62
139
|
- **type**:
|
|
63
140
|
- `feat`: 新功能
|
|
64
141
|
- `fix`: 修复 bug
|
|
@@ -72,7 +149,7 @@ Refs: <RT-ID>
|
|
|
72
149
|
- **subject**: 简短描述,使用祈使句,不加句号。
|
|
73
150
|
- **Refs**: (必须) 关联的 RT ID,用于链接 Git 历史与需求文档。
|
|
74
151
|
|
|
75
|
-
###
|
|
152
|
+
### 3.3 示例
|
|
76
153
|
```text
|
|
77
154
|
fix(auth): handle token expiration gracefully
|
|
78
155
|
|
|
@@ -83,67 +160,67 @@ Refs: RT-001
|
|
|
83
160
|
|
|
84
161
|
---
|
|
85
162
|
|
|
86
|
-
##
|
|
163
|
+
## 4. 标签 (Tagging)
|
|
87
164
|
|
|
88
165
|
当一个 RT 完成并合并到主分支后,必须打标签以标记里程碑。
|
|
89
166
|
|
|
90
|
-
###
|
|
167
|
+
### 4.1 命名格式
|
|
91
168
|
```text
|
|
92
169
|
done-<RT-ID>
|
|
93
170
|
```
|
|
94
171
|
|
|
95
|
-
###
|
|
172
|
+
### 4.2 示例
|
|
96
173
|
- ✅ `done-RT-001`
|
|
97
174
|
- ✅ `done-RT-042`
|
|
98
175
|
|
|
99
176
|
---
|
|
100
177
|
|
|
101
|
-
##
|
|
178
|
+
## 5. 合并策略 (Merge Strategy)
|
|
102
179
|
|
|
103
180
|
- **禁止 Fast-forward**: 合并 Feature 分支时应使用 `--no-ff`,以保留分支历史。
|
|
104
181
|
- **Squash**: 对于琐碎的提交(如 "fix typo", "update"),建议在合并前进行 Squash,但保留关键的逻辑提交。
|
|
105
182
|
|
|
106
183
|
---
|
|
107
184
|
|
|
108
|
-
##
|
|
185
|
+
## 6. 合并前检查清单 (Pre-Merge Checklist)
|
|
109
186
|
|
|
110
187
|
在合并 feature 分支到主分支前,必须完成以下检查:
|
|
111
188
|
|
|
112
|
-
###
|
|
189
|
+
### 6.1 功能检查
|
|
113
190
|
- [ ] 功能测试通过
|
|
114
191
|
- [ ] 单元测试通过
|
|
115
192
|
- [ ] 集成测试通过(如适用)
|
|
116
193
|
|
|
117
|
-
###
|
|
194
|
+
### 6.2 编码规范检查(必须)
|
|
118
195
|
|
|
119
196
|
> **注意**:编码规范检查是合并的硬性要求,未通过编码规范检查的代码不能合并。
|
|
120
197
|
|
|
121
198
|
- [ ] **前端编码规范**(如涉及):
|
|
122
199
|
- [ ] ESLint 检查全部通过
|
|
123
200
|
- [ ] Prettier 格式化已运行
|
|
124
|
-
- [ ] 目录结构和分层符合规范(参考 `.aodw/03-standards/stacks/react-typescript/ai-coding-rules-frontend.md`)
|
|
201
|
+
- [ ] 目录结构和分层符合规范(参考 `.aodw-next/03-standards/stacks/react-typescript/ai-coding-rules-frontend.md`)
|
|
125
202
|
- [ ] 文件大小和复杂度符合规范(页面 ≤ 300 行,组件 ≤ 200 行,函数 ≤ 60 行,复杂度 ≤ 10)
|
|
126
203
|
- [ ] **后端编码规范**(如涉及):
|
|
127
204
|
- [ ] Ruff 检查全部通过
|
|
128
205
|
- [ ] Black 格式化已运行
|
|
129
|
-
- [ ] 分层架构符合规范(api → services → repositories,参考 `.aodw/03-standards/stacks/python-fastapi/ai-coding-rules-backend.md`)
|
|
206
|
+
- [ ] 分层架构符合规范(api → services → repositories,参考 `.aodw-next/03-standards/stacks/python-fastapi/ai-coding-rules-backend.md`)
|
|
130
207
|
- [ ] 文件大小和复杂度符合规范(模块 ≤ 300 行,函数 ≤ 60 行)
|
|
131
208
|
- [ ] **通用编码规范**:
|
|
132
|
-
- [ ] 文件大小符合规范(参考 `.aodw/03-standards/ai-coding-rules-common.md`)
|
|
209
|
+
- [ ] 文件大小符合规范(参考 `.aodw-next/03-standards/ai-coding-rules-common.md`)
|
|
133
210
|
- [ ] 函数/方法长度符合规范
|
|
134
211
|
- [ ] 复杂度符合规范
|
|
135
212
|
|
|
136
|
-
###
|
|
213
|
+
### 6.3 文档检查
|
|
137
214
|
- [ ] 相关文档已更新(spec / plan / changelog)
|
|
138
215
|
- [ ] 模块 README 已更新(如涉及)
|
|
139
216
|
|
|
140
|
-
###
|
|
217
|
+
### 6.4 CI 检查
|
|
141
218
|
- [ ] CI 检查全部通过
|
|
142
219
|
- [ ] 代码覆盖率符合要求(如适用)
|
|
143
220
|
|
|
144
221
|
---
|
|
145
222
|
|
|
146
|
-
##
|
|
223
|
+
## 7. 自动化检查 (Automation)
|
|
147
224
|
|
|
148
225
|
AI 或 CI 工具应检查:
|
|
149
226
|
|
|
@@ -164,63 +241,42 @@ AI 或 CI 工具应检查:
|
|
|
164
241
|
|
|
165
242
|
---
|
|
166
243
|
|
|
167
|
-
##
|
|
244
|
+
## 8. RT 完成流程 (Completion Workflow)
|
|
168
245
|
|
|
169
|
-
当 RT 的所有工作完成后,AI
|
|
246
|
+
当 RT 的所有工作完成后,AI 按以下步骤逐一向用户确认并执行。
|
|
170
247
|
|
|
171
|
-
### Step 1
|
|
172
|
-
AI 自动执行:
|
|
248
|
+
### Step 1:知识蒸馏(自动执行,无需确认)
|
|
173
249
|
1. 读取 `modules-index.yaml`,找到受影响的模块
|
|
174
250
|
2. 更新对应的模块文档(`docs/modules/*.md`)
|
|
175
|
-
3.
|
|
176
|
-
|
|
177
|
-
### Step 2: 提供完成脚本
|
|
178
|
-
AI **不得自动执行**,而应提供完整的手动命令脚本,例如:
|
|
179
|
-
|
|
180
|
-
```bash
|
|
181
|
-
# RT-XXX 完成脚本(请逐行检查后执行)
|
|
182
|
-
|
|
183
|
-
# 1. 确认当前在 feature 分支
|
|
184
|
-
git branch
|
|
251
|
+
3. 向用户报告更新结果
|
|
185
252
|
|
|
186
|
-
|
|
187
|
-
git status
|
|
253
|
+
### Step 2:确认合并
|
|
188
254
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
git pull origin main
|
|
255
|
+
AI 向用户确认:
|
|
256
|
+
> "RT-XXX 的知识蒸馏已完成。我准备将 feature/RT-XXX-short-name 合并到 master,使用 --no-ff 保留分支历史,随后打 done-RT-XXX 标签并推送到远程。合并后无法撤销。要我现在执行吗?"
|
|
192
257
|
|
|
193
|
-
|
|
258
|
+
用户确认后,AI 依次执行:
|
|
259
|
+
```bash
|
|
260
|
+
git checkout master
|
|
261
|
+
git pull origin master
|
|
194
262
|
git merge --no-ff feature/RT-XXX-short-name
|
|
195
|
-
|
|
196
|
-
# 5. 打标签
|
|
197
263
|
git tag done-RT-XXX
|
|
198
|
-
|
|
199
|
-
# 6. 推送代码和标签
|
|
200
|
-
git push origin main
|
|
264
|
+
git push origin master
|
|
201
265
|
git push origin done-RT-XXX
|
|
202
|
-
|
|
203
|
-
# 7. 删除本地 feature 分支
|
|
204
|
-
git branch -d feature/RT-XXX-short-name
|
|
205
|
-
|
|
206
|
-
# 8. 更新 RT 状态
|
|
207
|
-
# 编辑 RT/index.yaml,将 RT-XXX 的 status 改为 done
|
|
208
266
|
```
|
|
209
267
|
|
|
210
|
-
### Step 3
|
|
211
|
-
用户应:
|
|
212
|
-
1. **验证代码质量**:Review 代码改动,运行测试
|
|
213
|
-
2. **验证文档更新**:检查模块文档是否准确
|
|
214
|
-
3. **手动执行脚本**:逐行检查并执行上述命令
|
|
215
|
-
4. **验证推送结果**:确认远程仓库已更新
|
|
268
|
+
### Step 3:确认清理
|
|
216
269
|
|
|
217
|
-
|
|
270
|
+
AI 向用户确认:
|
|
271
|
+
> "RT-XXX 已成功合并并推送。我准备删除本地 worktree 目录 VoiceX-RT-XXX/ 和 feature/RT-XXX-short-name 分支,并更新 RT/index.yaml 状态为 done。要我现在执行吗?"
|
|
218
272
|
|
|
219
|
-
|
|
273
|
+
用户确认后,AI 依次执行:
|
|
274
|
+
```bash
|
|
275
|
+
git worktree remove ../VoiceX-RT-XXX
|
|
276
|
+
git branch -d feature/RT-XXX-short-name
|
|
277
|
+
# 更新 RT/index.yaml:RT-XXX status → done
|
|
278
|
+
```
|
|
220
279
|
|
|
221
|
-
|
|
222
|
-
- 用户明确说"直接 push"、"自动推送"等
|
|
223
|
-
- 紧急 hotfix 场景(需事先约定)
|
|
224
|
-
- 自动化发布流程(如 CI/CD)
|
|
280
|
+
### Step 4:播报完成
|
|
225
281
|
|
|
226
|
-
|
|
282
|
+
> "RT-XXX 全部完成。master 已更新,标签 done-RT-XXX 已推送,worktree 已清理。"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
1. 每个模块必须有 README
|
|
2
2
|
|
|
3
3
|
新模板文件:
|
|
4
|
-
.aodw/templates/module-readme-template.md
|
|
4
|
+
.aodw-next/templates/module-readme-template.md
|
|
5
5
|
|
|
6
6
|
内容包括:
|
|
7
7
|
# <模块名称>
|
|
@@ -64,7 +64,7 @@ AI 必须同时在 RT 的 invariants.md 和 module README 里更新对应说明
|
|
|
64
64
|
3. 模块总索引
|
|
65
65
|
|
|
66
66
|
新增文件:
|
|
67
|
-
.aodw/06-project/modules-index.yaml
|
|
67
|
+
.aodw-next/06-project/modules-index.yaml
|
|
68
68
|
|
|
69
69
|
格式:
|
|
70
70
|
version: 1
|
|
@@ -1,267 +1,24 @@
|
|
|
1
|
-
# RT-ID
|
|
1
|
+
# RT-ID 生成规则(本地模式)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## 0. 强制策略
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
AODW 使用**本地生成 RT-ID**,不依赖远程服务。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 1. 生成逻辑
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
1. 扫描项目 `RT/` 目录下所有 `RT-XXX` 格式的目录
|
|
10
|
+
2. 找到最大序号 `N`
|
|
11
|
+
3. 生成新 ID:`RT-{N+1}`(补零到 3 位,如 `RT-001`, `RT-002`)
|
|
12
|
+
4. 如果生成的 ID 对应的目录已存在:递增序号直到找到可用 ID
|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
## 2. 检查清单
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
- [ ] 已扫描 `RT/` 目录找到最大序号
|
|
17
|
+
- [ ] 已生成 `RT-{N+1}` 格式的 ID
|
|
18
|
+
- [ ] 已确认该 ID 对应的目录不存在
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
- 如果 `mode === 'collaborative'`:协作模式(从远程服务器获取)
|
|
19
|
-
- 如果 `mode === 'independent'` 或未设置:独立模式(本地生成)
|
|
20
|
-
- 如果 `mode` 字段不存在:默认为独立模式
|
|
20
|
+
## 3. 格式规范
|
|
21
21
|
|
|
22
|
-
3
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## 2. 协作模式(Collaborative Mode)
|
|
28
|
-
|
|
29
|
-
**适用场景**:团队协作开发,需要统一的 RT-ID 分配,避免 ID 冲突。
|
|
30
|
-
|
|
31
|
-
**配置要求**:
|
|
32
|
-
```yaml
|
|
33
|
-
# .aodw/config.yaml
|
|
34
|
-
mode: collaborative
|
|
35
|
-
server_url: http://114.67.218.31:2005 # 或团队自定义服务器地址
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
**RT-ID 获取流程**:
|
|
39
|
-
|
|
40
|
-
1. **验证配置**
|
|
41
|
-
- ✅ 检查 `mode === 'collaborative'`
|
|
42
|
-
- ✅ 检查 `server_url` 是否存在且非空
|
|
43
|
-
- ❌ 如果 `server_url` 为空:**立即报错**,提示用户配置服务器地址
|
|
44
|
-
|
|
45
|
-
2. **调用远程 API**
|
|
46
|
-
- 端点:`{server_url}/api/next-id?project={project_name}`
|
|
47
|
-
- 方法:`GET`
|
|
48
|
-
- 默认服务器:`http://114.67.218.31:2005`
|
|
49
|
-
- ⚠️ **强制要求**:**必须**带上 `project` 参数,否则服务器无法正确分配 ID
|
|
50
|
-
- 项目名获取优先级:
|
|
51
|
-
1. 命令行参数 `--project <name>`
|
|
52
|
-
2. `.aodw/project.yaml` 的 `project_name` 字段
|
|
53
|
-
3. `package.json` 的 `name` 字段
|
|
54
|
-
4. 当前目录名(fallback)
|
|
55
|
-
|
|
56
|
-
3. **处理响应**
|
|
57
|
-
- 成功:使用返回的 `id` 字段(格式:`RT-XXX`)
|
|
58
|
-
- 失败:提示错误信息,询问是否降级到本地生成(**不推荐**,可能导致冲突)
|
|
59
|
-
|
|
60
|
-
4. **本地 vs 服务器 ID 冲突处理**(⚠️ 重要)
|
|
61
|
-
|
|
62
|
-
**问题场景**:服务器返回的 ID 可能小于本地已有的最大 ID(例如离线创建或服务器数据不同步)。
|
|
63
|
-
|
|
64
|
-
**强制规则**:
|
|
65
|
-
- 获取服务器 ID 后,必须与本地最大 ID 比较
|
|
66
|
-
- 如果 `服务器 ID ≤ 本地最大 ID`,则使用 `本地最大 ID + 1`
|
|
67
|
-
- 同时调用服务器 API 更新服务器端的计数器
|
|
68
|
-
|
|
69
|
-
**比较逻辑**:
|
|
70
|
-
```
|
|
71
|
-
serverSeq = 从服务器 ID 提取序号(如 RT-015 → 15)
|
|
72
|
-
localMaxSeq = 本地 RT/ 目录下最大序号(如已有 RT-016 → 16)
|
|
73
|
-
|
|
74
|
-
if (serverSeq <= localMaxSeq) {
|
|
75
|
-
finalSeq = localMaxSeq + 1
|
|
76
|
-
finalId = `RT-${padStart(finalSeq, 3, '0')}`
|
|
77
|
-
// 调用服务器 API 更新计数器
|
|
78
|
-
syncIdToServer(serverUrl, project, finalSeq)
|
|
79
|
-
} else {
|
|
80
|
-
finalId = 服务器返回的 ID
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**服务器同步 API**:
|
|
85
|
-
- 端点:`{server_url}/api/sync-id?project={project_name}&seq={finalSeq}`
|
|
86
|
-
- 方法:`POST`
|
|
87
|
-
- 作用:将服务器计数器更新为 `finalSeq`,确保下次获取的 ID 正确
|
|
88
|
-
|
|
89
|
-
5. **错误处理**
|
|
90
|
-
- 网络错误:提示检查网络连接和服务器状态
|
|
91
|
-
- 服务器错误:提示联系管理员或检查服务器配置
|
|
92
|
-
- 超时:提示重试或检查服务器状态
|
|
93
|
-
- 同步失败:记录警告,但不阻塞 RT 创建
|
|
94
|
-
|
|
95
|
-
**示例代码逻辑**:
|
|
96
|
-
```javascript
|
|
97
|
-
if (userConfig.mode === 'collaborative') {
|
|
98
|
-
if (!serverUrl || serverUrl.trim() === '') {
|
|
99
|
-
// 必须报错,不能静默降级
|
|
100
|
-
throw new Error('Collaborative mode requires server_url');
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// ⚠️ 必须带上项目标识
|
|
104
|
-
// 项目名获取优先级:命令行参数 > .aodw/project.yaml > package.json > 目录名
|
|
105
|
-
const project = getProjectName(); // 必须获取项目标识
|
|
106
|
-
|
|
107
|
-
// 调用远程 API(必须带上 project 参数)
|
|
108
|
-
let serverId = await fetchIdFromServer(serverUrl, project);
|
|
109
|
-
let serverSeq = parseInt(serverId.replace('RT-', ''), 10);
|
|
110
|
-
|
|
111
|
-
// 获取本地最大 ID
|
|
112
|
-
let localMaxSeq = getLocalMaxSeq();
|
|
113
|
-
|
|
114
|
-
// 比较并选择
|
|
115
|
-
if (serverSeq <= localMaxSeq) {
|
|
116
|
-
let finalSeq = localMaxSeq + 1;
|
|
117
|
-
id = `RT-${String(finalSeq).padStart(3, '0')}`;
|
|
118
|
-
console.warn(`服务器 ID (${serverId}) ≤ 本地最大 ID (RT-${localMaxSeq}),使用本地 ID: ${id}`);
|
|
119
|
-
|
|
120
|
-
// 同步到服务器(必须带上 project 参数)
|
|
121
|
-
await syncIdToServer(serverUrl, project, finalSeq);
|
|
122
|
-
} else {
|
|
123
|
-
id = serverId;
|
|
124
|
-
}
|
|
125
|
-
} else {
|
|
126
|
-
// 独立模式:强制本地生成,忽略 server_url
|
|
127
|
-
id = getLocalNextId();
|
|
128
|
-
// 即使配置了 server_url,也不会联网
|
|
129
|
-
}
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## 3. 独立模式(Independent Mode)
|
|
136
|
-
|
|
137
|
-
**适用场景**:个人开发或小团队,不需要统一的 ID 分配。
|
|
138
|
-
|
|
139
|
-
**配置要求**:
|
|
140
|
-
```yaml
|
|
141
|
-
# .aodw/config.yaml
|
|
142
|
-
mode: independent
|
|
143
|
-
# server_url 即使配置也会被忽略,不会联网
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
**RT-ID 获取流程**:
|
|
147
|
-
|
|
148
|
-
1. **强制本地生成**
|
|
149
|
-
- ⚠️ **关键规则**:独立模式下**必须**使用本地生成,**禁止**联网获取
|
|
150
|
-
- 即使配置了 `server_url`,也会被忽略,不会发起任何网络请求
|
|
151
|
-
- 这是为了确保用户选择独立模式后,完全离线工作
|
|
152
|
-
|
|
153
|
-
2. **本地生成逻辑**
|
|
154
|
-
- 扫描 `RT/` 目录下所有 `RT-XXX` 格式的目录
|
|
155
|
-
- 找到最大序号 `N`
|
|
156
|
-
- 生成新 ID:`RT-{N+1}`(补零到 3 位,如 `RT-001`, `RT-002`)
|
|
157
|
-
|
|
158
|
-
3. **冲突检查**
|
|
159
|
-
- 如果生成的 ID 对应的目录已存在:递增序号直到找到可用 ID
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
|
-
## 4. 决策树(Decision Tree)
|
|
164
|
-
|
|
165
|
-
AI 在创建 RT 时必须遵循以下决策树:
|
|
166
|
-
|
|
167
|
-
```
|
|
168
|
-
开始创建 RT
|
|
169
|
-
↓
|
|
170
|
-
读取 .aodw/config.yaml
|
|
171
|
-
↓
|
|
172
|
-
mode 字段存在?
|
|
173
|
-
├─ 是 → mode === 'collaborative'?
|
|
174
|
-
│ ├─ 是 → 检查 server_url
|
|
175
|
-
│ │ ├─ 存在且非空 → 调用远程 API 获取 RT-ID
|
|
176
|
-
│ │ └─ 不存在或为空 → ❌ 报错,提示配置服务器
|
|
177
|
-
│ └─ 否 → 独立模式
|
|
178
|
-
│ └─ 本地生成 RT-ID(忽略 server_url)
|
|
179
|
-
└─ 否 → 独立模式(默认)
|
|
180
|
-
└─ 本地生成 RT-ID
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
## 5. 强制检查清单
|
|
186
|
-
|
|
187
|
-
AI 在获取 RT-ID 前必须完成以下检查:
|
|
188
|
-
|
|
189
|
-
- [ ] ✅ 已读取 `.aodw/config.yaml` 文件
|
|
190
|
-
- [ ] ✅ 已确定 `mode` 字段的值
|
|
191
|
-
- [ ] ✅ 如果是协作模式,已验证 `server_url` 存在且非空
|
|
192
|
-
- [ ] ✅ 已确定项目名称(从 `.aodw/project.yaml` 或目录名获取)
|
|
193
|
-
- [ ] ✅ 已按照决策树执行相应的获取流程
|
|
194
|
-
- [ ] ✅ 已验证获取到的 RT-ID 格式正确(`RT-XXX`)
|
|
195
|
-
- [ ] ✅ 已检查 RT-ID 对应的目录不存在(避免冲突)
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## 6. 常见错误与处理
|
|
200
|
-
|
|
201
|
-
| 错误情况 | 原因 | 处理方式 |
|
|
202
|
-
| ----------------- | ---------------------- | ------------------------------------------- |
|
|
203
|
-
| `server_url` 为空 | 协作模式下未配置服务器 | ❌ **必须报错**,提示运行 `aodw config` 配置 |
|
|
204
|
-
| 网络连接失败 | 无法访问远程服务器 | 提示检查网络,询问是否降级(警告风险) |
|
|
205
|
-
| 服务器返回错误 | 服务器端问题 | 提示联系管理员,记录错误信息 |
|
|
206
|
-
| 本地目录冲突 | 生成的 ID 已存在 | 自动递增序号,直到找到可用 ID |
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
## 7. 配置示例
|
|
211
|
-
|
|
212
|
-
**协作模式配置**(推荐团队使用):
|
|
213
|
-
```yaml
|
|
214
|
-
# .aodw/config.yaml
|
|
215
|
-
mode: collaborative
|
|
216
|
-
server_url: http://114.67.218.31:2005
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
**独立模式配置**(个人开发):
|
|
220
|
-
```yaml
|
|
221
|
-
# .aodw/config.yaml
|
|
222
|
-
mode: independent
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
**独立模式配置说明**:
|
|
226
|
-
```yaml
|
|
227
|
-
# .aodw/config.yaml
|
|
228
|
-
mode: independent
|
|
229
|
-
# server_url 即使配置也会被忽略,不会联网
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## 8. 执行规范
|
|
235
|
-
|
|
236
|
-
**AI 必须遵守的规则**:
|
|
237
|
-
|
|
238
|
-
1. **禁止静默降级**:协作模式下如果 `server_url` 为空,**必须报错**,不能自动降级到本地生成
|
|
239
|
-
2. **必须检查配置**:创建 RT 前必须先读取 `.aodw/config.yaml`
|
|
240
|
-
3. **必须验证模式**:根据 `mode` 字段执行对应的获取逻辑
|
|
241
|
-
4. **独立模式禁止联网**:独立模式下**必须**使用本地生成,**禁止**联网,即使配置了 `server_url` 也要忽略
|
|
242
|
-
5. **必须带上项目标识**:协作模式下调用服务器 API 时,**必须**带上 `project` 参数,否则服务器无法正确分配 ID
|
|
243
|
-
6. **必须处理错误**:网络错误或服务器错误时,必须明确提示用户
|
|
244
|
-
7. **必须验证 ID**:获取到 RT-ID 后,必须验证格式和唯一性
|
|
245
|
-
|
|
246
|
-
**违反规则的后果**:
|
|
247
|
-
- 如果 AI 在协作模式下静默使用本地生成,可能导致团队内 ID 冲突
|
|
248
|
-
- 如果 AI 未检查配置就生成 ID,可能使用错误的模式
|
|
249
|
-
|
|
250
|
-
---
|
|
251
|
-
|
|
252
|
-
## 9. 相关文档
|
|
253
|
-
|
|
254
|
-
- `.aodw/02-workflow/rt-manager.md` - RT-Manager 完整规范
|
|
255
|
-
- `.aodw/01-core/aodw-constitution.md` - AODW 宪法(包含 RT-Manager 概述)
|
|
256
|
-
- `cli/bin/commands/new.js` - RT 创建命令实现
|
|
257
|
-
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
## 10. 服务器部署
|
|
261
|
-
|
|
262
|
-
如需部署自己的 RT-ID 服务器,请参考:
|
|
263
|
-
- `cli/DEPLOY.md` - 服务器部署指南
|
|
264
|
-
- `cli/test-server.js` - 服务器测试脚本
|
|
265
|
-
- `cli/TEST-SERVER.md` - 测试文档
|
|
266
|
-
|
|
267
|
-
默认服务器地址:`http://114.67.218.31:2005`
|
|
22
|
+
- 格式:`RT-XXX`(3 位数字,左侧补零)
|
|
23
|
+
- 示例:`RT-001`, `RT-042`, `RT-123`
|
|
24
|
+
- 目录:`RT/RT-XXX/`
|