ws-spec-kit 0.1.0-beta.0 → 0.1.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/adapters/cli/workflow.js +11 -1
- package/dist/adapters/cli/workflow.js.map +1 -1
- package/dist/application/acquire.js +40 -25
- package/dist/application/acquire.js.map +1 -1
- package/dist/application/artifact.js +8 -4
- package/dist/application/artifact.js.map +1 -1
- package/dist/application/snapshot.d.ts +2 -1
- package/dist/application/snapshot.js +5 -1
- package/dist/application/snapshot.js.map +1 -1
- package/dist/application/start.js +26 -42
- package/dist/application/start.js.map +1 -1
- package/dist/application/state.d.ts +1 -0
- package/dist/application/state.js +7 -46
- package/dist/application/state.js.map +1 -1
- package/dist/application/submit.js +17 -4
- package/dist/application/submit.js.map +1 -1
- package/dist/cli/main.js +1 -1
- package/dist/domain/digests.d.ts +1 -1
- package/dist/domain/digests.js +27 -3
- package/dist/domain/digests.js.map +1 -1
- package/dist/domain/workflow.d.ts +2 -1
- package/dist/engine/approvals.js +29 -19
- package/dist/engine/approvals.js.map +1 -1
- package/dist/engine/archive.d.ts +1 -0
- package/dist/engine/archive.js +9 -4
- package/dist/engine/archive.js.map +1 -1
- package/dist/engine/compiler.js +2 -1
- package/dist/engine/compiler.js.map +1 -1
- package/dist/engine/scheduler.js +3 -9
- package/dist/engine/scheduler.js.map +1 -1
- package/dist/engine/verification.d.ts +6 -0
- package/dist/engine/verification.js +12 -3
- package/dist/engine/verification.js.map +1 -1
- package/dist/protocol/public-contract.d.ts +6 -6
- package/dist/protocol/public-contract.js +5 -5
- package/dist/protocol/public-contract.js.map +1 -1
- package/dist/protocol/work-package.d.ts +5 -0
- package/dist/registry/connectors/requirement-source.d.ts +3 -1
- package/dist/registry/connectors/requirement-source.js +9 -4
- package/dist/registry/connectors/requirement-source.js.map +1 -1
- package/dist/registry/skills/resolver.d.ts +3 -1
- package/dist/registry/skills/resolver.js +3 -2
- package/dist/registry/skills/resolver.js.map +1 -1
- package/dist/schemas/definitions.js +7 -2
- package/dist/schemas/definitions.js.map +1 -1
- package/dist/storage/control-plane.d.ts +12 -0
- package/dist/storage/control-plane.js +49 -8
- package/dist/storage/control-plane.js.map +1 -1
- package/dist/storage/repository.d.ts +1 -0
- package/dist/storage/repository.js +21 -4
- package/dist/storage/repository.js.map +1 -1
- package/dist/storage/work-items.d.ts +8 -1
- package/dist/storage/work-items.js +150 -35
- package/dist/storage/work-items.js.map +1 -1
- package/dist/workflow-package/types.d.ts +2 -0
- package/dist/workflow-package/types.js.map +1 -1
- package/dist/workflow-package/workflow-v1.js +4 -2
- package/dist/workflow-package/workflow-v1.js.map +1 -1
- package/package.json +1 -1
- package/resources/catalog.yaml +9 -9
- package/resources/skills/bug-fixing/SKILL.md +18 -6
- package/resources/skills/code-review/SKILL.md +18 -6
- package/resources/skills/documentation-editing/SKILL.md +14 -6
- package/resources/skills/documentation-exploration/SKILL.md +14 -6
- package/resources/skills/documentation-review/SKILL.md +17 -6
- package/resources/skills/requirement-exploration/SKILL.md +20 -6
- package/resources/skills/solution-design/SKILL.md +18 -6
- package/resources/skills/task-planning/SKILL.md +18 -6
- package/resources/skills/tdd-implementation/SKILL.md +27 -7
- package/resources/workflows/documentation-delivery/workflow.yaml +15 -0
- package/resources/workflows/feature-delivery/workflow.yaml +18 -0
- package/schemas/builtin-agent-action-v1.schema.json +20 -0
- package/schemas/builtin-work-item-v1.schema.json +4 -2
- package/schemas/builtin-work-package-v1.schema.json +20 -0
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: documentation-editing
|
|
3
|
-
description:
|
|
3
|
+
description: 按事实编辑中文文档。用于 edit-document:只改允许路径,句子能指回事实。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 编辑中文文档
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
改文档是在更新缓存。每个陈述句都要指回已确认事实。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## 步骤
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
1. **读事实清单**
|
|
13
|
+
完成:知道增、删、改哪几句。
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
2. **只改允许路径**
|
|
16
|
+
在 `allowedPaths` 内编辑中文正文。完成:diff 不含代码、配置或范围外文件。
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
3. **交文档变更**
|
|
19
|
+
完成:新增句都能指证;过时句已删或已改。
|
|
20
|
+
|
|
21
|
+
## 规则
|
|
22
|
+
|
|
23
|
+
- 先写清完成标准,再堆解释。
|
|
24
|
+
- 范围外或事实不足:停止并报告阻塞。
|
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: documentation-exploration
|
|
3
|
-
description:
|
|
3
|
+
description: 探索文档事实。用于文档 explore:只收录仓库与原文里能指证的事实。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 探索文档事实
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
文档只陈述能指证的事实。代码、配置、帮助输出是真源;旧文档是待核缓存。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## 步骤
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
1. **钉范围**
|
|
13
|
+
读允许的文档路径与目标。完成:知道哪些文件能改。
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
2. **对事实**
|
|
16
|
+
每条将写入的句子都能指到源文件、命令或已确认原文。完成:过时文档被标成缓存,不当新事实。
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
3. **交事实清单**
|
|
19
|
+
写出现状、缺口、过时句。完成:编辑者不用再猜 API 或行为。
|
|
20
|
+
|
|
21
|
+
## 规则
|
|
22
|
+
|
|
23
|
+
- 查得到的不抄进清单当永久正文,只记「到哪查」。
|
|
24
|
+
- 事实对不上:停止并报告阻塞。
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: documentation-review
|
|
3
|
-
description:
|
|
3
|
+
description: 审查文档。用于文档 review:核对准确性与完整性,不改文件。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 审查文档质量
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
对照事实清单审 diff。准确且完整才能批准。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## 步骤
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
1. **钉变更**
|
|
13
|
+
读允许路径内的 diff 与事实清单。完成:每处改动都已看见。
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
2. **审准确**
|
|
16
|
+
句子不得与代码、配置或原文冲突。完成:过时或臆造句都是 finding。
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
3. **审完整**
|
|
19
|
+
事实清单里要公开的点都有落点。完成:缺口都列出来。
|
|
20
|
+
|
|
21
|
+
4. **交审查结果**
|
|
22
|
+
完成:`approved` 仅在准确且完整时为真。
|
|
23
|
+
|
|
24
|
+
## 规则
|
|
25
|
+
|
|
26
|
+
- 不改文档。修复走 documentation-editing。
|
|
27
|
+
- 事实对不上:停止并报告阻塞。
|
|
@@ -1,16 +1,30 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: requirement-exploration
|
|
3
|
-
description:
|
|
3
|
+
description: 探索代码与需求。用于 explore/clarify:grill 未决决策、从仓库取事实、写出规格。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 探索代码与需求
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
事实从仓库取;决策问用户。未证实的业务当缺口,不当规格。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## 步骤
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
1. **读 Work Package**
|
|
13
|
+
记下 `requiredOutputs`、允许路径、已有 Artifact。完成:能复述本步要交的 `outputId`。
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
2. **取事实**
|
|
16
|
+
顺着调用链读现有模块、配置、测试和 Issue/规格原文。完成:每条约束都能指到文件或原文,没有猜的 API。
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
3. **摊 frontier**
|
|
19
|
+
一次列出所有已解锁、必须人答的决策。完成:没有「先假设再继续」的开放问题。
|
|
20
|
+
|
|
21
|
+
4. **交产物**
|
|
22
|
+
- explore:写 `exploration-report`(现状、约束、缺口、风险信号)。
|
|
23
|
+
- clarify:只把已确认事实写成 `specification`。
|
|
24
|
+
完成:产物覆盖 `requiredOutputs`,缺口标成阻塞而不是默认值。
|
|
25
|
+
|
|
26
|
+
## 规则
|
|
27
|
+
|
|
28
|
+
- 一轮问完当前 frontier,等答复再写规格。
|
|
29
|
+
- 风险信号(外部写入、密钥、跨仓、破坏兼容)写进报告,供 Profile 升级,不在这里改档。
|
|
30
|
+
- 缺授权、缺原文或路径越界:停止并报告阻塞。
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: solution-design
|
|
3
|
-
description:
|
|
3
|
+
description: 设计可实施的技术方案。用于 design:在已确认规格上选 seam、写取舍。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 设计技术方案
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
设计对着已确认规格,不发明需求。优先加深现有模块,不平行再造一套。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## 步骤
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
1. **钉规格**
|
|
13
|
+
读 `specification` 与探索报告。完成:每个要动的行为都能指回规格句子。
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
2. **找 seam**
|
|
16
|
+
标出将要切开的公共边界(入口、配置、Gate、适配器)。完成:能一句话说清「外面看见什么,里面藏什么」。
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
3. **写取舍**
|
|
19
|
+
每个关键缝至少两个真方案,写清为何选这个。完成:落选方案有具体代价,不是空对比。
|
|
20
|
+
|
|
21
|
+
4. **交 `design`**
|
|
22
|
+
写模块形状、数据流、失败方式和验证点。完成:实现者不用再猜接口;测试能钉在这些 seam 上。
|
|
23
|
+
|
|
24
|
+
## 规则
|
|
25
|
+
|
|
26
|
+
- 非法状态用类型消掉,不在调用点反复校验。
|
|
27
|
+
- 不扩允许路径,不引入未声明的外部写入。
|
|
28
|
+
- 规格未决:停止并报告阻塞,不把设计当拍板。
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: task-planning
|
|
3
|
-
description:
|
|
3
|
+
description: 把设计拆成可验证任务。用于 plan:tracer-bullet、声明阻塞边。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 拆分实施任务
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
一张任务做一件可观察行为。先做挡住别人的,再做被挡住的。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## 步骤
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
1. **读设计**
|
|
13
|
+
对照 `specification` 与 `design`。完成:每个任务能指回一个设计缝或规格条款。
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
2. **切 tracer**
|
|
16
|
+
按可独立验证的行为切开,写下阻塞边。完成:没有「做完功能 X」这种大篮子;环被拆开。
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
3. **标验证**
|
|
19
|
+
每个任务写清红测会看见什么。完成:验收是命令或断言,不是「看起来对」。
|
|
20
|
+
|
|
21
|
+
4. **交 `tasks`**
|
|
22
|
+
按阻塞序排列。完成:实现者可以一次只拿一张任务,不必回头猜依赖。
|
|
23
|
+
|
|
24
|
+
## 规则
|
|
25
|
+
|
|
26
|
+
- 实现与其测试是同一张任务。
|
|
27
|
+
- 目录不同且可独立回滚的,拆开。
|
|
28
|
+
- 设计缺口:停止并报告阻塞。
|
|
@@ -1,16 +1,36 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tdd-implementation
|
|
3
|
-
description:
|
|
3
|
+
description: 测试驱动实现。用于 write-tests/implement:先 red,再最小 green。钉在公开 seam。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# 测试驱动实现
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
先 red,再 green。测公开 seam,不测私有结构。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## write-tests
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
1. **钉一张任务**
|
|
13
|
+
只取当前 `tasks` 中未完成的第一张。完成:知道这条红测失败时证明什么。
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
2. **写红测**
|
|
16
|
+
Given / When / Then;期望值来自规格或字面量,不从实现反推。完成:跑项目 Test Gate 时因**断言**失败,不是缺模块或语法错。
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
3. **交 `red-test-result`**
|
|
19
|
+
完成:写明测了哪条行为、失败种类是 assertion。
|
|
20
|
+
|
|
21
|
+
## implement
|
|
22
|
+
|
|
23
|
+
1. **保住红测**
|
|
24
|
+
不删、不放宽、不改断言含义。完成:红测文件身份仍是 verify-red 绑过的那批。
|
|
25
|
+
|
|
26
|
+
2. **最小 green**
|
|
27
|
+
只写让这条红测通过的代码。完成:同一 Test Gate 退出码为 0,且红测仍在。
|
|
28
|
+
|
|
29
|
+
3. **交 `implementation-result`**
|
|
30
|
+
完成:列出改动的 seam,没有顺手做下一张任务。
|
|
31
|
+
|
|
32
|
+
## 规则
|
|
33
|
+
|
|
34
|
+
- 一次一条。下一条是下一轮 red。
|
|
35
|
+
- Mock 是最后手段。能用真实对象、内存 fake 或 Test Gate 就不要 mock。
|
|
36
|
+
- 缺完整 Test Gate、红测不是 assertion、或路径越界:停止并报告阻塞。
|
|
@@ -8,11 +8,13 @@ inputs:
|
|
|
8
8
|
steps:
|
|
9
9
|
- id: intake
|
|
10
10
|
uses: connector.execute
|
|
11
|
+
workspace: read-only
|
|
11
12
|
action: requirement.capture
|
|
12
13
|
inputs: [requirement-source]
|
|
13
14
|
outputs: [requirement-source]
|
|
14
15
|
- id: explore
|
|
15
16
|
uses: agent.execute
|
|
17
|
+
workspace: read-only
|
|
16
18
|
needs: [intake]
|
|
17
19
|
inputs: [requirement-source]
|
|
18
20
|
skills:
|
|
@@ -21,6 +23,7 @@ steps:
|
|
|
21
23
|
outputs: [documentation-context]
|
|
22
24
|
- id: clarify
|
|
23
25
|
uses: agent.execute
|
|
26
|
+
workspace: read-only
|
|
24
27
|
needs: [explore]
|
|
25
28
|
inputs: [documentation-context]
|
|
26
29
|
skills:
|
|
@@ -29,6 +32,7 @@ steps:
|
|
|
29
32
|
outputs: [specification]
|
|
30
33
|
- id: plan
|
|
31
34
|
uses: agent.execute
|
|
35
|
+
workspace: read-only
|
|
32
36
|
needs: [clarify]
|
|
33
37
|
inputs: [specification]
|
|
34
38
|
skills:
|
|
@@ -37,6 +41,7 @@ steps:
|
|
|
37
41
|
outputs: [tasks]
|
|
38
42
|
- id: edit-document
|
|
39
43
|
uses: agent.execute
|
|
44
|
+
workspace: isolated-worktree
|
|
40
45
|
actorRole: implementation
|
|
41
46
|
needs: [plan]
|
|
42
47
|
inputs: [tasks]
|
|
@@ -46,12 +51,14 @@ steps:
|
|
|
46
51
|
outputs: [documentation-result]
|
|
47
52
|
- id: verify-document
|
|
48
53
|
uses: command.execute
|
|
54
|
+
workspace: isolated-worktree
|
|
49
55
|
action: quality.docs.integrity
|
|
50
56
|
needs: [edit-document]
|
|
51
57
|
inputs: [documentation-result]
|
|
52
58
|
outputs: [documentation-evidence]
|
|
53
59
|
- id: review-fix
|
|
54
60
|
uses: control.loop
|
|
61
|
+
workspace: isolated-worktree
|
|
55
62
|
needs: [verify-document]
|
|
56
63
|
inputs: [documentation-evidence]
|
|
57
64
|
until: ${artifacts.review-result.approved}
|
|
@@ -59,6 +66,7 @@ steps:
|
|
|
59
66
|
steps:
|
|
60
67
|
- id: review
|
|
61
68
|
uses: agent.execute
|
|
69
|
+
workspace: isolated-worktree
|
|
62
70
|
actorRole: review
|
|
63
71
|
skills:
|
|
64
72
|
- ref: builtin://skills/documentation-review
|
|
@@ -66,6 +74,7 @@ steps:
|
|
|
66
74
|
outputs: [review-result]
|
|
67
75
|
- id: fix
|
|
68
76
|
uses: agent.execute
|
|
77
|
+
workspace: isolated-worktree
|
|
69
78
|
actorRole: fix
|
|
70
79
|
when: ${artifacts.review-result.approved == false}
|
|
71
80
|
skills:
|
|
@@ -73,32 +82,38 @@ steps:
|
|
|
73
82
|
required: true
|
|
74
83
|
- id: verify
|
|
75
84
|
uses: command.execute
|
|
85
|
+
workspace: isolated-worktree
|
|
76
86
|
action: quality.docs.integrity
|
|
77
87
|
- id: commit
|
|
78
88
|
uses: connector.execute
|
|
89
|
+
workspace: isolated-worktree
|
|
79
90
|
action: git.commit
|
|
80
91
|
needs: [review-fix]
|
|
81
92
|
approval: required
|
|
82
93
|
- id: update-issue
|
|
83
94
|
uses: connector.execute
|
|
95
|
+
workspace: read-only
|
|
84
96
|
action: issue.update
|
|
85
97
|
needs: [commit]
|
|
86
98
|
inputs: [documentation-result]
|
|
87
99
|
when: ${bindings.issue.exists}
|
|
88
100
|
- id: update-wiki
|
|
89
101
|
uses: connector.execute
|
|
102
|
+
workspace: read-only
|
|
90
103
|
action: knowledge.publish
|
|
91
104
|
needs: [update-issue]
|
|
92
105
|
inputs: [documentation-result]
|
|
93
106
|
when: ${bindings.knowledge.exists}
|
|
94
107
|
- id: close-issue
|
|
95
108
|
uses: connector.execute
|
|
109
|
+
workspace: read-only
|
|
96
110
|
action: issue.close
|
|
97
111
|
needs: [update-wiki]
|
|
98
112
|
when: ${bindings.issue.exists}
|
|
99
113
|
approval: required
|
|
100
114
|
- id: close
|
|
101
115
|
uses: control.close
|
|
116
|
+
workspace: read-only
|
|
102
117
|
needs: [close-issue]
|
|
103
118
|
gates:
|
|
104
119
|
- id: docs.integrity
|
|
@@ -8,11 +8,13 @@ inputs:
|
|
|
8
8
|
steps:
|
|
9
9
|
- id: intake
|
|
10
10
|
uses: connector.execute
|
|
11
|
+
workspace: read-only
|
|
11
12
|
action: requirement.capture
|
|
12
13
|
inputs: [requirement-source]
|
|
13
14
|
outputs: [requirement-source]
|
|
14
15
|
- id: explore
|
|
15
16
|
uses: agent.execute
|
|
17
|
+
workspace: read-only
|
|
16
18
|
needs: [intake]
|
|
17
19
|
inputs: [requirement-source]
|
|
18
20
|
objective: 探索代码并提取需求相关约束
|
|
@@ -22,6 +24,7 @@ steps:
|
|
|
22
24
|
outputs: [exploration-report]
|
|
23
25
|
- id: clarify
|
|
24
26
|
uses: agent.execute
|
|
27
|
+
workspace: read-only
|
|
25
28
|
needs: [explore]
|
|
26
29
|
inputs: [exploration-report]
|
|
27
30
|
objective: 澄清需求并生成可验收规格
|
|
@@ -32,6 +35,7 @@ steps:
|
|
|
32
35
|
approval: required
|
|
33
36
|
- id: design
|
|
34
37
|
uses: agent.execute
|
|
38
|
+
workspace: read-only
|
|
35
39
|
needs: [clarify]
|
|
36
40
|
inputs: [specification]
|
|
37
41
|
objective: 形成可实施的技术方案
|
|
@@ -42,6 +46,7 @@ steps:
|
|
|
42
46
|
approval: required
|
|
43
47
|
- id: plan
|
|
44
48
|
uses: agent.execute
|
|
49
|
+
workspace: read-only
|
|
45
50
|
needs: [clarify, design]
|
|
46
51
|
objective: 将设计拆分为可验证任务
|
|
47
52
|
skills:
|
|
@@ -55,6 +60,7 @@ steps:
|
|
|
55
60
|
required: false
|
|
56
61
|
- id: write-tests
|
|
57
62
|
uses: agent.execute
|
|
63
|
+
workspace: isolated-worktree
|
|
58
64
|
needs: [plan]
|
|
59
65
|
inputs: [tasks]
|
|
60
66
|
objective: 根据当前任务先编写能够因缺少功能而失败的测试
|
|
@@ -64,6 +70,7 @@ steps:
|
|
|
64
70
|
outputs: [red-test-result]
|
|
65
71
|
- id: verify-red
|
|
66
72
|
uses: command.execute
|
|
73
|
+
workspace: isolated-worktree
|
|
67
74
|
action: quality.test
|
|
68
75
|
expectedOutcome: test-failure
|
|
69
76
|
needs: [write-tests]
|
|
@@ -71,6 +78,7 @@ steps:
|
|
|
71
78
|
outputs: [red-evidence]
|
|
72
79
|
- id: implement
|
|
73
80
|
uses: agent.execute
|
|
81
|
+
workspace: isolated-worktree
|
|
74
82
|
actorRole: implementation
|
|
75
83
|
needs: [verify-red]
|
|
76
84
|
inputs: [tasks]
|
|
@@ -81,6 +89,7 @@ steps:
|
|
|
81
89
|
outputs: [implementation-result]
|
|
82
90
|
- id: verify-green
|
|
83
91
|
uses: command.execute
|
|
92
|
+
workspace: isolated-worktree
|
|
84
93
|
action: quality.test
|
|
85
94
|
expectedOutcome: success
|
|
86
95
|
needs: [implement]
|
|
@@ -88,12 +97,14 @@ steps:
|
|
|
88
97
|
outputs: [tdd-evidence]
|
|
89
98
|
- id: review-fix
|
|
90
99
|
uses: control.loop
|
|
100
|
+
workspace: isolated-worktree
|
|
91
101
|
needs: [verify-green]
|
|
92
102
|
until: ${artifacts.review-result.approved}
|
|
93
103
|
maxIterations: 5
|
|
94
104
|
steps:
|
|
95
105
|
- id: review
|
|
96
106
|
uses: agent.execute
|
|
107
|
+
workspace: isolated-worktree
|
|
97
108
|
actorRole: review
|
|
98
109
|
skills:
|
|
99
110
|
- ref: builtin://skills/code-review
|
|
@@ -101,6 +112,7 @@ steps:
|
|
|
101
112
|
outputs: [review-result]
|
|
102
113
|
- id: fix
|
|
103
114
|
uses: agent.execute
|
|
115
|
+
workspace: isolated-worktree
|
|
104
116
|
actorRole: fix
|
|
105
117
|
when: ${artifacts.review-result.approved == false}
|
|
106
118
|
skills:
|
|
@@ -108,32 +120,38 @@ steps:
|
|
|
108
120
|
required: true
|
|
109
121
|
- id: verify
|
|
110
122
|
uses: command.execute
|
|
123
|
+
workspace: isolated-worktree
|
|
111
124
|
action: quality.verify
|
|
112
125
|
- id: commit
|
|
113
126
|
uses: connector.execute
|
|
127
|
+
workspace: isolated-worktree
|
|
114
128
|
action: git.commit
|
|
115
129
|
needs: [review-fix]
|
|
116
130
|
approval: required
|
|
117
131
|
- id: update-issue
|
|
118
132
|
uses: connector.execute
|
|
133
|
+
workspace: read-only
|
|
119
134
|
action: issue.update
|
|
120
135
|
needs: [commit]
|
|
121
136
|
inputs: [implementation-result]
|
|
122
137
|
when: ${bindings.issue.exists}
|
|
123
138
|
- id: update-wiki
|
|
124
139
|
uses: connector.execute
|
|
140
|
+
workspace: read-only
|
|
125
141
|
action: knowledge.publish
|
|
126
142
|
needs: [update-issue]
|
|
127
143
|
inputs: [implementation-result]
|
|
128
144
|
when: ${bindings.knowledge.exists}
|
|
129
145
|
- id: close-issue
|
|
130
146
|
uses: connector.execute
|
|
147
|
+
workspace: read-only
|
|
131
148
|
action: issue.close
|
|
132
149
|
needs: [update-wiki]
|
|
133
150
|
when: ${bindings.issue.exists}
|
|
134
151
|
approval: required
|
|
135
152
|
- id: close
|
|
136
153
|
uses: control.close
|
|
154
|
+
workspace: read-only
|
|
137
155
|
needs: [close-issue]
|
|
138
156
|
gates:
|
|
139
157
|
- id: test
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"workItemId",
|
|
22
22
|
"stepId",
|
|
23
23
|
"attemptId",
|
|
24
|
+
"workspace",
|
|
24
25
|
"lease",
|
|
25
26
|
"objective",
|
|
26
27
|
"skills",
|
|
@@ -46,6 +47,25 @@
|
|
|
46
47
|
"type": "string",
|
|
47
48
|
"pattern": "^attempt-.+$"
|
|
48
49
|
},
|
|
50
|
+
"workspace": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"additionalProperties": false,
|
|
53
|
+
"required": [
|
|
54
|
+
"mode",
|
|
55
|
+
"materialized"
|
|
56
|
+
],
|
|
57
|
+
"properties": {
|
|
58
|
+
"mode": {
|
|
59
|
+
"enum": [
|
|
60
|
+
"read-only",
|
|
61
|
+
"isolated-worktree"
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
"materialized": {
|
|
65
|
+
"type": "boolean"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
49
69
|
"lease": {
|
|
50
70
|
"type": "object",
|
|
51
71
|
"additionalProperties": false,
|
|
@@ -58,8 +58,7 @@
|
|
|
58
58
|
"baselineRevision",
|
|
59
59
|
"baselineTreeDigest",
|
|
60
60
|
"workflowDigest",
|
|
61
|
-
"configDigest"
|
|
62
|
-
"schemaDigest"
|
|
61
|
+
"configDigest"
|
|
63
62
|
],
|
|
64
63
|
"properties": {
|
|
65
64
|
"worktree": {
|
|
@@ -70,6 +69,9 @@
|
|
|
70
69
|
"type": "string",
|
|
71
70
|
"minLength": 1
|
|
72
71
|
},
|
|
72
|
+
"materialized": {
|
|
73
|
+
"type": "boolean"
|
|
74
|
+
},
|
|
73
75
|
"baselineRevision": {
|
|
74
76
|
"type": "string",
|
|
75
77
|
"minLength": 1
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"workItemId",
|
|
9
9
|
"stepId",
|
|
10
10
|
"attemptId",
|
|
11
|
+
"workspace",
|
|
11
12
|
"lease",
|
|
12
13
|
"objective",
|
|
13
14
|
"skills",
|
|
@@ -33,6 +34,25 @@
|
|
|
33
34
|
"type": "string",
|
|
34
35
|
"pattern": "^attempt-.+$"
|
|
35
36
|
},
|
|
37
|
+
"workspace": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"additionalProperties": false,
|
|
40
|
+
"required": [
|
|
41
|
+
"mode",
|
|
42
|
+
"materialized"
|
|
43
|
+
],
|
|
44
|
+
"properties": {
|
|
45
|
+
"mode": {
|
|
46
|
+
"enum": [
|
|
47
|
+
"read-only",
|
|
48
|
+
"isolated-worktree"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"materialized": {
|
|
52
|
+
"type": "boolean"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
36
56
|
"lease": {
|
|
37
57
|
"type": "object",
|
|
38
58
|
"additionalProperties": false,
|