@aipper/aiws-spec 0.0.42 → 0.0.44

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.
@@ -7,14 +7,14 @@ description: 使用时机:新会话开始、不确定下一步做什么时。
7
7
 
8
8
  目标:默认入口,先读真值文件,判定当前任务 workflow,再进入具体 `ws-*` skill。若意图不明确:先澄清,不直接进入实现。
9
9
 
10
+ 阶段定位:bootstrap/router 阶段;负责分流,不直接完成实现。
11
+
10
12
  ## 编排约束
11
13
 
12
- - **不直接实现**:`using-aiws` 自身不是实现阶段;只判 workflow、读真值、路由到对应 `ws-*`。主 session 不直接写代码。
13
- - **上下文先于判决**:路由 `direct_implementation` 前必须先收集项目上下文——具体检查:`git status --porcelain`(已改动文件数)、`git diff --stat`(改动行范围)、`AI_WORKSPACE.md` 中声明的验证命令可行性。仅当改动文件数 3 且改动总行数 ≤ 100 且验证入口明确时,才可判 direct。
14
+ - **不直接实现**:只判 workflow、读真值、路由到对应 `ws-*`。主 session 不直接写代码。
15
+ - **上下文先于判决**:路由 `direct_implementation` 前必须收集项目上下文——`git status --porcelain`(改动文件数)、`git diff --stat`(改动行范围)、`AI_WORKSPACE.md` 验证入口。仅当 ≤3 文件、≤100 行改动、验证明确时,才可判 direct。
14
16
  - **意图不明先澄清**:`routeTo=clarify` 时必须停止并问 1-3 个关键问题,不猜测。
15
17
 
16
- 阶段定位:bootstrap/router 阶段;负责分流,不直接完成实现。
17
-
18
18
  ## 必需输入
19
19
 
20
20
  - 当前任务描述
@@ -27,40 +27,24 @@ description: 使用时机:新会话开始、不确定下一步做什么时。
27
27
 
28
28
  ## 阻断条件
29
29
 
30
- - 无法确定项目根目录
31
- - 缺失任一真值文件
32
- - 无法明确当前任务意图
33
- - 无法明确归因或验证入口,且不能安全推断
30
+ - 无法确定项目根目录、缺失任一真值文件、无法明确任务意图、无法归因且不能安全推断
34
31
 
35
32
  ## 执行步骤
36
33
 
37
34
  ### 1. Preflight
38
35
 
39
- 读取 `AI_PROJECT.md` / `REQUIREMENTS.md` / `AI_WORKSPACE.md`。
40
-
41
- - 若检测到 `.opencode/oh-my-opencode.json`:输出 `oMo-enabled`
42
- - 若未检测到:输出 `standard-opencode`
43
- - 若缺失任一真值文件 → route = `$ws-preflight`,建议先 `aiws init .`
36
+ 读取 `AI_PROJECT.md` / `REQUIREMENTS.md` / `AI_WORKSPACE.md`。若检测到 `.opencode/oh-my-opencode.json` 输出 `oMo-enabled`,否则 `standard-opencode`。缺失真值文件则 route = `$ws-preflight`,建议 `aiws init .`
44
37
 
45
38
  ### 1.5 Per-turn Breadcrumb(必做)
46
39
 
47
- 每轮对话开始时强制读取当前 change 状态(`.aiws/changes/<change-id>/.ws-change.json` 或 phase 状态文件),输出 `[workflow-state:PHASE/N]` breadcrumb 标记。
48
-
49
- 目的:即使 context 被压缩,breadcrumb 也能让 AI 知道当前处于哪个阶段、上次做到哪一步。
50
-
51
- 格式:`[workflow-state:PHASE_NAME/N]`,其中 PHASE_NAME 取自 standardChain,N 为步骤序号。
40
+ 每轮对话开始时读取当前 change 状态,输出 `[workflow-state:PHASE_NAME/N]` 标记。
52
41
 
53
42
  ### 2. 路由判定
54
43
 
55
- 根据 `packages/spec/docs/workflow-router-rules.json` 判定:
56
-
57
- - 路由前先读上下文:判 direct_implementation 前,router 必须先收集项目上下文(git status、涉及文件范围),确认是真正的单文件修复,再决定 direct vs plan。
44
+ 根据 `packages/spec/docs/workflow-router-rules.json` 判定。判 direct_implementation 前必须先收集上下文(git status、涉及文件范围):
58
45
 
59
- 上下文收集清单(判 direct_implementation 前必须完成):
60
- - `git status --porcelain` — 确认未提交改动范围
61
- - `git diff --stat` — 确认改动文件数量
62
- - 改动涉及 ≤2 文件且均在已知路径 → 可判 direct
63
- - 改动涉及 ≥3 文件或含未知路径 → 必须走 ws-plan
46
+ - ≤2 文件且均在已知路径 → direct
47
+ - ≥3 文件或含未知路径 ws-plan
64
48
 
65
49
  | 意图 | Route |
66
50
  |------|-------|
@@ -75,53 +59,32 @@ description: 使用时机:新会话开始、不确定下一步做什么时。
75
59
  | 极简修复 | `$ws-dev-lite` |
76
60
  | Subagent 不可用 | 回退单 agent + 工件模式 |
77
61
 
