@aipper/aiws-spec 0.0.2 → 0.0.3
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/README.md +8 -6
- package/docs/cli-interface.md +23 -2
- package/package.json +1 -1
- package/templates/workspace/.agents/skills/aiws-change-finish/SKILL.md +24 -0
- package/templates/workspace/.agents/skills/aiws-change-start/SKILL.md +6 -0
- package/templates/workspace/.agents/skills/ws-dev/SKILL.md +2 -0
- package/templates/workspace/.agents/skills/ws-finish/SKILL.md +51 -0
- package/templates/workspace/.agents/skills/ws-plan/SKILL.md +1 -1
- package/templates/workspace/.claude/commands/ws-dev.md +1 -0
- package/templates/workspace/.claude/commands/ws-finish.md +26 -0
- package/templates/workspace/.iflow/commands/ws-finish.toml +30 -0
- package/templates/workspace/.opencode/command/ws-dev.md +1 -0
- package/templates/workspace/.opencode/command/ws-finish.md +26 -0
- package/templates/workspace/changes/README.md +12 -1
- package/templates/workspace/manifest.json +8 -0
package/README.md
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# @aipper/aiws-spec
|
|
2
2
|
|
|
3
|
-
本包存放 aiws
|
|
3
|
+
本包存放 aiws 的规范与模板(单一真值来源,SSOT),供 `@aipper/aiws` CLI 读取并生成/更新目标仓库文件。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
通常你只需要安装并使用 CLI:
|
|
6
|
+
```bash
|
|
7
|
+
npx @aipper/aiws init .
|
|
8
|
+
```
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
## 内容
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
- `templates/workspace/`:workspace 模板(真值文件、tool-native commands/skills、hooks、门禁脚本等)
|
|
11
13
|
- `docs/spec-contract.md`:模板契约(required/optional、managed markers、tool matrix、`.aiws/manifest.json` 约定)
|
|
12
|
-
- `docs/cli-interface.md`:CLI
|
|
14
|
+
- `docs/cli-interface.md`:CLI 行为语义(定义为主)
|
package/docs/cli-interface.md
CHANGED
|
@@ -226,12 +226,33 @@
|
|
|
226
226
|
### `aiws change start`
|
|
227
227
|
|
|
228
228
|
语义:
|
|
229
|
-
-
|
|
229
|
+
- 默认行为:切分支到 `change/<change-id>`(存在则切换;不存在则创建)。
|
|
230
|
+
- 若检测到 `.gitmodules`(git submodules)且未显式指定 `--switch/--no-switch/--worktree`:默认优先采用 `--worktree`(避免切走 superproject 分支导致 submodule 状态混乱);若不满足 `--worktree` 前置条件则回退为 `--no-switch`。
|
|
230
231
|
- 若 `changes/<change-id>/` 不存在:等价执行 `aiws change new ...`。
|
|
231
232
|
- 可选:`--hooks` 等价于 `aiws hooks install .`。
|
|
233
|
+
- 可选:`--switch` 显式允许切换 superproject 分支(仅在存在 `.gitmodules` 时有意义;否则等价于默认行为)。
|
|
234
|
+
- 可选:`--no-switch` 不切换当前分支(仅确保目标分支存在,并初始化变更工件);适用于 superproject + submodule 场景,避免意外切换 A 目录分支导致 submodule 状态混乱。
|
|
235
|
+
- 可选:`--worktree` 使用 `git worktree` 创建一个独立工作区并在其中 checkout `change/<change-id>`,当前目录分支保持不变(推荐用于 superproject + submodule)。
|
|
236
|
+
- 默认 worktree 目录:`../<repo-name>-<change-id>`(相对于 git root)
|
|
237
|
+
- 可选:`--worktree-dir <path>` 覆盖 worktree 目录(推荐放在仓库外;相对路径按 `../` 作为基准理解)
|
|
238
|
+
- 可选:`--submodules` 在 worktree 内执行 `git submodule update --init --recursive`(避免新 worktree 下 submodule 目录为空)
|
|
239
|
+
- 约束:`--worktree` 与 `--no-switch` 互斥。
|
|
232
240
|
|
|
233
241
|
接口(仅定义):
|
|
234
|
-
- `aiws change start <change-id> [--title <title>] [--no-design] [--hooks]`
|
|
242
|
+
- `aiws change start <change-id> [--title <title>] [--no-design] [--hooks] [--no-switch] [--switch] [--worktree] [--worktree-dir <path>] [--submodules]`
|
|
243
|
+
|
|
244
|
+
### `aiws change finish`
|
|
245
|
+
|
|
246
|
+
语义:
|
|
247
|
+
- 安全合并:将 `change/<change-id>` fast-forward 合并回目标分支(默认 `--ff-only`,不生成 merge commit)。
|
|
248
|
+
- 目标分支推断:
|
|
249
|
+
- 若当前分支不是 `change/<change-id>`:默认合并到当前分支。
|
|
250
|
+
- 若当前分支是 `change/<change-id>`:尝试读取 `changes/<change-id>/.ws-change.json` 的 `base_branch` 作为目标分支;若缺失则要求显式指定 `--into/--base`。
|
|
251
|
+
- 约束:要求工作区 clean(无未提交改动)。
|
|
252
|
+
- worktree 场景:若目标分支正在其它 worktree 被 checkout,会提示到对应 worktree 执行。
|
|
253
|
+
|
|
254
|
+
接口(仅定义):
|
|
255
|
+
- `aiws change finish [<change-id>] [--into <branch> | --base <branch>]`
|
|
235
256
|
|
|
236
257
|
### `aiws change sync`
|
|
237
258
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aiws-change-finish
|
|
3
|
+
description: 安全合并 change/<change-id> 回目标分支(默认 fast-forward)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
目标:
|
|
7
|
+
- 将 `change/<change-id>` fast-forward 合并回目标分支,减少手输分支名导致的错误
|
|
8
|
+
|
|
9
|
+
执行(在目标分支所在 worktree 的仓库根目录):
|
|
10
|
+
```bash
|
|
11
|
+
change_id="<change-id>"
|
|
12
|
+
if [[ -x "./node_modules/.bin/aiws" ]]; then
|
|
13
|
+
./node_modules/.bin/aiws change finish "$change_id"
|
|
14
|
+
elif command -v aiws >/dev/null 2>&1; then
|
|
15
|
+
aiws change finish "$change_id"
|
|
16
|
+
else
|
|
17
|
+
npx @aipper/aiws change finish "$change_id"
|
|
18
|
+
fi
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
说明:
|
|
22
|
+
- 默认等价于:`git merge --ff-only change/<change-id>`
|
|
23
|
+
- 若你当前就在 `change/<change-id>` 分支上,`finish` 会尝试读取 `changes/<change-id>/.ws-change.json` 的 `base_branch` 作为目标分支
|
|
24
|
+
- 若无法 fast-forward:先在 change 分支(或对应 worktree)里 `git rebase <target-branch>`,再重试 `aiws change finish`
|
|
@@ -5,6 +5,7 @@ description: 切分支并初始化变更工件(可选安装 hooks)
|
|
|
5
5
|
|
|
6
6
|
目标:
|
|
7
7
|
- 切到分支 `change/<change-id>` 并初始化 `changes/<change-id>/` 工件
|
|
8
|
+
- 若检测到 `.gitmodules`(git submodules),默认优先使用 `--worktree`(失败则回退为 `--no-switch`),避免切走 superproject 分支导致 submodule 状态混乱
|
|
8
9
|
|
|
9
10
|
要求:
|
|
10
11
|
- 需要 git 仓库;若不是 git 仓库先 `git init`
|
|
@@ -25,3 +26,8 @@ fi
|
|
|
25
26
|
- `--hooks`:同时执行 `aiws hooks install .`
|
|
26
27
|
- `--title <title>`:写入标题
|
|
27
28
|
- `--no-design`:不生成 design.md
|
|
29
|
+
- `--switch`:显式允许切换 superproject 分支(仅在存在 `.gitmodules` 时有意义)
|
|
30
|
+
- `--no-switch`:不切换当前分支(仅确保 `change/<change-id>` 分支存在并初始化工件);适用于 superproject + submodule 场景
|
|
31
|
+
- `--worktree`:用 `git worktree` 创建独立工作区并在其中 checkout `change/<change-id>`(推荐用于 superproject + submodule)
|
|
32
|
+
- `--worktree-dir <path>`:覆盖 worktree 目录
|
|
33
|
+
- `--submodules`:在 worktree 内执行 `git submodule update --init --recursive`
|
|
@@ -12,6 +12,7 @@ description: 开发(按需求实现并验证;适用于任何需要修改代
|
|
|
12
12
|
- 若是中大型任务:建议先用 `$ws-plan` 生成 `plan/` 工件,再进入实现(便于可回放与对齐验证入口)。
|
|
13
13
|
2) 建立变更归因(推荐):
|
|
14
14
|
- 推荐一键:`aiws change start <change-id> --hooks`(切分支 + 初始化变更工件 + 启用 hooks)
|
|
15
|
+
- superproject + submodule(推荐):`aiws change start <change-id> --hooks --worktree --submodules`(创建独立 worktree;当前目录分支保持不变)
|
|
15
16
|
- 或手工:`git switch -c change/<change-id>`,并创建 `changes/<change-id>/proposal.md` 与 `changes/<change-id>/tasks.md`(参考 `changes/README.md`)
|
|
16
17
|
3) 如涉及需求调整:先做需求评审(可用 `$ws-req-review`)→ 用户确认后再做需求落盘(可用 `$ws-req-change`)(避免需求漂移)。
|
|
17
18
|
4) 实施最小改动:任何改动都要能归因到 `REQUIREMENTS.md`(验收)或 `issues/problem-issues.csv`(问题)。
|
|
@@ -27,6 +28,7 @@ else
|
|
|
27
28
|
npx @aipper/aiws validate .
|
|
28
29
|
fi
|
|
29
30
|
```
|
|
31
|
+
8) 交付收尾(推荐,减少手动 merge 出错):运行 `$ws-finish`(底层调用 `aiws change finish`,默认 fast-forward 安全合并回目标分支)。
|
|
30
32
|
|
|
31
33
|
输出要求:
|
|
32
34
|
- `Changed:` 文件清单
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ws-finish
|
|
3
|
+
description: 收尾(门禁 + 安全合并 change/<change-id> 回目标分支)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
用中文输出(命令/路径/代码标识符保持原样不翻译)。
|
|
7
|
+
|
|
8
|
+
目标:
|
|
9
|
+
- 在结束一次变更交付时,用 fast-forward 安全合并 `change/<change-id>` 回目标分支,减少手输分支名导致的错误
|
|
10
|
+
- 不自动 push;不自动删分支;必要时先让用户确认
|
|
11
|
+
|
|
12
|
+
前置(必须):
|
|
13
|
+
- 工作区是干净的:`git status --porcelain` 无输出(若有未提交改动:先 commit 或 stash)
|
|
14
|
+
- change 分支已存在:`change/<change-id>`(也支持 `changes/`、`ws/`、`ws-change/`)
|
|
15
|
+
- 若使用 worktree:在“目标分支所在 worktree”执行(`aiws change finish` 会提示正确的 worktree)
|
|
16
|
+
|
|
17
|
+
建议步骤:
|
|
18
|
+
1) (推荐)先跑一次门禁并落盘证据:
|
|
19
|
+
```bash
|
|
20
|
+
if [[ -x "./node_modules/.bin/aiws" ]]; then
|
|
21
|
+
./node_modules/.bin/aiws validate . --stamp
|
|
22
|
+
elif command -v aiws >/dev/null 2>&1; then
|
|
23
|
+
aiws validate . --stamp
|
|
24
|
+
else
|
|
25
|
+
npx @aipper/aiws validate . --stamp
|
|
26
|
+
fi
|
|
27
|
+
```
|
|
28
|
+
2) 安全合并(默认 fast-forward;并会在需要时切到目标分支):
|
|
29
|
+
```bash
|
|
30
|
+
# 若当前就在 change/<change-id> 分支上,可省略 <change-id>
|
|
31
|
+
change_id="<change-id>"
|
|
32
|
+
if [[ -x "./node_modules/.bin/aiws" ]]; then
|
|
33
|
+
./node_modules/.bin/aiws change finish "${change_id}"
|
|
34
|
+
elif command -v aiws >/dev/null 2>&1; then
|
|
35
|
+
aiws change finish "${change_id}"
|
|
36
|
+
else
|
|
37
|
+
npx @aipper/aiws change finish "${change_id}"
|
|
38
|
+
fi
|
|
39
|
+
```
|
|
40
|
+
3) 若 fast-forward 失败(提示需要 rebase):先在 change 分支(或对应 worktree)里 `git rebase <target-branch>`,再重试 `aiws change finish`。
|
|
41
|
+
4) (可选)归档变更工件(完成交付后推荐):
|
|
42
|
+
```bash
|
|
43
|
+
change_id="<change-id>"
|
|
44
|
+
if [[ -x "./node_modules/.bin/aiws" ]]; then
|
|
45
|
+
./node_modules/.bin/aiws change archive "${change_id}"
|
|
46
|
+
elif command -v aiws >/dev/null 2>&1; then
|
|
47
|
+
aiws change archive "${change_id}"
|
|
48
|
+
else
|
|
49
|
+
npx @aipper/aiws change archive "${change_id}"
|
|
50
|
+
fi
|
|
51
|
+
```
|
|
@@ -36,4 +36,4 @@ description: 规划(生成可落盘 plan/ 工件;供 ws-dev 执行)
|
|
|
36
36
|
|
|
37
37
|
输出要求:
|
|
38
38
|
- `Plan file:` <实际写入的路径>
|
|
39
|
-
- `Next:` 推荐下一步(通常是 `$ws-dev` 或 `aiws change start <change-id> --hooks`)
|
|
39
|
+
- `Next:` 推荐下一步(通常是 `$ws-dev` 或 `aiws change start <change-id> --hooks`;superproject + submodule 可用 `--worktree`)
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
4) 实施最小改动:任何改动都要能归因到 `REQUIREMENTS.md`(验收)或 `issues/problem-issues.csv`(问题)。
|
|
15
15
|
5) 运行 `AI_WORKSPACE.md` 里声明的验证命令;未运行不声称已运行。
|
|
16
16
|
6) 提交前强制:`aiws validate .`(commit/push hooks 也会阻断)。
|
|
17
|
+
7) 交付收尾(推荐,减少手动 merge 出错):运行 `/ws-finish`(底层调用 `aiws change finish`,默认 fast-forward 安全合并回目标分支)。
|
|
17
18
|
|
|
18
19
|
输出要求:
|
|
19
20
|
- `Changed:` 文件清单
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!-- AIWS_MANAGED_BEGIN:claude:ws-finish -->
|
|
2
|
+
# ws finish
|
|
3
|
+
|
|
4
|
+
用中文输出(命令/路径/代码标识符保持原样不翻译)。
|
|
5
|
+
|
|
6
|
+
目标:安全把 `change/<change-id>` fast-forward 合并回目标分支,避免手输分支名导致的错误。
|
|
7
|
+
|
|
8
|
+
前置(必须):
|
|
9
|
+
- 工作区干净:`git status --porcelain` 无输出(否则先 commit 或 stash)
|
|
10
|
+
- change 分支存在(`change/<change-id>`;也支持 `changes/`、`ws/`、`ws-change/`)
|
|
11
|
+
|
|
12
|
+
步骤(建议):
|
|
13
|
+
1) 先运行 `/ws-preflight`(确保真值文件齐全)。
|
|
14
|
+
2) (推荐)门禁校验并落盘证据:`aiws validate . --stamp`(未安装全局 aiws 时可用 `npx @aipper/aiws validate . --stamp`)。
|
|
15
|
+
3) 安全合并并切回目标分支:
|
|
16
|
+
- 若当前就在 `change/<change-id>` 分支上,可直接执行:`aiws change finish`
|
|
17
|
+
- 否则执行:`aiws change finish <change-id>`
|
|
18
|
+
4) 若提示无法 fast-forward:先在 change 分支(或对应 worktree)里 `git rebase <target-branch>`,再重试 `aiws change finish`。
|
|
19
|
+
5) (可选)交付完成后归档变更工件:`aiws change archive <change-id>`。
|
|
20
|
+
|
|
21
|
+
安全:
|
|
22
|
+
- 不自动 push。
|
|
23
|
+
- 不执行破坏性命令。
|
|
24
|
+
<!-- AIWS_MANAGED_END:claude:ws-finish -->
|
|
25
|
+
|
|
26
|
+
可在下方追加本项目对 Claude Code 的额外说明(托管块外内容会被保留)。
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Command: ws:finish
|
|
2
|
+
# Description: AI Workspace 安全收尾(门禁 + fast-forward 合并 change/<change-id> 回目标分支)
|
|
3
|
+
# Category: workspace
|
|
4
|
+
# Version: 1
|
|
5
|
+
|
|
6
|
+
description = "AI Workspace 安全收尾(门禁 + fast-forward 合并 change/<change-id> 回目标分支)"
|
|
7
|
+
|
|
8
|
+
prompt = """
|
|
9
|
+
用中文输出(命令/路径/代码标识符保持原样不翻译)。
|
|
10
|
+
|
|
11
|
+
目标:安全把 `change/<change-id>` fast-forward 合并回目标分支,减少手输分支名导致的错误。
|
|
12
|
+
|
|
13
|
+
强制步骤:
|
|
14
|
+
1) 读取真值文件:`AI_PROJECT.md`、`REQUIREMENTS.md`、`AI_WORKSPACE.md`(缺失则先运行 `/aiws-init` 或 `aiws init .`)。
|
|
15
|
+
2) 若 iFlow 拦截写入:先执行 `/ws-contract-check`,再继续。
|
|
16
|
+
3) 确认 git 状态(必须输出给用户):
|
|
17
|
+
- `git status --porcelain`
|
|
18
|
+
- `git branch --show-current`(或 `git rev-parse --abbrev-ref HEAD`)
|
|
19
|
+
4) 若工作区不干净:停止,并要求先 commit 或 stash(不要尝试自动处理)。
|
|
20
|
+
5) (推荐)门禁校验并落盘证据:`aiws validate . --stamp`(未安装全局 aiws 时可用 `npx @aipper/aiws validate . --stamp`)。
|
|
21
|
+
6) 安全合并(默认 fast-forward):
|
|
22
|
+
- 在 `change/<change-id>` 分支上:`aiws change finish`(会尝试读 `changes/<change-id>/.ws-change.json` 的 `base_branch` 并切回目标分支)
|
|
23
|
+
- 否则:`aiws change finish <change-id>`
|
|
24
|
+
7) 若提示无法 fast-forward:先在 change 分支(或对应 worktree)里执行 `git rebase <target-branch>`,再重试 `aiws change finish`。
|
|
25
|
+
8) (可选)交付完成后归档变更工件:`aiws change archive <change-id>`。
|
|
26
|
+
|
|
27
|
+
边界:
|
|
28
|
+
- 不自动 push。
|
|
29
|
+
- 不执行破坏性命令。
|
|
30
|
+
"""
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
4) 实施最小改动:任何改动都要能归因到 `REQUIREMENTS.md`(验收)或 `issues/problem-issues.csv`(问题)。
|
|
15
15
|
5) 运行 `AI_WORKSPACE.md` 里声明的验证命令;未运行不声称已运行。
|
|
16
16
|
6) 提交前强制:`aiws validate .`(commit/push hooks 也会阻断)。
|
|
17
|
+
7) 交付收尾(推荐,减少手动 merge 出错):运行 `/ws-finish`(底层调用 `aiws change finish`,默认 fast-forward 安全合并回目标分支)。
|
|
17
18
|
|
|
18
19
|
输出要求:
|
|
19
20
|
- `Changed:` 文件清单
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<!-- AIWS_MANAGED_BEGIN:opencode:ws-finish -->
|
|
2
|
+
# ws finish
|
|
3
|
+
|
|
4
|
+
用中文输出(命令/路径/代码标识符保持原样不翻译)。
|
|
5
|
+
|
|
6
|
+
目标:安全把 `change/<change-id>` fast-forward 合并回目标分支,避免手输分支名导致的错误。
|
|
7
|
+
|
|
8
|
+
前置(必须):
|
|
9
|
+
- 工作区干净:`git status --porcelain` 无输出(否则先 commit 或 stash)
|
|
10
|
+
- change 分支存在(`change/<change-id>`;也支持 `changes/`、`ws/`、`ws-change/`)
|
|
11
|
+
|
|
12
|
+
步骤(建议):
|
|
13
|
+
1) 先运行 `/ws-preflight`(确保真值文件齐全)。
|
|
14
|
+
2) (推荐)门禁校验并落盘证据:`aiws validate . --stamp`(未安装全局 aiws 时可用 `npx @aipper/aiws validate . --stamp`)。
|
|
15
|
+
3) 安全合并并切回目标分支:
|
|
16
|
+
- 若当前就在 `change/<change-id>` 分支上,可直接执行:`aiws change finish`
|
|
17
|
+
- 否则执行:`aiws change finish <change-id>`
|
|
18
|
+
4) 若提示无法 fast-forward:先在 change 分支(或对应 worktree)里 `git rebase <target-branch>`,再重试 `aiws change finish`。
|
|
19
|
+
5) (可选)交付完成后归档变更工件:`aiws change archive <change-id>`。
|
|
20
|
+
|
|
21
|
+
安全:
|
|
22
|
+
- 不自动 push。
|
|
23
|
+
- 不执行破坏性命令。
|
|
24
|
+
<!-- AIWS_MANAGED_END:opencode:ws-finish -->
|
|
25
|
+
|
|
26
|
+
可在下方追加本项目对 OpenCode 的额外说明(托管块外内容会被保留)。
|
|
@@ -21,7 +21,13 @@ changes/
|
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
常用命令(推荐使用 `aiws`;不依赖 dotfiles):
|
|
24
|
-
- `aiws change start <change-id
|
|
24
|
+
- `aiws change start <change-id>`(默认:切到 `change/<change-id>` 并初始化工件目录;若检测到 `.gitmodules` 则默认优先使用 worktree,失败则回退为不切分支,避免 submodule 状态混乱)
|
|
25
|
+
- `aiws change start <change-id> --no-switch`(superproject + submodule 场景:不切分支,仅准备 `change/<change-id>` 分支与工件目录)
|
|
26
|
+
- `aiws change start <change-id> --switch`(显式允许切换 superproject 分支;仅在存在 `.gitmodules` 时有意义)
|
|
27
|
+
- `aiws change start <change-id> --worktree`(推荐用于 superproject + submodule:创建独立 worktree;当前目录分支保持不变)
|
|
28
|
+
- 可选:`--worktree-dir <path>` 覆盖 worktree 目录
|
|
29
|
+
- 可选:`--submodules` 在 worktree 内执行 `git submodule update --init --recursive`
|
|
30
|
+
- `aiws change finish <change-id>`(安全合并:fast-forward 合并回目标分支;在 `change/<change-id>` 分支上执行时会尝试使用 `.ws-change.json` 的 `base_branch` 作为目标分支)
|
|
25
31
|
- `aiws change new <change-id>`
|
|
26
32
|
- `aiws change list`
|
|
27
33
|
- `aiws change status <change-id>`
|
|
@@ -53,3 +59,8 @@ Hooks/CI(推荐,硬约束):
|
|
|
53
59
|
- 或使用:`aiws hooks install .`(等价)
|
|
54
60
|
- CI 建议增加一步(对 PR 分支执行):`aiws validate .`。
|
|
55
61
|
- 紧急跳过(不推荐):`WS_CHANGE_HOOK_BYPASS=1 ...`(CI 不应允许跳过)。
|
|
62
|
+
|
|
63
|
+
合并建议(减少人为 merge 引入新问题):
|
|
64
|
+
- 优先使用 worktree + fast-forward 合并:
|
|
65
|
+
- 完成后在主工作区(例如 `main`)执行:`aiws change finish <change-id>`(等价于 `git merge --ff-only change/<change-id>`)
|
|
66
|
+
- 若失败:先在 worktree 里 `git rebase main`(或更新 main 后再 rebase),再重试 `--ff-only`
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
".claude/commands/ws-migrate.md",
|
|
30
30
|
".claude/commands/ws-dev.md",
|
|
31
31
|
".claude/commands/ws-analyze.md",
|
|
32
|
+
".claude/commands/ws-finish.md",
|
|
32
33
|
".claude/commands/ws-review.md",
|
|
33
34
|
".claude/commands/ws-rule.md",
|
|
34
35
|
".claude/commands/ws-req-review.md",
|
|
@@ -44,6 +45,7 @@
|
|
|
44
45
|
".opencode/command/ws-migrate.md",
|
|
45
46
|
".opencode/command/ws-dev.md",
|
|
46
47
|
".opencode/command/ws-analyze.md",
|
|
48
|
+
".opencode/command/ws-finish.md",
|
|
47
49
|
".opencode/command/ws-review.md",
|
|
48
50
|
".opencode/command/ws-rule.md",
|
|
49
51
|
".opencode/command/ws-req-review.md",
|
|
@@ -68,6 +70,7 @@
|
|
|
68
70
|
".iflow/commands/ws-migrate.toml",
|
|
69
71
|
".iflow/commands/ws-dev.toml",
|
|
70
72
|
".iflow/commands/ws-analyze.toml",
|
|
73
|
+
".iflow/commands/ws-finish.toml",
|
|
71
74
|
".iflow/commands/ws-review.toml",
|
|
72
75
|
".iflow/commands/ws-rule.toml",
|
|
73
76
|
".iflow/commands/ws-contract-check.toml",
|
|
@@ -112,6 +115,7 @@
|
|
|
112
115
|
".agents/skills/aiws-change-list/SKILL.md",
|
|
113
116
|
".agents/skills/aiws-change-new/SKILL.md",
|
|
114
117
|
".agents/skills/aiws-change-start/SKILL.md",
|
|
118
|
+
".agents/skills/aiws-change-finish/SKILL.md",
|
|
115
119
|
".agents/skills/aiws-change-status/SKILL.md",
|
|
116
120
|
".agents/skills/aiws-change-next/SKILL.md",
|
|
117
121
|
".agents/skills/aiws-change-sync/SKILL.md",
|
|
@@ -122,6 +126,7 @@
|
|
|
122
126
|
".agents/skills/ws-analyze/SKILL.md",
|
|
123
127
|
".agents/skills/ws-commit/SKILL.md",
|
|
124
128
|
".agents/skills/ws-dev/SKILL.md",
|
|
129
|
+
".agents/skills/ws-finish/SKILL.md",
|
|
125
130
|
".agents/skills/ws-migrate/SKILL.md",
|
|
126
131
|
".agents/skills/ws-plan/SKILL.md",
|
|
127
132
|
".agents/skills/ws-preflight/SKILL.md",
|
|
@@ -149,6 +154,7 @@
|
|
|
149
154
|
".iflow/commands/ws-migrate.toml",
|
|
150
155
|
".iflow/commands/ws-dev.toml",
|
|
151
156
|
".iflow/commands/ws-analyze.toml",
|
|
157
|
+
".iflow/commands/ws-finish.toml",
|
|
152
158
|
".iflow/commands/ws-review.toml",
|
|
153
159
|
".iflow/commands/ws-rule.toml",
|
|
154
160
|
".iflow/commands/ws-contract-check.toml",
|
|
@@ -178,6 +184,7 @@
|
|
|
178
184
|
".claude/commands/ws-migrate.md": ["claude:ws-migrate"],
|
|
179
185
|
".claude/commands/ws-dev.md": ["claude:ws-dev"],
|
|
180
186
|
".claude/commands/ws-analyze.md": ["claude:ws-analyze"],
|
|
187
|
+
".claude/commands/ws-finish.md": ["claude:ws-finish"],
|
|
181
188
|
".claude/commands/ws-review.md": ["claude:ws-review"],
|
|
182
189
|
".claude/commands/ws-rule.md": ["claude:ws-rule"],
|
|
183
190
|
".claude/commands/ws-req-review.md": ["claude:ws-req-review"],
|
|
@@ -193,6 +200,7 @@
|
|
|
193
200
|
".opencode/command/ws-migrate.md": ["opencode:ws-migrate"],
|
|
194
201
|
".opencode/command/ws-dev.md": ["opencode:ws-dev"],
|
|
195
202
|
".opencode/command/ws-analyze.md": ["opencode:ws-analyze"],
|
|
203
|
+
".opencode/command/ws-finish.md": ["opencode:ws-finish"],
|
|
196
204
|
".opencode/command/ws-review.md": ["opencode:ws-review"],
|
|
197
205
|
".opencode/command/ws-rule.md": ["opencode:ws-rule"],
|
|
198
206
|
".opencode/command/ws-req-review.md": ["opencode:ws-req-review"],
|