@namewta/speculo 0.7.2 → 0.7.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/dist/src/migrations.js +604 -23
- package/dist/src/migrations.js.map +1 -1
- package/package.json +1 -1
- package/template/canonical/canonical-specdev-engineering-cognitive-mentor.md +171 -455
- package/template/canonical/canonical-specdev-goal-plan.md +686 -1117
- package/template/canonical/canonical-specdev-grill-with-docs.md +172 -456
- package/template/canonical/canonical-specdev-spec.md +199 -493
- package/template/canonical/canonical-specdev-tickets.md +378 -597
- package/template/canonical/canonical-specdev-wayfinder.md +170 -454
- package/template/skills/migrate-runtime-state/SKILL.md +6 -6
- package/template/skills/migrate-runtime-state/references/migration-contract.md +9 -3
- package/template/skills/migrate-runtime-state/scripts/migrate-runtime-state.mjs +322 -33
- package/template/workflows/specdev/I-implement/I-implement.md +97 -143
- package/template/workflows/specdev/I-implement/evidence-template.md +60 -48
- package/template/workflows/specdev/I-implement/execution-preflight.md +29 -21
- package/template/workflows/specdev/I-implement/merge-conflict-protocol.md +12 -12
- package/template/workflows/specdev/I-init-setup/I-init-setup.md +4 -5
- package/template/workflows/specdev/I-init-setup/change-status-template.json +14 -1
- package/template/workflows/specdev/I-init-setup/config-template.json +3 -5
- package/template/workflows/specdev/I-init-setup/status-template.json +1 -1
- package/template/workflows/specdev/INDEX.md +11 -8
- package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +76 -102
- package/template/workflows/specdev/P-goal-plan/completion-control.md +26 -44
- package/template/workflows/specdev/P-goal-plan/goal-plan-template.md +40 -37
- package/template/workflows/specdev/P-goal-plan/lead-orchestration.md +34 -0
- package/template/workflows/specdev/P-goal-plan/orchestration-protocol.md +31 -46
- package/template/workflows/specdev/P-goal-plan/planning-modes.md +42 -76
- package/template/workflows/specdev/T-tickets/T-tickets.md +6 -3
- package/template/workflows/specdev/T-tickets/ticket-readiness.md +5 -3
- package/template/workflows/specdev/T-tickets/ticket-template.md +8 -1
- package/template/workflows/specdev/T-tickets/tickets-map-template.md +5 -4
- package/template/workflows/specdev/_state/status.json +1 -1
- package/template/workflows/specdev/common/README.md +2 -2
- package/template/workflows/specdev/common/rules/change-completion.md +17 -20
- package/template/workflows/specdev/common/rules/deviation-control.md +1 -1
- package/template/workflows/specdev/common/rules/evidence-and-verification.md +27 -37
- package/template/workflows/specdev/common/rules/path-ownership.md +21 -23
- package/template/workflows/specdev/common/rules/readiness-and-depth.md +1 -1
- package/template/workflows/specdev/common/schemas/change-status.schema.json +136 -373
- package/template/workflows/specdev/common/schemas/config.schema.json +9 -11
- package/template/workflows/specdev/common/schemas/goal-plan.schema.json +24 -16
- package/template/workflows/specdev/common/schemas/status.schema.json +7 -63
- package/template/workflows/specdev/common/skills/dev-worktree/SKILL.md +42 -21
- package/template/workflows/specdev/common/skills/dev-worktree/references/create.md +36 -21
- package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +46 -18
- package/template/workflows/specdev/common/skills/subagent-delivery/SKILL.md +34 -31
- package/template/workflows/specdev/common/skills/subagent-delivery/references/external-web-subagent.md +10 -23
- package/template/workflows/specdev/common/skills/subagent-delivery/references/native-subagent.md +15 -25
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +386 -209
- package/template/workflows/specdev/I-implement/delegated-evidence-template.md +0 -12
- package/template/workflows/specdev/P-goal-plan/delegated-execution-template.md +0 -35
- package/template/workflows/specdev/P-goal-plan/delegated-execution.md +0 -59
- package/template/workflows/specdev/P-goal-plan/workspace-execution-template.md +0 -24
|
@@ -3,222 +3,176 @@ id: specdev/implement
|
|
|
3
3
|
type: workflow-entry
|
|
4
4
|
workflow: specdev
|
|
5
5
|
name: 实现
|
|
6
|
-
description: 基于 Ready Ticket
|
|
7
|
-
keywords: [实现, TDD,
|
|
6
|
+
description: 基于 Ready Ticket 或获批小型 Spec 执行设计检查、TDD、动态派单、双轴审查、Ticket worktree commit、候选合并验证和 Lead Evidence 回写。
|
|
7
|
+
keywords: [实现, TDD, Lead, subagent, worktree, candidate-merge, 代码审查, 证据]
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# 实现
|
|
11
11
|
|
|
12
|
-
本 work
|
|
12
|
+
本 work 保留模块设计检查、design-it-twice、TDD 红绿循环、双轴审查和证据治理。Ticket 模式固定使用来源 worktree、实现 commit 和 parent-candidate 集成;Lead 根据实际情况自行实现或动态派单。
|
|
13
13
|
|
|
14
14
|
## 执行模式
|
|
15
15
|
|
|
16
16
|
### Ticket 模式(默认)
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
读取 Ready Ticket、Tickets Map 和可选 Goal Plan。存在 Goal Plan 时使用其中的 Lead;没有 Goal Plan 时,当前主会话作为该 Ticket 的 Lead。每个 Ticket 都建立独立 worktree,无论实现者是 Lead 还是 implementation subagent。
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
- Tickets Map:`<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>`
|
|
22
|
-
- 可选 Goal Plan:`<Path>{roots.state}/specdev/changes/{change}/goal-plan.md</Path>`
|
|
20
|
+
### Direct Spec 模式
|
|
23
21
|
|
|
24
|
-
Ticket
|
|
22
|
+
只有极小、局部、单一行为、低风险、可逆且无需 Ticket DAG 的工作,才可在用户批准后直接基于 Spec/ADR/CONTEXT 在 current workspace 执行。先确认目标、IN/OUT、唯一写入 owner、可写范围、关键不变量、验证和验收。出现公共 API/schema、迁移、安全、高风险、多个行为或并行需求时返回 T-tickets。
|
|
25
23
|
|
|
26
|
-
|
|
24
|
+
## 输入
|
|
27
25
|
|
|
28
|
-
|
|
26
|
+
两种模式都必须读取:
|
|
29
27
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
- Spec:`<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`
|
|
33
|
-
- 架构决策:`<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`
|
|
34
|
-
- 领域上下文:`<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`
|
|
35
|
-
|
|
36
|
-
执行前必须从 Spec 明确提取并向用户确认一个轻量执行契约:目标、IN/OUT、可写范围、关键不变量、验证命令和验收条件。出现公共 API/schema、迁移、安全、高风险、多个独立行为或并行需求时,必须返回 `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`,不得使用 Direct Spec 模式绕过治理。
|
|
28
|
+
- 当前 Spec:`<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`
|
|
29
|
+
- 项目配置:`<Path>{roots.state}/specdev/config.json</Path>`
|
|
37
30
|
|
|
38
|
-
|
|
31
|
+
Ticket 模式还必须读取当前 Ticket `<Path>{roots.state}/specdev/changes/{change}/ticket/{ticket-file}.md</Path>` 与 `<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>`;存在 `<Path>{roots.state}/specdev/changes/{change}/goal-plan.md</Path>` 时必须读取。Direct Spec 模式必须读取用户对轻量执行合同和直接实现的明确批准。
|
|
39
32
|
|
|
40
33
|
按存在情况读取:
|
|
41
34
|
|
|
42
|
-
- 当前
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
35
|
+
- 当前 change 架构决策:`<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`
|
|
36
|
+
- 当前 change 领域上下文:`<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`
|
|
37
|
+
- 当前 change 设计日志:`<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>`
|
|
38
|
+
- 当前 change 诊断:`<Path>{roots.state}/specdev/changes/{change}/diagnosis.md</Path>`
|
|
46
39
|
- 永久架构决策:`<Path>{roots.state}/specdev/adr/</Path>`
|
|
47
40
|
- 永久领域上下文:`<Path>{roots.state}/specdev/context/</Path>`
|
|
48
|
-
- 项目配置:`<Path>{roots.state}/specdev/config.json</Path>`
|
|
49
41
|
|
|
50
|
-
|
|
42
|
+
永久目录可以为空,静默继续。当前 ADR/CONTEXT 缺失且实施需要对应决定时,返回 `<Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path>`;Spec、Ticket 或 Goal Plan 与代码事实冲突时按 `<Path>{roots.workflows}/specdev/common/rules/artifact-contract.md</Path>` 返回真正 owner,不在实现中覆盖。
|
|
51
43
|
|
|
52
|
-
|
|
44
|
+
Git 已处于 merge/rebase 冲突时,先加载 `<Path>{roots.workflows}/specdev/I-implement/merge-conflict-protocol.md</Path>`;不把冲突伪装成普通 TDD。
|
|
53
45
|
|
|
54
|
-
|
|
46
|
+
## 流程
|
|
55
47
|
|
|
56
|
-
### 1.
|
|
48
|
+
### 1. 执行前预检与来源 worktree
|
|
57
49
|
|
|
58
50
|
加载 `<Path>{roots.workflows}/specdev/I-implement/execution-preflight.md</Path>`。
|
|
59
51
|
|
|
60
|
-
Ticket
|
|
61
|
-
|
|
62
|
-
- `ready: true`;
|
|
63
|
-
- 状态允许开始;
|
|
64
|
-
- `blocked_by` 全部 done;
|
|
65
|
-
- Ticket 与 Spec/ADR/Goal Plan 无冲突;
|
|
66
|
-
- 可写、只读、共享路径明确且无并发冲突;
|
|
67
|
-
- Ticket 分配到 worktree 时,记录为 `active`,trigger、`base_sha`、父分支、owners、locator 和结束动作与计划一致;
|
|
68
|
-
- `lead-team` 时,派单块的 execution model、Lead、mutation role、checkpoint、workspace/session locator、路径合同、修正上限和授权矩阵与当前事实一致;`worker-write` 必须绑定独立 workspace;
|
|
69
|
-
- current workspace 只有一个项目和 SpecDev 状态写入 owner;read-only Agent 不产生 patch、commit 或状态写入;
|
|
70
|
-
- 验证命令和 Evidence 位置可用;
|
|
71
|
-
- 当前代码事实没有使核心契约失效。
|
|
52
|
+
Ticket 模式:
|
|
72
53
|
|
|
73
|
-
|
|
54
|
+
1. 验证 Ready、依赖 Evidence、Spec/ADR/Goal Plan、一致性、路径 owner 和验证接缝;
|
|
55
|
+
2. 确认 Goal Plan schema v4(若存在)、Lead、implementation agent 上限与授权;
|
|
56
|
+
3. 以 `purpose=ticket, operation=create|restore` 调用 `<Path>{roots.workflows}/specdev/common/skills/dev-worktree/SKILL.md</Path>`;
|
|
57
|
+
4. Lead 把 Ticket 设为 `in_progress`,change worktree 记录设为 `active`;
|
|
58
|
+
5. 当前代码使合同失效时停止并返回对应上游 owner。
|
|
74
59
|
|
|
75
|
-
|
|
76
|
-
- 单一行为、局部、低风险、可逆;
|
|
77
|
-
- 轻量执行契约完整;
|
|
78
|
-
- 不涉及 Deep 条件;
|
|
79
|
-
- 可写范围和验证明确。
|
|
60
|
+
Direct Spec 模式验证用户批准、轻量合同和 current workspace 唯一写入 owner;不创建虚假 Ticket/worktree 状态。
|
|
80
61
|
|
|
81
|
-
|
|
62
|
+
**完成标准**:Ticket 来源 worktree、基线、owners、权限与实际 Git 一致;Direct Spec 的小型边界可判定。
|
|
82
63
|
|
|
83
|
-
### 2.
|
|
64
|
+
### 2. Lead 决定自行实现或动态派单
|
|
84
65
|
|
|
85
|
-
|
|
66
|
+
Ticket 模式下,Lead 根据 Ticket 独立性、路径冲突、上下文、风险和平台能力决定。派单时以 `operation=dispatch` 调用 `<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/SKILL.md</Path>`。Direct Spec 模式由 Lead 作为 current workspace 唯一写入 owner;可以派遣只读 review/research/test-observation agent,不派遣 implementation subagent 写 current workspace。
|
|
86
67
|
|
|
87
|
-
|
|
68
|
+
- implementation subagent 同时最多取 Goal Plan/config/平台上限的最小值且不超过三个;Lead 不计入;
|
|
69
|
+
- review/research/test-observation agent 不设置 SpecDev 数字上限,但保持只读;
|
|
70
|
+
- implementation Packet 绑定唯一 Ticket worktree、checkpoint、路径、非 E2E 检查与 commit 返回;
|
|
71
|
+
- subagent 不写 SpecDev 工件、Evidence、父分支或 E2E 结果;
|
|
72
|
+
- Lead 自行实现时仍遵循相同 worktree、commit 与返回事实合同。
|
|
88
73
|
|
|
89
|
-
|
|
90
|
-
- 每个模块的接口、类型、不变量、顺序约束、错误和性能语义;
|
|
91
|
-
- 模块是否有足够深度,是否减少调用者认知;
|
|
92
|
-
- 接缝在哪里,是否有真实适配器或可替换实现;
|
|
93
|
-
- 依赖属于进程内、本地可替换、远程自有或真正外部依赖;
|
|
94
|
-
- 测试应在哪个稳定接缝观察行为;
|
|
95
|
-
- Ticket/Spec 已锁定的公共契约是否被保持。
|
|
74
|
+
**完成标准**:只有一个 implementation owner 写当前 Ticket worktree,或 Direct Spec 只有 Lead 写 current workspace;所有 SpecDev 写入仍由 Lead 拥有。
|
|
96
75
|
|
|
97
|
-
|
|
76
|
+
### 3. 设计检查
|
|
98
77
|
|
|
99
|
-
|
|
78
|
+
加载 `<Path>{roots.workflows}/specdev/common/rules/codebase-design.md</Path>`,检查模块、接口、类型、不变量、顺序/错误/性能语义、接缝、适配器、依赖分类、测试观察点和既有公共合同。
|
|
100
79
|
|
|
101
|
-
|
|
80
|
+
存在多个不改变上层契约的局部设计时,可运行 `<Path>{roots.workflows}/specdev/I-implement/design-it-twice.md</Path>`。超出 Ticket 或改变产品/公共合同/数据/兼容/安全时,返回架构审查、Grill、Spec 或 Ticket owner。陌生外部依赖使用 research Skill。
|
|
102
81
|
|
|
103
|
-
|
|
82
|
+
**完成标准**:局部设计与上层契约一致,稳定接缝和依赖策略明确。
|
|
104
83
|
|
|
105
|
-
|
|
84
|
+
### 4. TDD 红→绿垂直循环
|
|
106
85
|
|
|
107
|
-
|
|
108
|
-
- `<Path>{roots.workflows}/specdev/I-implement/tdd-test-design.md</Path>`
|
|
109
|
-
- `<Path>{roots.workflows}/specdev/I-implement/tdd-mocking.md</Path>`
|
|
110
|
-
- `<Path>{roots.workflows}/specdev/common/rules/code-commenting-rule.md</Path>`
|
|
111
|
-
|
|
112
|
-
对每个验收行为或关键风险:
|
|
86
|
+
加载 `<Path>{roots.workflows}/specdev/I-implement/tdd-rules.md</Path>`、`<Path>{roots.workflows}/specdev/I-implement/tdd-test-design.md</Path>`、`<Path>{roots.workflows}/specdev/I-implement/tdd-mocking.md</Path>` 和 `<Path>{roots.workflows}/specdev/common/rules/code-commenting-rule.md</Path>`。对每个验收行为或关键风险:
|
|
113
87
|
|
|
114
88
|
1. 选择公共接口或稳定接缝;
|
|
115
|
-
2.
|
|
116
|
-
3.
|
|
117
|
-
4.
|
|
118
|
-
5.
|
|
119
|
-
6. 保存 red/green 证据并进入下一条窄垂直切片。
|
|
89
|
+
2. 编写因目标行为缺失而失败的测试/验证并确认失败原因;
|
|
90
|
+
3. 只写足以通过当前测试的实现;
|
|
91
|
+
4. 运行定向非 E2E 验证;
|
|
92
|
+
5. 保存 red/green 事实并进入下一条窄切片。
|
|
120
93
|
|
|
121
|
-
|
|
94
|
+
不得删除测试、放宽断言、吞错、永久跳过或只验证 Mock 调用次数来制造绿色。
|
|
122
95
|
|
|
123
|
-
|
|
96
|
+
新增或修改代码注释时,先判断信息能否由命名、类型或结构表达,并同步维护受行为变化影响的既有注释。
|
|
124
97
|
|
|
125
|
-
###
|
|
98
|
+
### 5. 实现检查、commit 与 Lead 接收
|
|
126
99
|
|
|
127
|
-
|
|
128
|
-
- 完成前运行 Ticket 验证矩阵,或 Direct Spec 模式的轻量验证契约;
|
|
129
|
-
- 按 `<Path>{roots.state}/specdev/config.json</Path>` 运行适用的类型检查、lint、测试和构建;
|
|
130
|
-
- current workspace 由其唯一写入 owner 运行适用 E2E;隔离 workspace 由 integration owner 在集成阶段运行;Lead Team 的 Worker 只记录场景与预期结果;
|
|
131
|
-
- 检查实际修改均在 `writable_paths` 或获批的 Direct Spec 可写范围内;
|
|
132
|
-
- shared path 只由 owner 修改;
|
|
133
|
-
- 越界前停止并提出 ownership change,不先改后报;
|
|
134
|
-
- 记录新失败、既有失败和环境失败的区别。
|
|
100
|
+
Ticket 模式的 implementation owner 在来源 worktree:
|
|
135
101
|
|
|
136
|
-
|
|
102
|
+
- 运行 Ticket 要求的单元、组件、静态、类型、lint/build 等非 E2E 检查;
|
|
103
|
+
- 审计 writable/shared/read-only 路径和新/既有/环境失败;
|
|
104
|
+
- 在已授权时创建引用 Ticket ID 的实现 commit;
|
|
105
|
+
- 返回 commit、dirty 状态、实际路径、命令/结果、未运行项和恢复条件。
|
|
137
106
|
|
|
138
|
-
|
|
139
|
-
node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> \
|
|
140
|
-
--stage implement \
|
|
141
|
-
<Path>{roots.state}/specdev/changes/{change}</Path>
|
|
142
|
-
```
|
|
107
|
+
Ticket 模式中,Lead 以 `operation=accept` 调用 subagent-delivery,重读 Git 状态、branch tip、commit、diff 和命令事实。无改动时将 Ticket 改为 `cancelled` 并记录原因;不得 empty commit 或 Evidence-only Done。来源 worktree 不运行 E2E。
|
|
143
108
|
|
|
144
|
-
|
|
109
|
+
Direct Spec 模式由 Lead 在 current workspace 运行轻量合同要求的定向非 E2E 检查,审计获批可写范围,并在获得 implementation commit 授权后创建引用 change 的非空 commit;无需改动时记录事实并取消直接实现,不创建 empty commit。记录实施前基线、最终 checkpoint、dirty 状态、实际路径、命令结果、未运行项和恢复条件。
|
|
145
110
|
|
|
146
|
-
|
|
111
|
+
**完成标准**:Ticket worktree clean 且 `source_checkpoint` 精确等于 branch tip;或 Direct Spec 的 current workspace checkpoint、路径和轻量合同一致。
|
|
147
112
|
|
|
148
|
-
|
|
113
|
+
### 6. 双轴审查
|
|
149
114
|
|
|
150
|
-
-
|
|
151
|
-
- **规范轴**:对照 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`、Ticket 的 IN/OUT、实现契约、路径所有权、验证矩阵和 Goal Gate。
|
|
115
|
+
调用 `<Path>{roots.workflows}/specdev/common/skills/code-review/SKILL.md</Path>`。Ticket 模式以 `base_sha` 与 `source_checkpoint` 为固定点;Direct Spec 以实施前基线与 current workspace 最终 checkpoint 为固定点:
|
|
152
116
|
|
|
153
|
-
|
|
117
|
+
- 标准轴:正确性、模块设计、错误、安全、性能、并发、资源、测试与可维护性;
|
|
118
|
+
- 规范轴:Spec/Ticket IN/OUT、实现合同、路径所有权、验证矩阵与 Goal Gate。
|
|
154
119
|
|
|
155
|
-
|
|
120
|
+
标准轴同时复核 `<Path>{roots.workflows}/specdev/common/rules/code-commenting-rule.md</Path>`:公共 API 契约完整,内部注释只保留非显然的 Why、Invariant 和 Risk,且相关注释与当前行为一致。
|
|
156
121
|
|
|
157
|
-
|
|
122
|
+
两个轴隔离并按标准轴、规范轴顺序返回 Lead。局部 finding 在当前模式的实现 workspace 修正、创建新 checkpoint 并重跑;改变上层契约则登记 deviation。Ticket 进入 `review` 或 Direct Spec 进入最终验证前,两轴必须通过。
|
|
158
123
|
|
|
159
|
-
|
|
124
|
+
### 7. 最终集成与适用 E2E
|
|
160
125
|
|
|
161
|
-
|
|
162
|
-
<Path>{roots.state}/specdev/changes/{change}/evidence/{ticket-id}.md</Path>
|
|
163
|
-
```
|
|
126
|
+
Ticket 模式中,Lead 以 `purpose=ticket, operation=finalize` 调用 dev-worktree:
|
|
164
127
|
|
|
165
|
-
|
|
128
|
+
1. 在最新父分支的 Lead-owned candidate checkout 组合 source commit;
|
|
129
|
+
2. 运行受影响集成/回归、项目父状态检查和 Ticket 标记 required 的 E2E;
|
|
130
|
+
3. candidate 失败时父分支不动,Ticket 回 `in_progress`/`blocked`;
|
|
131
|
+
4. 父 HEAD 漂移时废弃本轮 candidate,基于最新父分支重建并重跑;
|
|
132
|
+
5. 全部通过后父分支 fast-forward 到 candidate/result SHA;
|
|
133
|
+
6. 重读父 HEAD/tree 和 ancestor 关系后,才允许 Ticket Done。
|
|
166
134
|
|
|
167
|
-
|
|
168
|
-
<Path>{roots.state}/specdev/changes/{change}/evidence/direct-spec.md</Path>
|
|
169
|
-
```
|
|
135
|
+
E2E 是否需要由 Ticket/Goal Plan 的实际跨边界风险决定,不限于 UI;不适用必须记录原因。
|
|
170
136
|
|
|
171
|
-
|
|
137
|
+
Direct Spec 模式跳过 source worktree、candidate merge 和父分支推进。Lead 在 current workspace 运行轻量合同要求的适用回归与 E2E,记录运行环境、命令、退出码和摘要;E2E 不得派给其他 agent。失败时不声明完成,保留最后可信 checkpoint 和恢复条件。全部通过后重读 Git 状态与最终 checkpoint。
|
|
172
138
|
|
|
173
|
-
|
|
139
|
+
### 8. Evidence、状态与完成
|
|
174
140
|
|
|
175
|
-
Ticket
|
|
141
|
+
Lead 使用 `<Path>{roots.workflows}/specdev/I-implement/evidence-template.md</Path>` 写入 Ticket Evidence;Direct Spec 按该模板的 Direct Spec 适配说明写 `<Path>{roots.state}/specdev/changes/{change}/evidence/direct-spec.md</Path>`。Ticket Evidence 包含 source/candidate/result SHA、派单/返回、两层验证、双轴审查、E2E disposition、路径审计、偏差和残余风险;Direct Spec Evidence 使用实施前基线与 current workspace 最终 checkpoint,不伪造 Ticket/worktree/candidate 字段。
|
|
176
142
|
|
|
177
|
-
|
|
143
|
+
Ticket 正常状态:`ready → in_progress → review → done`。`done` 要求 change worktree 已完成集成(`integrated`,或集成后已清理的 `removed`)、父 HEAD=result SHA 且包含 source commit。阻塞使用 `blocked`,契约偏差使用 `deviated`,无需改动使用 `cancelled`。Direct Spec 由当前 I-implement owner 按 `<Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>` 关闭 change。
|
|
178
144
|
|
|
179
|
-
|
|
145
|
+
按存在和当前模式同步 Ticket、Tickets Map、Goal Plan、`<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>` 和全局状态;Direct Spec 不创建缺失的 Ticket/Map/Goal Plan。最后一个计划内 Ticket 完成后,Goal Plan 的 Lead 按 change completion 关闭;无 Goal Plan 的当前 I owner 承担同一门禁。需要远程 reconcile 时返回 T-triage,否则进入 Archive。
|
|
180
146
|
|
|
181
|
-
|
|
182
|
-
- Tickets Map:`<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>`
|
|
183
|
-
- change 状态:`<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>`
|
|
184
|
-
- 全局状态:`<Path>{roots.state}/specdev/status.json</Path>`
|
|
147
|
+
运行:
|
|
185
148
|
|
|
186
|
-
|
|
149
|
+
```bash
|
|
150
|
+
node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> \
|
|
151
|
+
--stage implement \
|
|
152
|
+
<Path>{roots.state}/specdev/changes/{change}</Path>
|
|
153
|
+
```
|
|
187
154
|
|
|
188
|
-
|
|
189
|
-
2. 仅在 `<Path>{roots.state}/specdev/config.json</Path>` 和用户授权允许时提交;
|
|
190
|
-
3. 提交信息引用 Ticket ID 或 Direct Spec change;
|
|
191
|
-
4. Worktree 记录为 `review` 且 `terminal_action=integrate` 时,由 integration owner 自动加载 finalize 合同完成本地集成;其他 merge、push、PR、部署、发布或不可逆迁移不得自动执行;
|
|
192
|
-
5. 返回 Ticket ID 与状态、Evidence 完整路径、`workspace_ref`、source/result checkpoint、commit 或 PR 引用和适用 E2E 结果;Lead Team Worker 返回待 integration owner 执行的 E2E;
|
|
193
|
-
6. Direct Spec 模式返回 change、状态和 `<Path>{roots.state}/specdev/changes/{change}/evidence/direct-spec.md</Path>`。
|
|
155
|
+
### 9. 返回
|
|
194
156
|
|
|
195
|
-
|
|
157
|
+
Ticket 模式返回 Ticket/change 状态、Evidence 完整路径、source workspace、source/candidate/result SHA、父分支、E2E disposition、未验证项和下一路由。Direct Spec 返回 change 状态、`<Path>{roots.state}/specdev/changes/{change}/evidence/direct-spec.md</Path>`、current workspace、实施前/最终 checkpoint、适用 E2E 和下一路由。push、PR、remote merge、deploy、migration、生产动作及来源 branch/worktree cleanup 只在独立授权时执行。
|
|
196
158
|
|
|
197
159
|
## 完成标准
|
|
198
160
|
|
|
199
|
-
-
|
|
200
|
-
-
|
|
201
|
-
-
|
|
202
|
-
-
|
|
203
|
-
-
|
|
204
|
-
-
|
|
205
|
-
- 实际修改未超出授权路径;
|
|
206
|
-
- 无未批准 deviation;
|
|
207
|
-
- 状态已同步;
|
|
208
|
-
- 实现结果可通过 Evidence、状态和代码引用完整定位;
|
|
209
|
-
- 提交遵守用户授权。
|
|
161
|
+
- Ticket 模式的 worktree、实现 commit、双轴审查和 candidate gate 完整;Direct Spec 的轻量合同、current workspace checkpoint、双轴审查和最终验证完整;
|
|
162
|
+
- source worktree 无 E2E,Ticket 适用 E2E 由 Lead 在 parent-candidate 运行,Direct Spec 适用 E2E 由 Lead 在 current workspace 运行;
|
|
163
|
+
- Lead 独立核对并写全部 SpecDev 工件;
|
|
164
|
+
- Ticket 父分支只推进到通过的 candidate,Ticket Done 与实际 Git 一致;Direct Spec 的完成状态与 current workspace 最终 checkpoint 一致;
|
|
165
|
+
- 实际路径、验证、偏差和状态可由 Evidence 恢复;
|
|
166
|
+
- validator 无 error。
|
|
210
167
|
|
|
211
168
|
## 子文件引用
|
|
212
169
|
|
|
213
170
|
- 执行前预检:`<Path>{roots.workflows}/specdev/I-implement/execution-preflight.md</Path>`
|
|
214
|
-
-
|
|
171
|
+
- 代码库设计:`<Path>{roots.workflows}/specdev/common/rules/codebase-design.md</Path>`
|
|
215
172
|
- Design It Twice:`<Path>{roots.workflows}/specdev/I-implement/design-it-twice.md</Path>`
|
|
216
|
-
- TDD
|
|
217
|
-
-
|
|
218
|
-
-
|
|
219
|
-
-
|
|
220
|
-
-
|
|
221
|
-
-
|
|
222
|
-
- 委派 Evidence 附录:`<Path>{roots.workflows}/specdev/I-implement/delegated-evidence-template.md</Path>`,仅 lead-team 时加载
|
|
223
|
-
- Agent 交付合同:`<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/SKILL.md</Path>`
|
|
224
|
-
- Merge/rebase 冲突:`<Path>{roots.workflows}/specdev/I-implement/merge-conflict-protocol.md</Path>`
|
|
173
|
+
- TDD:`<Path>{roots.workflows}/specdev/I-implement/tdd-rules.md</Path>`、`<Path>{roots.workflows}/specdev/I-implement/tdd-test-design.md</Path>`、`<Path>{roots.workflows}/specdev/I-implement/tdd-mocking.md</Path>`
|
|
174
|
+
- 代码注释:`<Path>{roots.workflows}/specdev/common/rules/code-commenting-rule.md</Path>`
|
|
175
|
+
- Evidence:`<Path>{roots.workflows}/specdev/I-implement/evidence-template.md</Path>`
|
|
176
|
+
- Agent 交付:`<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/SKILL.md</Path>`
|
|
177
|
+
- Worktree:`<Path>{roots.workflows}/specdev/common/skills/dev-worktree/SKILL.md</Path>`
|
|
178
|
+
- 冲突处理:`<Path>{roots.workflows}/specdev/I-implement/merge-conflict-protocol.md</Path>`
|
|
@@ -1,90 +1,102 @@
|
|
|
1
1
|
# Evidence: <Ticket ID> — <Ticket title>
|
|
2
2
|
|
|
3
|
+
Direct Spec 使用本模板时写入 `<Path>{roots.state}/specdev/changes/{change}/evidence/direct-spec.md</Path>`:Ticket、Goal Plan、source worktree 与 candidate 字段写“不适用:Direct Spec”,以实施前基线和 current workspace 最终 checkpoint 代替 source/candidate/result 链;第 5、7 节分别记录 current workspace 定向检查和 Lead 最终回归/E2E,不伪造 Ticket 状态。
|
|
4
|
+
|
|
3
5
|
- **Change:** `<change>`
|
|
4
6
|
- **Ticket:** `<Path>{roots.state}/specdev/changes/{change}/ticket/{ticket-file}.md</Path>`
|
|
5
7
|
- **Spec:** `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`
|
|
6
|
-
- **Tickets Map:** `<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>`
|
|
7
8
|
- **Goal Plan:** `<Path>{roots.state}/specdev/changes/{change}/goal-plan.md</Path>` / 不适用
|
|
8
|
-
-
|
|
9
|
-
- **
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
- **状态:** review / done / blocked / deviated
|
|
9
|
+
- **Lead:** `<owner-or-session-locator>`
|
|
10
|
+
- **Source worktree/branch:** `<workspace_ref>` / `<branch>`
|
|
11
|
+
- **Base/source/candidate/result SHA:** `<sha>` / `<sha>` / `<sha>` / `<sha>`
|
|
12
|
+
- **状态:** review / done / blocked / deviated / cancelled
|
|
13
13
|
|
|
14
14
|
## 1. 实现摘要
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
用可观察行为与已锁定合同说明实际完成内容。Cancelled 时说明为何无需实现及其权威来源。
|
|
17
|
+
|
|
18
|
+
## 2. Lead Dispatch And Candidate Return
|
|
19
|
+
|
|
20
|
+
- **Implementation owner:** Lead / `<agent/provider>`
|
|
21
|
+
- **Dispatch Packet/checkpoint:** Lead direct / `<locator + immutable checkpoint>`
|
|
22
|
+
- **允许动作:** worktree changes / implementation commit / ...
|
|
23
|
+
- **返回:** commit、dirty 状态、修改路径、非 E2E 命令、未验证项与恢复条件
|
|
24
|
+
- **Lead 独立核对:** pass / fail;实际读取与命令摘要
|
|
25
|
+
- **只读 Agent findings:** 无 / 固定输入、来源、结论、Lead 核对
|
|
26
|
+
|
|
27
|
+
subagent 不写本 Evidence;以上内容由 Lead 从实际 workspace、Git 和返回事实整理。
|
|
17
28
|
|
|
18
|
-
##
|
|
29
|
+
## 3. 修改范围与路径所有权
|
|
19
30
|
|
|
20
31
|
| 路径 | 所有权 | 改动目的 |
|
|
21
32
|
|---|---|---|
|
|
22
33
|
| `<Path>src/example.ts</Path>` | writable / shared:<owner> | ... |
|
|
23
34
|
|
|
24
|
-
|
|
35
|
+
- **read-only 修改:** 无
|
|
36
|
+
- **未声明路径:** 无
|
|
37
|
+
- **生成文件/锁文件:** 无 / 来源与 owner
|
|
38
|
+
|
|
39
|
+
## 4. 验收与合同映射
|
|
25
40
|
|
|
26
41
|
| Contract / Acceptance ID | 验证接缝 | 证据 | 结果 |
|
|
27
42
|
|---|---|---|---|
|
|
28
|
-
| AC-... | ... |
|
|
43
|
+
| AC-... | ... | 测试、日志或人工检查摘要 | pass / fail / not-run |
|
|
29
44
|
|
|
30
|
-
每个 Ticket
|
|
45
|
+
每个 Ticket 验收项恰好落到一行。
|
|
31
46
|
|
|
32
|
-
##
|
|
47
|
+
## 5. Source-worktree 验证
|
|
33
48
|
|
|
34
|
-
| 命令或步骤 | 运行环境 | 结果 |
|
|
49
|
+
| 命令或步骤 | 运行环境 | 结果 | 摘要 |
|
|
35
50
|
|---|---|---|---|
|
|
36
|
-
| ... |
|
|
51
|
+
| ... | source-worktree | pass / fail / not-run | ... |
|
|
37
52
|
|
|
38
53
|
- **失败后修复与重跑:** 无 / ...
|
|
39
|
-
- **未运行检查:** 无 / 原因与风险
|
|
40
|
-
- **E2E:**
|
|
41
|
-
- **反向验证:** 不适用 / 受控失败信号与恢复结果
|
|
42
|
-
- **外部声明:** 无 / 已核对 / `unverified`:原因
|
|
54
|
+
- **未运行检查:** 无 / 原因与风险
|
|
55
|
+
- **E2E:** 禁止在 source-worktree 声明 pass;此处固定为 not-run: parent-candidate-owned
|
|
43
56
|
|
|
44
|
-
##
|
|
57
|
+
## 6. 双轴审查
|
|
45
58
|
|
|
46
59
|
### 标准轴
|
|
47
60
|
|
|
61
|
+
- **固定输入:** `<base_sha>..<source_checkpoint>`
|
|
48
62
|
- **结果:** pass / request-changes
|
|
49
|
-
-
|
|
50
|
-
- **Findings:** 无 / ...
|
|
51
|
-
- **修正与重跑:** 不适用 / ...
|
|
63
|
+
- **Findings 与修正:** 无 / ...
|
|
52
64
|
|
|
53
65
|
### 规范轴
|
|
54
66
|
|
|
67
|
+
- **固定输入与来源:** Spec / Ticket / Goal Plan / source
|
|
55
68
|
- **结果:** pass / request-changes / skipped:no-spec
|
|
56
|
-
-
|
|
57
|
-
- **Findings:** 无 / ...
|
|
58
|
-
- **修正与重跑:** 不适用 / ...
|
|
69
|
+
- **Findings 与修正:** 无 / ...
|
|
59
70
|
|
|
60
|
-
|
|
71
|
+
两个轴隔离并按上述顺序记录。
|
|
61
72
|
|
|
62
|
-
##
|
|
73
|
+
## 7. Parent-candidate 集成验证
|
|
63
74
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
75
|
+
| 项目 | 结果 |
|
|
76
|
+
|---|---|
|
|
77
|
+
| Parent before SHA | `<sha>` |
|
|
78
|
+
| Source/candidate SHA | `<sha>` / `<sha>` |
|
|
79
|
+
| Candidate branch/workspace | `<branch>` / `<workspace_ref>` |
|
|
80
|
+
| Method/conflicts | fast-forward / merge-commit;无 / paths |
|
|
81
|
+
| Candidate checks | 命令、运行环境 `parent-candidate`、结果 |
|
|
82
|
+
| E2E disposition | required / not-required: reason |
|
|
83
|
+
| E2E result | pending / passed / failed / not-required;场景与证据 |
|
|
84
|
+
| Parent result/re-read | `<sha>`;HEAD/tree/ancestor 核对 |
|
|
69
85
|
|
|
70
|
-
|
|
86
|
+
Candidate failed/stale 时明确父分支未推进、失败命令、旧 candidate SHA 和恢复条件。
|
|
71
87
|
|
|
72
|
-
|
|
73
|
-
- **偏差记录:** `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>` / 不适用
|
|
74
|
-
- **批准人或决策来源:**
|
|
75
|
-
- **对范围、契约、依赖或后续 Ticket 的影响:** 无 / ...
|
|
88
|
+
## 8. 偏差与决策
|
|
76
89
|
|
|
77
|
-
|
|
90
|
+
- **偏差:** 无 / `<deviation-id>`
|
|
91
|
+
- **记录:** `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>` / 不适用
|
|
92
|
+
- **批准来源及影响:** ...
|
|
78
93
|
|
|
79
|
-
##
|
|
94
|
+
## 9. 残余风险与交付定位
|
|
80
95
|
|
|
81
|
-
-
|
|
82
|
-
- **已知限制:** 无 / ...
|
|
96
|
+
- **残余风险/已知限制:** 无 / ...
|
|
83
97
|
- **后续 Ticket:** 无 / `<ticket-id>`
|
|
84
|
-
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
- **
|
|
89
|
-
- **最终 Workspace 引用:** 不适用 / `<workspace_ref>`
|
|
90
|
-
- **Evidence 文件:** `<Path>{roots.state}/specdev/changes/{change}/evidence/{ticket-id}.md</Path>`
|
|
98
|
+
- **监控或回滚触发:** 不适用 / ...
|
|
99
|
+
- **Source commit:** `<sha>`
|
|
100
|
+
- **Parent result:** `<sha>`
|
|
101
|
+
- **Source workspace:** `<workspace_ref>`
|
|
102
|
+
- **Evidence:** `<Path>{roots.state}/specdev/changes/{change}/evidence/{ticket-id}.md</Path>`
|
|
@@ -1,28 +1,36 @@
|
|
|
1
1
|
# Execution Preflight
|
|
2
2
|
|
|
3
|
-
## 硬检查
|
|
3
|
+
## Ticket 硬检查
|
|
4
4
|
|
|
5
5
|
- [ ] Ticket frontmatter 可解析,`ready: true`,`status: ready`。
|
|
6
|
-
- [ ] 所有 blocked_by Ticket 为 done
|
|
7
|
-
- [ ] Spec、ADR、Ticket
|
|
8
|
-
- [ ]
|
|
9
|
-
- [ ]
|
|
10
|
-
- [ ]
|
|
11
|
-
- [ ]
|
|
12
|
-
- [ ]
|
|
13
|
-
- [ ]
|
|
14
|
-
- [ ]
|
|
15
|
-
- [ ]
|
|
16
|
-
- [ ]
|
|
17
|
-
|
|
6
|
+
- [ ] 所有 `blocked_by` Ticket 为 done 且 Evidence 存在。
|
|
7
|
+
- [ ] Spec、ADR、Ticket 与 Goal Plan 无冲突;旧 Goal Plan schema 必须重跑 P-goal-plan。
|
|
8
|
+
- [ ] Goal Plan(若存在)为 `lead-directed`,Lead 可恢复,implementation agent limit 为 `1..3`。
|
|
9
|
+
- [ ] 当前代码入口、接口、路径和父分支仍与 Ticket 假设一致。
|
|
10
|
+
- [ ] writable/shared paths 有唯一 owner,当前 Wave 无项目写冲突。
|
|
11
|
+
- [ ] implementation commit 与 local candidate integration/父分支更新已授权;push/PR/remote/deploy 等保持独立。
|
|
12
|
+
- [ ] dev-worktree 记录 schema v4,`base_sha`、父分支、owners、branch、`workspace_ref`、integration 与 E2E disposition 完整。
|
|
13
|
+
- [ ] implementation subagent 若被派遣,Packet 绑定上述 worktree/checkpoint;subagent 不写 SpecDev 状态。
|
|
14
|
+
- [ ] 来源检查明确为非 E2E;required E2E 有 parent-candidate 场景与预期。
|
|
15
|
+
- [ ] 验证命令/环境可用,关键静默失败风险有受控反向验证。
|
|
16
|
+
- [ ] Deep Ticket 批准点已满足。
|
|
17
|
+
|
|
18
|
+
## Direct Spec 硬检查
|
|
19
|
+
|
|
20
|
+
- [ ] 用户明确批准 Direct Spec;单一行为、局部、低风险、可逆且无需并行/Ticket DAG。
|
|
21
|
+
- [ ] current workspace 只有一个项目与 SpecDev 写入 owner。
|
|
22
|
+
- [ ] 目标、IN/OUT、可写范围、不变量、验证与验收完整。
|
|
23
|
+
- [ ] 实施前 Git checkpoint、dirty 状态和现有用户改动已记录,不覆盖无关改动。
|
|
24
|
+
- [ ] 非 E2E、适用回归与 E2E 验证环境可执行;E2E owner 固定为 Lead。
|
|
25
|
+
- [ ] implementation commit 授权状态明确;未授权时不提交,并在轻量合同与 Evidence 中记录交付状态。
|
|
18
26
|
|
|
19
27
|
## 失效分类
|
|
20
28
|
|
|
21
|
-
- **stale-navigation
|
|
22
|
-
- **local-implementation
|
|
23
|
-
- **ticket-invalid
|
|
24
|
-
- **spec-invalid
|
|
25
|
-
- **
|
|
26
|
-
- **
|
|
27
|
-
- **
|
|
28
|
-
- **
|
|
29
|
+
- **stale-navigation**:导航过时但契约仍有效;更新导航继续。
|
|
30
|
+
- **local-implementation**:局部实现调整不改变契约;记录后继续。
|
|
31
|
+
- **ticket-invalid**:范围、接口、依赖、验证或路径合同失效;停止并修 Ticket。
|
|
32
|
+
- **spec-invalid / adr-conflict**:返回对应上游 owner。
|
|
33
|
+
- **checkpoint-drift**:来源/父分支/派单 checkpoint 漂移;由 Lead重建 worktree 或 candidate。
|
|
34
|
+
- **workspace-contract-invalid**:缺少父分支、owner、locator、source/candidate/result 字段或授权;停止并修状态/计划。
|
|
35
|
+
- **delivery-unverified**:候选、provider 声明或附件不能独立核对;保持 unverified。
|
|
36
|
+
- **e2e-owner-invalid**:E2E 被安排在 source worktree 或非 Lead owner;停止并修 Ticket/Goal Plan。
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
# Merge / Rebase Conflict Protocol
|
|
2
2
|
|
|
3
|
-
只在 `git status` 证明仓库正处于 merge
|
|
3
|
+
只在 `git status` 证明仓库正处于 merge/rebase 冲突时加载。
|
|
4
4
|
|
|
5
5
|
## 流程
|
|
6
6
|
|
|
7
|
-
1. 读取 Git
|
|
8
|
-
2.
|
|
9
|
-
3.
|
|
10
|
-
4.
|
|
11
|
-
5.
|
|
12
|
-
6.
|
|
13
|
-
7. 重读 Git 状态、parents
|
|
7
|
+
1. 读取 Git 状态、操作类型、冲突路径、base/ours/theirs SHA、Ticket/Evidence 与匹配的 candidate integration 记录。
|
|
8
|
+
2. 从 commit、source、Spec、Ticket、ADR、测试和调用者追溯双方意图;信息不足时不猜产品行为。
|
|
9
|
+
3. 对每个 hunk 写出双方意图、共同约束和唯一可推导结果;需要新行为或上层决定时停止并登记 deviation。
|
|
10
|
+
4. 在授权路径内解决文本,运行受影响的非 E2E 检查;candidate checkout 中按 finalize 合同运行父状态检查/E2E。
|
|
11
|
+
5. 匹配的 local candidate integration 授权包含 `git add`、candidate merge commit、必要的 `git merge --abort` 和 transient candidate checkout/branch 生命周期;不扩展到来源 branch/worktree cleanup 或远端动作。
|
|
12
|
+
6. 需要改变 Spec/ADR、安全/迁移决定、越过 owner 或无法同时保持既有意图时,在 Lead-created candidate 中执行 `git merge --abort`,记录 blocker 并保留来源 worktree;未知普通冲突现场不擅自 abort。
|
|
13
|
+
7. 重读 Git 状态、parents 与 diff,确认无 marker、无未声明路径、双方合同及验证仍成立。
|
|
14
14
|
|
|
15
15
|
## 完成标准
|
|
16
16
|
|
|
17
|
-
- 每个 hunk
|
|
17
|
+
- 每个 hunk 可追溯到既有意图;
|
|
18
18
|
- 新产品决定没有藏在冲突解决中;
|
|
19
|
-
-
|
|
20
|
-
- Git
|
|
21
|
-
-
|
|
19
|
+
- 验证记录命令、运行环境、退出码和摘要;
|
|
20
|
+
- Git 副作用来自明确的 candidate integration 或其他逐动作授权;
|
|
21
|
+
- 完成/暂停可以从 Git、change status 和 Evidence 恢复。
|