78
- 注:`$ws-dev` 默认走 subagent-first 策略(详见 `packages/spec/docs/opencode-subagent-first.md`)。主 session 应优先通过 `$ws-delegate` 派发 `aiws-worker`,除非用户明确说"直接改"或"do it inline"
62
+ 注:`$ws-dev` 默认走 subagent-first 策略。主 session 应优先通过 `$ws-delegate` 派发 `aiws-worker`,除非用户明确说"直接改"。
79
63
 
80
- **Escape Hatch**:若用户明确说"跳过流程"/"直接改"/"do it inline",允许走 `direct_implementation` 路由,但必须:
81
- 1. 输出 `[escape-hatch: direct-implementation]` 标记
82
- 2. 仍须归因到 Req_ID / Problem_ID
83
- 3. 仍须有可复现验证入口
84
- 4. 仍须落盘 evidence 标记 escape-hatch 使用原因
64
+ **Escape Hatch**:用户明确说"跳过流程"时允许 direct_implementation,但须输出 `[escape-hatch]` 标记、归因到 Req_ID、有可复现验证入口、落盘 evidence 注明原因。
85
65
 
86
66
  ### 3. 意图不明确
87
67
 
88
- 只问 1-3 个关键问题,明确缺什么(意图、Req_ID/Problem_ID、verify、change 上下文),然后停止。
68
+ 只问 1-3 个关键问题(意图、Req_ID/Problem_ID、verify、change),然后停止。
89
69
 
90
70
  ### 4. Continuation Routing(新 session 恢复)
91
71
 
92
- `.opencode/plugins/aiws-session-start.js` 自动注入 `<resume-recommendation>` 块,包含 active change ID、phase、journal 摘要及 next action。
93
-
94
- 续跑决策表(与 `aiws-context.js#getChangeState` 同步):
72
+ 续跑决策:
95
73
 
96
- ```
97
- ┌──────────────────┬──────────────────────────────────────────────┐
98
- Phase │ 推荐 Next Action │
99
- ├──────────────────┼──────────────────────────────────────────────┤
100
- none(无 change) ws-intake ws-plan 建立 change 上下文 │
101
- intake │ ws-intake 继续澄清,或 ws-plan 转到规划 │
102
- planning │ plan 存在 ws-plan-verify;否则 ws-plan │
103
- ready-for-dev │ 派发 aiws-worker(subagent-first) │
104
- in-progress │ patches 存在 → aiws-reviewer + ws-review │
105
- │ │ 上次 DONE_WITH_CONCERNS ws-quality-review │
106
- │ │ 否则 worker 继续或 aiws-reviewer 审查 │
107
- │ review │ evidence 齐 → ws-finish/ws-commit │
108
- │ │ 否则补 evidence 再提交 │
109
- │ finished │ ws-finish 收尾归档 │
110
- │ unknown │ ws-preflight 重新评估 │
111
- └──────────────────┴──────────────────────────────────────────────┘
112
- ```
74
+ | Phase | Next Action |
75
+ |-------|-------------|
76
+ | none(无 change) | ws-intake 或 ws-plan |
77
+ | intake | ws-intake 继续,或 ws-plan |
78
+ | planning | plan 存在→ws-plan-verify;否则 ws-plan |
79
+ | ready-for-dev | 派发 aiws-worker |
80
+ | in-progress | patches 存在→review;was DONE_WITH_CONCERNS→ws-quality-review;否则继续 |
81
+ | review | evidence 齐→ws-finish/ws-commit;否则补 evidence |
82
+ | finished | ws-finish 收尾归档 |
83
+ | unknown | ws-preflight |
113
84
 
114
- Subagent 不可用时的降级路径:
115
- - ready-for-dev 无 subagent → 当前 agent 直接执行 ws-dev(走 inline escape hatch)
116
- - in-progress 无 reviewer → 当前 agent 自审(走 evaluate-optimize 1 轮)
117
- - review 无 oracle → 当前 agent 本地 review(不阻断流程)
85
+ Subagent 降级:无 subagent 时当前 agent 直接执行,evidence 中记录降级原因(`mode: single-agent`)。
118
86
 
119
- 特殊状态:
120
- - 上次 delegation 返回 `BLOCKED` → 先解决 blocker 再继续
121
- - 上次 delegation 返回 `NEEDS_CONTEXT` → 补 context JSONL 后重新派发
122
- - Subagent-first 默认:`ready-for-dev` / `in-progress` 默认派发 worker/reviewer
123
- - Subagent 不可用时:降级为当前 agent 直接执行,但必须在 evidence 中记录降级原因
124
- - Subagent 不可用时回退:单 agent 模式 + 显式维护 `.aiws/changes/<id>/` 工件(handoff-evidence.md, analysis/, patches/);不阻断流程,但须标注 `mode: single-agent`
87
+ 特殊状态:`BLOCKED` 需解 blocker;`NEEDS_CONTEXT` 补 JSONL 后重试。
125
88
 
126
89
  ### 5. 输出路由
127
90
 
@@ -140,5 +103,7 @@ Next: <继续执行对应 skill,或提出澄清问题>
140
103
 
141
104
  - Router 自己不实现代码;不给 route 前不直接改代码
142
105
  - 一次只选一个主 route
143
- - 若复杂度升高:`$ws-dev` 回退到 `$ws-plan`;`$ws-finish` 回退到前置门禁
144
- - subagent 不可用:回退为单 agent 执行,但须维护与 subagent 模式等价的工件结构(handoff、evidence、review 文件),确保后续 session 可接力
106
+ - 复杂度升高:`$ws-dev` 回退 `$ws-plan`;`$ws-finish` 回退前置门禁
107
+ - subagent 不可用:单 agent 执行,但须维护等价工件结构
108
+
109
+ > 运行时行为约束:`packages/spec/docs/run-behavior-guidelines.md`
@@ -7,60 +7,45 @@ description: 使用时机:从禅道/外部系统拉取 bug 进行修复时。
7
7
 
8
8
  目标:
9
9
  - 用禅道 MCP 拉取 bug 详情与附件(尤其图片)
10
- - 把证据落盘到 `.aiws/changes/<change-id>/bug/`(避免只停留在对话)
11
- - 把修复任务汇总/更新到 `issues/fix_bus_issues.csv`
10
+ - 证据落盘到 `.aiws/changes/<change-id>/bug/`(避免只停留在对话)
11
+ - 汇总/更新到 `issues/fix_bus_issues.csv`
12
12
  - 与 `ws-dev` / `aiws change` 流程绑定,确保可追溯、可验证
13
13
 
14
- 非目标(强制):
15
- - 不自动 commit / push
16
- - 不写入任何 secrets(token、cookie、内网地址)
17
- - 不在无法复现时直接改代码(先产出阻塞信息)
14
+ 非目标(强制):不自动 commit/push;不写入 secrets(token、cookie、内网地址);不在无法复现时直接改代码(先产出阻塞信息)。
18
15
 
19
16
  前置:
20
- 1) 先运行 `$ws-preflight`。
21
- 2) 准备 `change-id`(建议:`bug-<bug-id>` 或 `bugfix-<bug-id>-<slug>`)。
17
+ 1) 运行 `$ws-preflight`。
18
+ 2) 准备 `change-id`(建议 `bug-<bug-id>` 或 `bugfix-<bug-id>-<slug>`)。
22
19
  3) 建立 change 上下文(推荐先于任何落盘):
23
- - 若当前还不在 `change/<change-id>` 分支 / worktree,先调用 `aiws change start`
24
- - 工作区必须先干净;否则不要先写 `.aiws/changes/<change-id>/bug/` 或 `issues/fix_bus_issues.csv`,避免后续切 worktree 时工件留在原工作区
25
- - 仓库已有提交:优先 `--worktree`
26
- - superproject + submodule:优先 `--worktree --submodules`
27
- - 仓库尚无提交 / 不满足 worktree 前置条件:回退 `--no-switch`
28
- ```bash
29
- if [[ -n "$(git status --porcelain)" ]]; then
30
- echo "error: working tree dirty before ws-bugfix creates change context"
31
- exit 2
32
- fi
33
-
34
- if git rev-parse --verify HEAD >/dev/null 2>&1; then
35
- if [[ -f .gitmodules ]] && git config --file .gitmodules --get-regexp '^submodule\\..*\\.path$' >/dev/null 2>&1; then
36
- aiws change start <change-id> --hooks --worktree --submodules
37
- else
38
- aiws change start <change-id> --hooks --worktree
39
- fi
40
- else
41
- aiws change start <change-id> --hooks --no-switch
42
- fi
43
- ```
44
- - 若上一步创建了 worktree:后续 bug 证据、CSV 更新、`$ws-dev` 修复都必须在该 worktree 中继续;不要回原工作区重复创建 change
45
- - 若该 change 涉及 submodule:
46
- - 优先复用 `$ws-dev` 的 `submodules.targets` 生成/确认流程
47
- - detached HEAD 时默认建议取 `.gitmodules` 声明的分支
48
- - 已附着在某个本地分支时默认建议取当前分支
49
- - 以上都只是建议值,最终必须显式写入 `.aiws/changes/<change-id>/submodules.targets`
20
+ - 工作区必须先干净;不要先写 bug 文件或 CSV,避免后续切 worktree 时工件留在原工作区
21
+ - 工作树策略:
22
+ ```bash
23
+ if [[ -n "$(git status --porcelain)" ]]; then
24
+ echo "error: dirty before ws-bugfix"; exit 2
25
+ fi
26
+ if git rev-parse --verify HEAD >/dev/null 2>&1; then
27
+ if [[ -f .gitmodules ]] && git config --file .gitmodules --get-regexp '^submodule\..*\.path$' >/dev/null 2>&1; then
28
+ aiws change start <change-id> --hooks --worktree --submodules
29
+ else
30
+ aiws change start <change-id> --hooks --worktree
31
+ fi
32
+ else
33
+ aiws change start <change-id> --hooks --no-switch
34
+ fi
35
+ ```
36
+ - 若创建了 worktree:后续所有操作必须在该 worktree 中继续
37
+ - 涉及 submodule:确认 `submodules.targets` 已写入(复用 `$ws-dev` 流程)
50
38
 
51
- 建议流程(按顺序):
39
+ 建议流程:
52
40
 
53
41
  ## 1) 通过禅道 MCP 拉取 bug
54
- - 使用当前会话中已启用的 zentao MCP 工具获取:
55
- - `bug_id`、标题、优先级/严重级、模块、状态、指派人
56
- - 重现步骤、期望结果、实际结果
57
- - 附件列表(含图片 URL/文件名)
58
- - 若当前环境没有 zentao MCP 工具:立即停止并提示用户先配置,不要猜数据。
42
+ - 使用当前会话中的 zentao MCP 获取:`bug_id`、标题、优先级/严重级、模块、状态、指派人、重现步骤、期望结果、实际结果、附件列表
43
+ - 若没有 zentao MCP:立即停止并提示用户先配置,不要猜数据
59
44
 
60
45
  ## 2) 证据落盘(强制)
61
- 在当前 active change 上下文的 `.aiws/changes/<change-id>/bug/` 下落盘:
62
- - `zentao-bug-<bug-id>.json`:原始字段快照(避免信息丢失)
63
- - `zentao-bug-<bug-id>.md`:人类可读摘要(复现步骤/期望/实际/风险)
46
+ `.aiws/changes/<change-id>/bug/` 下落盘:
47
+ - `zentao-bug-<bug-id>.json`:原始字段快照
48
+ - `zentao-bug-<bug-id>.md`:人类可读摘要(复现/期望/实际/风险)
64
49
  - `images/<bug-id>/...`:下载的图片附件(保留原扩展名)
65
50
 
66
51
  建议目录:
@@ -72,36 +57,25 @@ fi
72
57
  ```
73
58
 
74
59
  ## 3) 汇总到 issues/fix_bus_issues.csv(upsert)
75
- - 目标文件:当前 active change 上下文中的 `issues/fix_bus_issues.csv`
76
- - 若文件不存在,先创建表头:
60
+
61
+ 目标文件:`issues/fix_bus_issues.csv`。不存在则创建表头:
77
62
  ```csv
78
63
  Bug_ID,Title,Severity,Module,Status,Assigned_To,Change_ID,Image_Count,Image_Paths,Evidence_Path,Verify_Command,Fix_Status,Updated_At,Notes
79
64
  ```
80
- - 以 `Bug_ID` 为主键 upsert
81
- - 已存在:更新状态/证据/图片路径
82
- - 不存在:新增一行
83
-
84
- 字段约束:
85
- - `Change_ID`:必须等于当前 `change-id`
86
- - `Evidence_Path`:指向 `.aiws/changes/<change-id>/bug/zentao-bug-<bug-id>.md`
87
- - `Image_Paths`:多个路径用 `;` 分隔
88
- - `Fix_Status`:`TODO|DOING|DONE|BLOCKED`
65
+ 以 `Bug_ID` 为主键 upsert:已存在则更新状态/证据/图片路径;不存在则新增。
66
+ 字段约束:`Change_ID` = 当前 change-id;`Evidence_Path` 指向 `.md`;`Image_Paths` 用 `;` 分隔;`Fix_Status` 为 `TODO|DOING|DONE|BLOCKED`。
89
67
 
90
68
  ## 4) 修复执行与回填
91
- - 进入 `$ws-dev` 做最小改动修复;若 `ws-bugfix` 创建了 worktree,则必须在该 worktree 中继续。
92
- - 完成后回填 `issues/fix_bus_issues.csv`:
93
- - `Fix_Status`
94
- - `Verify_Command`
95
- - `Updated_At`
96
- - `Notes`(必要时写阻塞原因)
69
+ - 进入 `$ws-dev` 做最小改动修复(若 `ws-bugfix` 创建了 worktree,必须在该 worktree 中继续)
70
+ - 完成后回填 CSV:`Fix_Status`、`Verify_Command`、`Updated_At`、`Notes`
97
71
 
98
72
  ## 5) 验证与交付
73
+
99
74
  ```bash
100
75
  aiws change validate <change-id> --strict
101
76
  aiws validate . --stamp
102
77
  ```
103
- - 需要提交时走 `$ws-commit`。
104
- - 需要收尾合并时走 `$ws-finish`(或在 superproject + submodule 场景走 `$ws-deliver`)。
78
+ - 提交走 `$ws-commit`;收尾合并走 `$ws-finish`(superproject + submodule 场景走 `$ws-deliver`)
105
79
 
106
80
  输出要求:
107
81
  - `Change_ID:` `<change-id>`
@@ -109,3 +83,5 @@ aiws validate . --stamp
109
83
  - `CSV:` `issues/fix_bus_issues.csv` 中对应 `Bug_ID` 行的关键字段
110
84
  - `Evidence:` `.aiws/changes/<change-id>/bug/zentao-bug-<bug-id>.md` + 图片目录
111
85
  - `Verify:` 实际运行命令与结果(未运行不声称已运行)
86
+
87
+ > 运行时行为约束:`packages/spec/docs/run-behavior-guidelines.md`
@@ -5,114 +5,85 @@ description: 使用时机:需要拆分子任务、委托给子 agent 时。触
5
5
 
6
6
  用中文输出(命令/路径/代码标识符保持原样不翻译)。
7
7
 
8
- 目标:在 OpenCode 中,优先借用 `oh-my-opencode` 的现有 agent 做任务拆分;若 oMo 不可用,再回退为普通 OpenCode delegation / 单 agent 执行。
8
+ 目标:优先借用 oMo agent 做任务拆分;若不可用,回退普通 OpenCode delegation / 单 agent
9
9
 
10
10
  ## 核心约束
11
11
 
12
- - **Subagent-First**:主 session 只做编排与收敛,不直接写实现代码。所有产出必须由 subagent 完成并可追溯到具体 worker。
13
- - **Handoff 证据**:每轮委托完成后,worker 必须产出结构化 handoff 到 `.aiws/changes/<id>/handoff-evidence.md`(完成项、未完成项、残余风险),供主 session 收敛判断。handoff 文件缺失等同于委托未完成。
12
+ - **Subagent-First**:主 session 只做编排收敛,不直接写代码。所有产出由 subagent 完成并可追溯。
13
+ - **Handoff 证据**:worker 必须产出 `.aiws/changes/<id>/handoff-evidence.md`(完成项、未完成项、残余风险)。文件缺失=委托未完成。
14
14
 
15
15
  ## 必需输入
16
16
 
17
- - 真值文件:`AI_PROJECT.md` / `REQUIREMENTS.md` / `AI_WORKSPACE.md`
18
- - delegation contract:`packages/spec/docs/workflow-delegation-contracts.md`
19
- - 上下文策展规范:`packages/spec/docs/workflow-delegation-context-injection.md`
20
- - OpenCode + oMo 适配说明:`packages/spec/docs/opencode-omo-adapter.md`
21
- - 连续执行循环:`packages/spec/docs/opencode-subagent-first.md`
17
+ - 真值文件 + delegation contract 等上下文(`workflow-delegation-contracts.md`、`opencode-omo-adapter.md`、`opencode-subagent-first.md`)
22
18
  - 当前任务已绑定 `Req_ID` / change / Verify
23
19
 
24
20
  ## 必需输出
25
21
 
26
22
  - `Delegation Plan:` role / preferred agent / readScope / writeScope / artifactTargets / fallback
27
- - `Context Curation:` 上下文策展详情
28
- - `Execution Mode:` `omo-native` / `opencode-native` / `single-agent`
29
- - `Evidence:` 产物路径
30
- - `Next:` 回到 `ws-dev` / `ws-review` / `ws-commit` / `ws-finish`
23
+ - `Context Curation:` 策展详情 / `Execution Mode:` / `Evidence:` / `Next:`
31
24
 
32
25
  ## 执行要求
33
26
 
34
- - 主 session 不直接改代码:所有实现与验证产物必须由 subagent 产出并向 handoff 记录可追溯
35
- - handoff 证据:手交材料中须含 delegate round number、产出文件路径、已知未关闭项
27
+ - 主 session 不直接改代码;所有产物由 subagent 产出且可追溯
28
+ - handoff delegate round number、产出文件路径、已知未关闭项
36
29
 
37
30
  ## 阻断条件
38
31
 
39
- - 任务未绑定
40
- - 没有写清委托边界
41
- - 上下文策展未执行(未生成 JSONL 或未在 prompt 中引用)
42
- - 无法判断当前是否可用 oMo,又不能接受回退
43
- - handoff 文件 `.aiws/changes/<id>/handoff-evidence.md` 缺失或为空(委托返回后必须检查)
32
+ 任务未绑定 / 委托边界不清 / 上下文策展未执行 / 无法判断 oMo 可用性 / handoff 文件缺失
44
33
 
45
34
  ## 角色映射
46
35
 
47
36
  | aiws 角色 | oMo Agent |
48
37
  |-----------|-----------|
49
- | `planner` | `planner-sisyphus` |
50
- | `explorer` | `@explore` / `@librarian` |
51
- | `reviewer` | `@oracle` |
52
- | `integrator` | 当前主 agent |
38
+ | planner | planner-sisyphus |
39
+ | explorer | @explore / @librarian |
40
+ | reviewer | @oracle |
41
+ | integrator | 当前主 agent |
53
42
 
54
- **推荐标准角色**(source: `workflow-delegation-contracts.json` standardRoles):
43
+ 推荐标准角色:
55
44
 
56
- | 角色 | 职责 | 读取范围 | 写入范围 |
57
- |------|------|----------|----------|
58
- | `implementer` | 代码+测试实现 | 真值文件+change上下文 | 代码文件+测试文件+evidence/ |
59
- | `reviewer` | 独立审查 | 真值文件+diff+evidence | review/*.md |
60
- | `researcher` | 分析探索 | 真值文件+外部文档 | analysis/*.md |
45
+ | 角色 | 职责 | 读取 | 写入 |
46
+ |------|------|------|------|
47
+ | implementer | 代码+测试实现 | 真值+change上下文 | 代码+测试+evidence/ |
48
+ | reviewer | 独立审查 | 真值+diff+evidence | review/*.md |
49
+ | researcher | 分析探索 | 真值+外部文档 | analysis/*.md |
61
50
 
62
- 这些角色为建议非强制;委托时优先参考但允许根据任务需要调整。
63
-
64
- ## 连续执行循环(Worker → Reviewer → Fix)
65
-
66
- 默认闭环(详见 `packages/spec/docs/opencode-subagent-first.md`):
51
+ ## 连续执行循环
67
52
 
68
53
  1. 主 session 策展上下文 JSONL → dispatch `aiws-worker`
69
- 2. 检查 worker 返回状态(DONE / DONE_WITH_CONCERNS / NEEDS_CONTEXT / BLOCKED)
70
- 3. DONE → dispatch `aiws-reviewer`
71
- 4. Reviewer pass 收敛 evidence;fail → 返回 worker 修复(最多 3 次)
72
- 5. DONE_WITH_CONCERNS `ws-quality-review`
73
- 6. NEEDS_CONTEXT补充上下文重试(最多 2 次)
74
- 7. BLOCKED → 输出 blocker 详情,不继续
54
+ 2. 检查返回状态(DONE / DONE_WITH_CONCERNS / NEEDS_CONTEXT / BLOCKED)
55
+ 3. DONE → dispatch `aiws-reviewer`;pass→收敛 evidence;fail→worker 修复(≤3 次)
56
+ 4. DONE_WITH_CONCERNS `ws-quality-review`
57
+ 5. NEEDS_CONTEXT补上下文重试(≤2 次);仍失败→回退单 agent
58
+ 6. BLOCKED输出 blocker 详情,不继续
75
59
 
76
60
  ## 上下文策展
77
61
 
78
- 详细规范见 `packages/spec/docs/workflow-delegation-context-injection.md`。
79
-
80
- 策展步骤:
81
- 1. 读取合同基线(`delegation-contracts.json` 中对应角色的 `contextFiles`)
82
- 2. 展开 glob 为实际路径(替换 `<id>`)
83
- 3. 委托者调整:添加/删除/调整 priority/sections
84
- 4. 预算检查:high+medium ≤ 5 文件,总行数 ≤ 4000
62
+ 1. 读取合同基线的 `contextFiles`
63
+ 2. 展开 glob(替换 `<id>`)
64
+ 3. 委托者调整(添加/删除/调整 priority/sections)
65
+ 4. 预算检查:high+medium ≤5 文件,总行数 ≤4000
85
66
  5. 写入 `.aiws/changes/<id>/analysis/<role>-context.jsonl`
86
67
 
87
- OpenCode 插件 `aiws-inject-context` 会自动注入 JSONL 上下文——只需在 `task()` 中指定 `role: <role>`。
68
+ 插件 `aiws-inject-context` 自动注入 JSONL——在 `task()` 中指定 `role: <role>` 即可。
88
69
 
89
70
  ## 子 agent 返回协议
90
71
 
91
72
  ```
92
73
  **Status:** DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
93
- **Completed:** 实现内容
94
- **Files Changed:** 文件路径
95
- **Verification:** 命令 + 结果
96
- **Artifacts:** analysis|patches|review|evidence 下的路径
97
- **Concerns:** 疑虑或未完成项
74
+ **Completed:** <实现内容>
75
+ **Files Changed:** <路径>
76
+ **Verification:** <命令+结果>
77
+ **Artifacts:** <analysis|patches|review|evidence 路径>
78
+ **Concerns:** <疑虑或未完成项>
98
79
  ```
99
80
 
100
- ### 状态处理
101
-
102
- - **DONE**: 进入 ws-review;若已过 review 则准备 ws-finish
103
- - **DONE_WITH_CONCERNS**: 先 ws-quality-review,根据风险决定是否阻断
104
- - **NEEDS_CONTEXT**: 补上下文重试(最多 2 次);仍失败则回退单 agent
105
- - **BLOCKED**: 停止委托;解 blocker 后重试;永不到达则升级给用户
106
-
107
81
  ## Delegation Plan 格式
108
82
 
109
83
  ```
110
84
  **Delegation Plan:**
111
- - role: worker
112
- - preferred agent: aiws-worker
113
- - task: <描述>
114
- - readScope: <文件/目录>
115
- - writeScope: <文件/目录>
85
+ - role: worker | preferred agent: aiws-worker
86
+ - readScope: <...> | writeScope: <...>
116
87
  - artifactTargets: .aiws/changes/<id>/patches/, .aiws/changes/<id>/evidence/
117
88
  - fallback: single-agent
118
89
  Context Curation: .aiws/changes/<id>/analysis/worker-context.jsonl
@@ -120,19 +91,13 @@ Context Curation: .aiws/changes/<id>/analysis/worker-context.jsonl
120
91
 
121
92
  ## 委托者检查清单
122
93
 
123
- 派遣前:
124
- - [ ] 子 agent prompt 包含上下文引用
125
- - [ ] JSONL 已写入 `.aiws/changes/<id>/analysis/<role>-context.jsonl`
126
- - [ ] 预算检查通过
127
- - [ ] readScope / writeScope / artifactTargets 已声明
94
+ 派遣前:`[ ] prompt 含上下文引用` `[ ] JSONL 已写入` `[ ] 预算检查通过` `[ ] readScope/writeScope/artifactTargets 已声明`
128
95
 
129
- 返回后:
130
- - [ ] 解析 Status 行
131
- - [ ] 非 DONE → 按状态处理规则行动
132
- - [ ] 非 DONE → 记录决策到 `delegation-decisions.md`
133
- - [ ] handoff 文件 `.aiws/changes/<id>/handoff-evidence.md` 已存在且非空
96
+ 返回后:`[ ] 解析 Status` `[ ] 非 DONE→按规则处理` `[ ] 非 DONE→记录决策到 delegation-decisions.md` `[ ] handoff 文件存在且非空`
134
97
 
135
98
  安全:
136
99
  - 不让 `ws-delegate` 变成第二套 orchestrator
137
100
  - 不让 delegated agent 越权写未授权文件
138
101
  - 不跳过 submodule drift check(若 `.gitmodules` 存在)
102
+
103
+ > 运行时行为约束:`packages/spec/docs/run-behavior-guidelines.md`
@@ -19,105 +19,71 @@ description: 使用时机:需要修改代码、配置、测试时。触发词
19
19
  ## 必需输出
20
20
 
21
21
  - `变更文件(Changed):` 实际改动清单
22
- - `验证(Verify):` 实际运行的命令与结果说明
23
- - `证据(Evidence):` `plan/...`、`.aiws/changes/<change-id>/...`、`.aiws/tmp/...` 等证据路径
22
+ - `验证(Verify):` 实际运行的命令与结果
23
+ - `证据(Evidence):` `plan/...`、`.aiws/changes/<change-id>/...` 等证据路径
24
24
  - `Next:` 若准备提交,建议 `$ws-review` 或 `$ws-commit`
25
25
 
26
26
  ## 前置条件(硬阻断 — 必须最先检查)
27
27
 
28
- 在开始任何代码改动之前,必须完成以下检查:
28
+ 1. **Design Gate**:若 `proposal.md` 不存在 → 立即停止,输出 `BLOCKED: 缺少 proposal。请先执行 $ws-plan`
29
+ 2. **Task Gate**:若 `tasks.md` 不存在 → 立即停止,输出 `BLOCKED: 缺少 tasks。请先执行 $ws-plan`
30
+ 3. **Granularity Gate**:对每个 task 估算原子操作数(read/edit/write/run)。若任一 task 需 >3 原子操作 → 立即停止,返回 `$ws-plan` 拆细后再进入。
29
31
 
30
- 1. **Design Gate**:若 `.aiws/changes/<change-id>/proposal.md` 不存在:
31
- - 立即停止,不要写代码
32
- - 输出:`BLOCKED: 缺少 proposal。请先执行 $ws-plan 创建变更计划与任务分解。`
33
- 2. **Task Gate**:若 `.aiws/changes/<change-id>/tasks.md` 不存在:
34
- - 立即停止,不要写代码
35
- - 输出:`BLOCKED: 缺少 tasks。请先执行 $ws-plan 创建任务分解。`
36
-
37
- > 例外:`ws-dev-lite` 是轻量入口,可豁免 Design Gate,但仅限单文件/typo/config/bugfix 场景。
32
+ > 例外:`ws-dev-lite` 可豁免 Design Gate,仅限单文件/typo/config/bugfix 场景。
38
33
 
39
34
  ## TDD 约束(强制)
40
35
 
41
- 对于所有需要编写新代码或修改业务逻辑的任务,必须遵守 RED-GREEN-REFACTOR 流程:
42
-
43
- 1. **RED**:先编写测试用例,运行并确认测试失败(或确认现有测试覆盖缺口)
44
- 2. **GREEN**:编写最小实现代码使测试通过
45
- 3. **REFACTOR**:重构代码,保持测试通过
46
-
47
- 禁止:
48
- - 先写实现代码再补测试
49
- - 跳过测试步骤直接提交
50
-
51
- 自我检查顺序(每次修改后):`lint → typecheck → test`。若项目无对应脚本则跳过该项。
36
+ 对于编写新代码或修改业务逻辑的任务,必须遵守 RED-GREEN-REFACTOR
37
+ 1. **RED**:先写测试,运行并确认测试失败
38
+ 2. **GREEN**:最小实现使测试通过
39
+ 3. **REFACTOR**:重构,保持测试通过
40
+ 禁止:先写实现再补测试 / 跳过测试直接提交。
41
+ 修改后自检:`lint → typecheck → test`(项目无对应脚本则跳过)。
52
42
 
53
43
  ## 完成判定
54
44
 
55
- 改动已落盘、验证已执行或明确未执行原因、证据路径可回放,并可进入 review/commit 阶段。
45
+ 改动已落盘、验证已执行或已说明未执行原因、证据路径可回放,可进入 review/commit
56
46
 
57
47
  ## 建议流程
58
48
 
59
49
  ### 1. Preflight
60
50
 
61
- 定位项目根目录,读取 `AI_PROJECT.md` / `REQUIREMENTS.md` / `AI_WORKSPACE.md`,输出约束摘要。
62
-
63
- - 中大型任务:建议先用 `$ws-plan` 生成 `plan/` 工件。
64
- - 中大型任务默认执行 [3.1 自我修正循环](#31-自我修正循环evaluate-optimize)——这是必经步骤,不是可选项:实现后先自审修正(最多 2 轮),再进入 review
65
- - 已有计划:先 `$ws-plan-verify`,通过后进入实现。
66
- - `$ws-plan` 已创建 worktree:直接在该 worktree 中继续。
51
+ 定位项目根,读取真值文件,输出约束摘要。
52
+ - 中大型任务:先用 `$ws-plan` 生成 `plan/` 工件,并默认执行 3.1 自我修正循环
53
+ - 已有计划:先 `$ws-plan-verify`,通过后进入实现
54
+ - `$ws-plan` 已创建 worktree:直接在其中继续
67
55
 
68
56
  ### 1.5 Spec Refresh(进入实现前必做)
69
57
 
70
- 在开始任何代码改动前,强制重读并输出摘要:
71
- - `AI_PROJECT.md` 安全边界(哪些目录不能动、哪些约束必须遵守)
72
- - `REQUIREMENTS.md` 中与本次 `Req_ID` 相关的条目(摘要 2-3 段即可)
73
-
74
- 目的:避免落地时遗忘约束或需求边界。仅需 2-3 段摘要,不需要全文复读。
58
+ 重读 `AI_PROJECT.md` 安全边界和 `REQUIREMENTS.md` 相关条目,输出 2-3 段摘要。避免遗忘约束或需求边界。
75
59
 
76
60
  ### 2. 建立变更归因
77
61
 
78
- - `git status --porcelain` 仅有计划/工件文件,属于预期行为,继续即可。
79
- - 若需创建新 change:`aiws change start <change-id> --hooks --no-switch`
80
- - 若需切换分支:先确认无额外未提交改动,再 `git switch change/<change-id>`
81
- - 若存在 submodule(`.gitmodules`):进入编码前必须准备好 `.aiws/changes/<change-id>/submodules.targets`。`aiws change start` 的 `--submodules` 标志会自动处理。参考 `changes/README.md` 和 `.aiws/changes/<change-id>/submodules.targets` 格式。
62
+ - `git status --porcelain` 仅有计划/工件文件 → 继续
63
+ - 创建新 change:`aiws change start <change-id> --hooks --no-switch`
64
+ - 切换分支:先确认无未提交改动,再 `git switch change/<change-id>`
65
+ - submodule:准备好 `submodules.targets`(`--submodules` 标志自动处理)
82
66
 
83
67
  ### 3. 实现策略:默认 dispatch aiws-worker(Subagent-First)
84
68
 
85
- 详细执行循环见 `packages/spec/docs/opencode-subagent-first.md`。
86
-
87
- - session **默认不直接写实现代码**;通过 `$ws-delegate` 派发 `aiws-worker`
88
- - `task()` 调用中指定 `role: worker`,让 `aiws-inject-context` 插件自动注入 JSONL 上下文
89
- - worker 返回后,派发 `aiws-reviewer` 做独立审查
90
- - 根据 review 结果决定 fix 或收敛 evidence
91
- - **Inline escape hatch**:如果用户明确说"你直接改"或"do it inline",主 session 可直接写代码,但必须落盘 evidence 记录理由
92
-
93
- **验证先行推荐**:对于非 trivial 改动,建议先确认验证入口再开始实现:
94
- 1. 先确认 `AI_WORKSPACE.md` 中对应的验证命令
95
- 2. 若验证命令不明确:先补验证入口,再开始实现
96
- 3. 可选模式(不强求 TDD):先写最小验证 → 实现 → 补完整验证
69
+ 详见 `packages/spec/docs/opencode-subagent-first.md`。
70
+ - 主 session **默认不直接写代码**;通过 `$ws-delegate` 派发 `aiws-worker`(`task()` 中加 `role: worker`)
71
+ - worker 返回后派发 `aiws-reviewer` 独立审查,根据结果 fix 或收敛 evidence
72
+ - **Inline escape hatch**:用户说"直接改"或"do it inline"时可直接写代码,但必须落盘记录理由
73
+ - 验证先行:先确认 `AI_WORKSPACE.md` 中验证命令;不明确则先补验证入口再实现
97
74
 
98
75
  ### 3.1 自我修正循环(evaluate-optimize)——必经步骤
99
76
 
100
- dispatch subagent 前,主 session 必须执行最多 **2 轮** 自审+修正循环:
101
-
102
- 1. **实现** → subagent 产出代码
103
- 2. **自审** → 主 session 检查:lint/type-check 是否通过?是否符合现有代码模式?是否有明显 bug?
104
- 3. **修正** → 如果发现问题,要求 subagent 修正后重新提交
105
- 4. **2 轮上限** → 如果 2 轮后仍有问题,升级到 `$ws-review` 做正式审查
106
-
107
- **适用场景**:所有非 trivial 改动(单文件修复、配置调整、小步实现、中大型任务均适用)。不适合跨模块架构变更——此类变更直接走 $ws-review。
108
-
109
- **注意**:这不是替代 `$ws-review` 的门禁;自审通过后仍需走正式 review gate。
77
+ dispatch 前最多 **2 轮** 自审+修正:subagent 产出 → 主 session 检查(lint/typecheck/代码模式)→ 有问题则要求修正 → 2 轮后仍有问题升级到 `$ws-review`。
78
+ 适用:所有非 trivial 改动。注意:不替代 `$ws-review` 正式 gate。
110
79
 
111
80
  ### 4. 其他规则
112
81
 
113
- - 需求调整:先 `$ws-req-review` → 确认后 `$ws-req-change`
114
- - 最小改动:每处改动必须归因到 `REQUIREMENTS.md` 或 `issues/problem-issues.csv`
115
- - 验证:运行 `AI_WORKSPACE.md` 声明的命令;未运行不声称已运行
116
- - 多步任务:使用 `update_plan` 工具跟踪状态
117
- - 提交前门禁:
118
- ```bash
119
- aiws validate .
120
- ```
82
+ - 需求调整:`$ws-req-review` → 确认后 `$ws-req-change`
83
+ - 最小改动:每处改动归因到 `REQUIREMENTS.md` 或 `issues/problem-issues.csv`
84
+ - 验证:运行 `AI_WORKSPACE.md` 命令;未运行不声称已运行
85
+ - 多步任务用 `update_plan` 跟踪
86
+ - 提交前门禁:`aiws validate .`
121
87
  - 交付收尾:`$ws-finish`
122
88
 
123
89
  ## 输出要求
@@ -125,3 +91,5 @@ description: 使用时机:需要修改代码、配置、测试时。触发词
125
91
  - `变更文件(Changed):` 文件清单
126
92
  - `验证(Verify):` 实际运行的命令 + 期望结果
127
93
  - `证据(Evidence):` 证据路径
94
+
95
+ > 运行时行为约束:`packages/spec/docs/run-behavior-guidelines.md`
@@ -72,3 +72,5 @@ Workflow State Suffix(会话门禁约定):
72
72
  - `gate` 后缀保留给 `ws-dev` / `ws-plan-verify` 的完整计划门禁;不要在本 skill 中使用 `gate` 后缀。
73
73
  - 若需要与 `ws-dev` 共享状态:先通过 `$ws-dev` 建立 `gate` 后缀记录,再回到 lite 修复。
74
74
  - 详细参见 `ws-dev` 的 Workflow State Suffix 约定。
75
+
76
+ > 运行时行为约束:`packages/spec/docs/run-behavior-guidelines.md`