@namewta/speculo 0.6.0 → 0.7.0
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 +11 -11
- package/dist/src/cli.js +36 -128
- package/dist/src/cli.js.map +1 -1
- package/dist/src/index.d.ts +2 -4
- package/dist/src/index.js +173 -151
- package/dist/src/index.js.map +1 -1
- package/package.json +6 -4
- package/template/.speculo/README.md +4 -0
- package/template/canonical/canonical-specdev-engineering-cognitive-mentor.md +133 -141
- package/template/canonical/canonical-specdev-goal-plan.md +394 -377
- package/template/canonical/canonical-specdev-grill-with-docs.md +241 -178
- package/template/canonical/canonical-specdev-spec.md +132 -122
- package/template/canonical/canonical-specdev-tickets.md +176 -156
- package/template/canonical/canonical-specdev-wayfinder.md +106 -108
- package/template/commands/archive-and-consolidate.md +10 -8
- package/template/commands/handoff.md +2 -0
- package/template/commands/retro.md +3 -3
- package/template/commands/status.md +5 -4
- package/template/skills/archive-and-consolidate/SKILL.md +5 -9
- package/template/skills/archive-and-consolidate/assets/archive-plan-template.md +1 -1
- package/template/skills/archive-and-consolidate/references/archive-rules.md +4 -4
- package/template/skills/archive-and-consolidate/references/consolidation-rules.md +7 -8
- package/template/skills/archive-and-consolidate/references/knowledge-graduation.md +5 -2
- package/template/skills/github-npm-ops/SKILL.md +4 -2
- package/template/skills/github-npm-ops/references/issue-transport.md +26 -0
- package/template/skills/github-npm-ops/references/preflight-checklist.md +1 -1
- package/template/skills/github-npm-ops/scripts/issue-transport.mjs +227 -0
- package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +31 -145
- package/template/workflows/specdev/A-archive-and-consolidate/consolidation-interview.md +4 -6
- package/template/workflows/specdev/C-code-review/C-code-review.md +42 -0
- package/template/workflows/specdev/C-code-review/code-review-template.md +42 -0
- package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +45 -48
- package/template/workflows/specdev/D-diagnose-bugs/diagnosis-template.md +44 -40
- package/template/workflows/specdev/D-diagnose-bugs/feedback-loop.md +41 -0
- package/template/workflows/specdev/D-diagnose-bugs/hypothesis-and-instrumentation.md +32 -0
- package/template/workflows/specdev/D-diagnose-bugs/scripts/hitl-loop.template.sh +26 -0
- package/template/workflows/specdev/E-engineering-cognitive-mentor/E-engineering-cognitive-mentor.md +3 -3
- package/template/workflows/specdev/E-engineering-cognitive-mentor/persistence-and-resume.md +5 -20
- package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +17 -10
- package/template/workflows/specdev/G-grill-with-docs/adr-format.md +31 -17
- package/template/workflows/specdev/G-grill-with-docs/context-format.md +9 -29
- package/template/workflows/specdev/G-grill-with-docs/domain-modeling-rules.md +10 -5
- package/template/workflows/specdev/G-grill-with-docs/stakeholder-questionnaire.md +45 -0
- package/template/workflows/specdev/I-implement/I-implement.md +29 -14
- package/template/workflows/specdev/I-implement/delegated-evidence-template.md +11 -0
- package/template/workflows/specdev/I-implement/evidence-template.md +24 -10
- package/template/workflows/specdev/I-implement/execution-preflight.md +4 -4
- package/template/workflows/specdev/I-implement/merge-conflict-protocol.md +20 -0
- package/template/workflows/specdev/I-implement/tdd-mocking.md +19 -0
- package/template/workflows/specdev/I-implement/tdd-rules.md +14 -12
- package/template/workflows/specdev/I-implement/tdd-test-design.md +25 -0
- package/template/workflows/specdev/I-init-setup/I-init-setup.md +12 -9
- package/template/workflows/specdev/I-init-setup/config-template.json +1 -1
- package/template/workflows/specdev/I-init-setup/domain-layout-template.md +2 -2
- package/template/workflows/specdev/I-init-setup/status-template.json +2 -3
- package/template/workflows/specdev/I-init-setup/tracking-template.md +3 -0
- package/template/workflows/specdev/INDEX.md +64 -26
- package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +48 -38
- package/template/workflows/specdev/P-goal-plan/completion-control.md +19 -53
- package/template/workflows/specdev/P-goal-plan/delegated-execution-template.md +33 -0
- package/template/workflows/specdev/P-goal-plan/delegated-execution.md +53 -0
- package/template/workflows/specdev/P-goal-plan/goal-plan-template.md +9 -40
- package/template/workflows/specdev/P-goal-plan/orchestration-protocol.md +16 -68
- package/template/workflows/specdev/P-goal-plan/planning-modes.md +20 -48
- package/template/workflows/specdev/P-prototype/P-prototype.md +46 -0
- package/template/workflows/specdev/P-prototype/logic-prototype.md +24 -0
- package/template/workflows/specdev/P-prototype/prototype-record-template.md +46 -0
- package/template/workflows/specdev/P-prototype/ui-prototype.md +21 -0
- package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +1 -1
- package/template/workflows/specdev/S-spec/S-spec.md +2 -1
- package/template/workflows/specdev/T-tickets/T-tickets.md +3 -2
- package/template/workflows/specdev/T-tickets/ticket-readiness.md +1 -1
- package/template/workflows/specdev/T-tickets/ticket-template.md +1 -1
- package/template/workflows/specdev/T-tickets/tickets-map-template.md +1 -1
- package/template/workflows/specdev/T-triage/T-triage.md +65 -26
- package/template/workflows/specdev/T-triage/intake-protocol.md +32 -0
- package/template/workflows/specdev/T-triage/reconcile-protocol.md +34 -0
- package/template/workflows/specdev/T-triage/source-template.md +30 -0
- package/template/workflows/specdev/T-triage/triage-template.md +38 -24
- package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +3 -1
- package/template/workflows/specdev/_state/status.json +2 -3
- package/template/workflows/specdev/common/README.md +9 -2
- package/template/workflows/specdev/common/rules/artifact-contract.md +20 -9
- package/template/workflows/specdev/common/rules/change-completion.md +33 -0
- package/template/workflows/specdev/common/rules/deviation-control.md +2 -2
- package/template/workflows/specdev/common/rules/evidence-and-verification.md +1 -1
- package/template/workflows/specdev/common/rules/path-ownership.md +3 -3
- package/template/workflows/specdev/common/schemas/change-status.schema.json +43 -0
- package/template/workflows/specdev/common/schemas/code-review.schema.json +22 -0
- package/template/workflows/specdev/common/schemas/diagnosis.schema.json +19 -0
- package/template/workflows/specdev/common/schemas/prototype-record.schema.json +24 -0
- package/template/workflows/specdev/common/schemas/source.schema.json +20 -0
- package/template/workflows/specdev/common/schemas/status.schema.json +20 -78
- package/template/workflows/specdev/common/schemas/triage.schema.json +21 -0
- package/template/workflows/specdev/common/skills/code-review/SKILL.md +49 -0
- package/template/workflows/specdev/common/skills/code-review/references/fowler-smells.md +18 -0
- package/template/workflows/specdev/common/skills/code-review/references/reviewer-contracts.md +13 -0
- package/template/workflows/specdev/common/skills/code-review/references/source-discovery.md +22 -0
- package/template/workflows/specdev/common/skills/dev-worktree/SKILL.md +12 -9
- package/template/workflows/specdev/common/skills/dev-worktree/references/create.md +18 -13
- package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +8 -6
- package/template/workflows/specdev/common/skills/research/SKILL.md +38 -26
- package/template/workflows/specdev/common/skills/subagent-delivery/SKILL.md +3 -5
- package/template/workflows/specdev/common/tools/README.md +3 -0
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +496 -30
- package/dist/src/migrate.d.ts +0 -38
- package/dist/src/migrate.js +0 -642
- package/dist/src/migrate.js.map +0 -1
- package/dist/src/skills-mirror.d.ts +0 -38
- package/dist/src/skills-mirror.js +0 -160
- package/dist/src/skills-mirror.js.map +0 -1
- package/template/workflows/specdev/A-archive-and-consolidate/archive-checklist.md +0 -15
- package/template/workflows/specdev/A-archive-and-consolidate/knowledge-promotion-rules.md +0 -32
- package/template/workflows/specdev/I-implement/code-review-process.md +0 -17
- package/template/workflows/specdev/I-implement/tdd-examples.md +0 -14
- package/template/workflows/specdev/I-init-setup/status-labels-template.md +0 -55
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
# 领域建模规则
|
|
2
2
|
|
|
3
|
-
-
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
3
|
+
本规则只规范当前 change 内的候选领域知识。G 和 A 的 consolidate-from-code 模式都可以用它整理 change 工件,但它不授权写入永久 namespace;永久知识只能由 `<Path>{roots.workflows}/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md</Path>` 在完成证据、毕业评估和用户确认全部通过后提升。
|
|
4
|
+
|
|
5
|
+
- 当前 change 的 CONTEXT 只保存已确认、供本 change 下游使用的项目规范语言,不保存普通编程概念、代码导航、一次性状态或讨论历史。
|
|
6
|
+
- 每个术语使用规范名称和 1–2 句定义;不推荐的同义词写入 `_Avoid_`。
|
|
7
|
+
- 一词多义必须拆分;多个 bounded context 使用独立 Context Map 描述关系,不把关系塞进术语定义。
|
|
8
|
+
- 讨论、替代和历史只留在 LOG;稳定行为进入 Spec;符合准入条件的取舍写入当前 change 的 ADR,`accepted` 只表示已成为本 change 的下游合同。
|
|
9
|
+
- 当前代码位置按需从仓库发现。只有发现成本被证明很高时,另建有 owner 和刷新策略的缓存工件,CONTEXT 不承担该职责。
|
|
10
|
+
- G 只读永久 `<Path>{roots.state}/specdev/context/</Path>` 与 `<Path>{roots.state}/specdev/adr/</Path>`,用于发现冲突和避免重复;不得创建、合并或改写其中内容。
|
|
11
|
+
|
|
12
|
+
完成标准:每个 change CONTEXT 条目都是本 change 下游必须使用的项目规范语言;每个 change ADR 都有明确来源和当前 change 的适用范围;没有把候选结论写成永久知识。
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Stakeholder Questionnaire
|
|
2
|
+
|
|
3
|
+
只有阻塞决定无法从仓库/外部事实发现、当前用户无法回答、且另一个明确 stakeholder 掌握答案时加载。问卷是输入收集工具,不是决策权威。
|
|
4
|
+
|
|
5
|
+
## 流程
|
|
6
|
+
|
|
7
|
+
1. 只询问当前用户“发给谁”和“需要对方回什么”:接收者角色/背景/关系,以及用户必须据此行动的具体事实或决定。
|
|
8
|
+
2. 写入 `<Path>{roots.state}/specdev/changes/{change}/questionnaires/{slug}.md</Path>`。问题按重要性排序,每个问题只表达一个差距;超过合理数量时按主题分组。
|
|
9
|
+
3. 把 change 置为 blocked,记录接收者、发送 owner、恢复条件和问卷 Path。Spec/Ticket 不得在答案回来前伪装成 Ready。
|
|
10
|
+
4. 回收答案后逐项验证覆盖情况,把事实和决定分别写入 LOG/design-tree 节点;问卷本身保留原始回答,不直接成为 ADR/Spec 权威。
|
|
11
|
+
5. 未回答项继续 blocked;已解决项不重复询问。
|
|
12
|
+
|
|
13
|
+
## 模板
|
|
14
|
+
|
|
15
|
+
```markdown
|
|
16
|
+
# <问卷标题>
|
|
17
|
+
|
|
18
|
+
**目的:** <承载的决定>
|
|
19
|
+
**来自:** <用户> — **送达:** <接收者>
|
|
20
|
+
**回答将用于:** <Spec/ADR/design-tree 路径>
|
|
21
|
+
|
|
22
|
+
## 背景
|
|
23
|
+
<足以给出可靠回答的一段上下文>
|
|
24
|
+
|
|
25
|
+
## 如何回答
|
|
26
|
+
<截止时间、投入量;允许部分回答和“不知道”>
|
|
27
|
+
|
|
28
|
+
## <主题>
|
|
29
|
+
|
|
30
|
+
### <一个事实或决定差距>
|
|
31
|
+
_为什么重要:<对行为/风险/范围的影响>_
|
|
32
|
+
|
|
33
|
+
>
|
|
34
|
+
|
|
35
|
+
## 还有别的吗?
|
|
36
|
+
<遗漏但接收者认为应知道的事项>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 完成标准
|
|
40
|
+
|
|
41
|
+
- 用户要求的每个事实/决定恰有至少一个问题覆盖;
|
|
42
|
+
- 不询问仓库可发现事实;
|
|
43
|
+
- 问题不复合且按重要性排序;
|
|
44
|
+
- blocked/resume 条件可从本地工件恢复;
|
|
45
|
+
- 回答被转录到真正 owning 工件后才解除 blocker。
|
|
@@ -9,7 +9,7 @@ keywords: [实现, TDD, 代码审查, 模块设计, 证据, ticket]
|
|
|
9
9
|
|
|
10
10
|
# 实现
|
|
11
11
|
|
|
12
|
-
本 work
|
|
12
|
+
本 work 保留深模块设计检查、接缝和依赖分类、design-it-twice、TDD 红→绿垂直循环、隔离双轴审查、项目级验证、提交和状态更新。治理升级增加 Ready、路径所有权、Evidence、完成所有权和偏差门禁。
|
|
13
13
|
|
|
14
14
|
## 执行模式
|
|
15
15
|
|
|
@@ -23,7 +23,7 @@ keywords: [实现, TDD, 代码审查, 模块设计, 证据, ticket]
|
|
|
23
23
|
|
|
24
24
|
Ticket 模式适用于多 Ticket、Standard/Deep、并行、迁移或需要完整证据治理的工作。
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
Goal Plan 只有包含完整 `## Delegated Execution Addendum` 时才进入 delegated execution 分支。Lead 在派单、恢复或验收候选交付时调用 `<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/SKILL.md</Path>`;普通 Goal Plan 不建立 Lead/Worker 角色,也不调用该 Skill。
|
|
27
27
|
|
|
28
28
|
### Direct Spec 模式(保留原能力)
|
|
29
29
|
|
|
@@ -51,6 +51,8 @@ Ticket 模式适用于多 Ticket、Standard/Deep、并行、迁移或需要完
|
|
|
51
51
|
|
|
52
52
|
## 流程
|
|
53
53
|
|
|
54
|
+
Git 已处于 merge/rebase 冲突时,先加载 `<Path>{roots.workflows}/specdev/I-implement/merge-conflict-protocol.md</Path>` 并完成或可恢复地暂停该分支;不要把冲突伪装成普通 TDD 切片。
|
|
55
|
+
|
|
54
56
|
### 1. 执行前预检
|
|
55
57
|
|
|
56
58
|
加载 `<Path>{roots.workflows}/specdev/I-implement/execution-preflight.md</Path>`。
|
|
@@ -63,7 +65,7 @@ Ticket 模式检查:
|
|
|
63
65
|
- Ticket 与 Spec/ADR/Goal Plan 无冲突;
|
|
64
66
|
- 可写、只读、共享路径明确且无并发冲突;
|
|
65
67
|
- 并行执行时,Ticket 的 worktree 记录为 `active`,`base_sha` 与派单一致;
|
|
66
|
-
-
|
|
68
|
+
- 存在委派附录时,派单块的 execution model、Lead、checkpoint、workspace/session locator、路径合同、修正上限和授权矩阵与当前事实一致;
|
|
67
69
|
- 验证命令和 Evidence 位置可用;
|
|
68
70
|
- 当前代码事实没有使核心契约失效。
|
|
69
71
|
|
|
@@ -102,7 +104,8 @@ Direct Spec 模式检查:
|
|
|
102
104
|
加载:
|
|
103
105
|
|
|
104
106
|
- `<Path>{roots.workflows}/specdev/I-implement/tdd-rules.md</Path>`
|
|
105
|
-
- `<Path>{roots.workflows}/specdev/I-implement/tdd-
|
|
107
|
+
- `<Path>{roots.workflows}/specdev/I-implement/tdd-test-design.md</Path>`
|
|
108
|
+
- `<Path>{roots.workflows}/specdev/I-implement/tdd-mocking.md</Path>`
|
|
106
109
|
- `<Path>{roots.workflows}/specdev/common/rules/code-commenting-rule.md</Path>`
|
|
107
110
|
|
|
108
111
|
对每个验收行为或关键风险:
|
|
@@ -112,8 +115,7 @@ Direct Spec 模式检查:
|
|
|
112
115
|
3. 确认失败原因正确;
|
|
113
116
|
4. 只写足以通过当前测试的实现;
|
|
114
117
|
5. 运行定向验证;
|
|
115
|
-
6.
|
|
116
|
-
7. 进入下一条窄垂直切片。
|
|
118
|
+
6. 保存 red/green 证据并进入下一条窄垂直切片。
|
|
117
119
|
|
|
118
120
|
本循环新增或修改代码注释时,使用注释规则判断信息是否应由代码表达,并同步维护受行为变更影响的既有注释。
|
|
119
121
|
|
|
@@ -124,24 +126,32 @@ Direct Spec 模式检查:
|
|
|
124
126
|
- 每个安全落点运行定向验证;
|
|
125
127
|
- 完成前运行 Ticket 验证矩阵,或 Direct Spec 模式的轻量验证契约;
|
|
126
128
|
- 按 `<Path>{roots.state}/specdev/config.json</Path>` 运行适用的类型检查、lint、测试和构建;
|
|
127
|
-
-
|
|
129
|
+
- 普通 Goal Plan 下由当前实现者运行适用 E2E;存在委派附录时 Worker 只记录场景与预期结果,由 Lead 在集成阶段执行;
|
|
128
130
|
- 检查实际修改均在 `writable_paths` 或获批的 Direct Spec 可写范围内;
|
|
129
131
|
- shared path 只由 owner 修改;
|
|
130
132
|
- 越界前停止并提出 ownership change,不先改后报;
|
|
131
133
|
- 记录新失败、既有失败和环境失败的区别。
|
|
132
134
|
|
|
135
|
+
完成当前实现审查前运行:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> \
|
|
139
|
+
--stage implement \
|
|
140
|
+
<Path>{roots.state}/specdev/changes/{change}</Path>
|
|
141
|
+
```
|
|
142
|
+
|
|
133
143
|
证据规则见 `<Path>{roots.workflows}/specdev/common/rules/evidence-and-verification.md</Path>`。
|
|
134
144
|
|
|
135
145
|
### 5. 双轴审查
|
|
136
146
|
|
|
137
|
-
|
|
147
|
+
调用 `<Path>{roots.workflows}/specdev/common/skills/code-review/SKILL.md</Path>`,把当前 Ticket 基线和实现 checkpoint 固定为本地 SHA。
|
|
138
148
|
|
|
139
149
|
- **标准轴**:正确性、模块设计、代码异味、错误处理、安全、性能、并发、资源释放、测试质量和可维护性;
|
|
140
150
|
- **规范轴**:对照 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`、Ticket 的 IN/OUT、实现契约、路径所有权、验证矩阵和 Goal Gate。
|
|
141
151
|
|
|
142
152
|
标准轴同时复核步骤 3 加载的注释规则:公共 API 契约完整,内部注释只保留非显然的 Why、Invariant 和 Risk,且所有相关注释与当前行为一致。
|
|
143
153
|
|
|
144
|
-
|
|
154
|
+
两个轴使用隔离上下文并按标准轴、规范轴顺序写入 Evidence,不合并或跨轴重排。审查发现局部问题时进入独立修正/重构阶段,随后重跑受影响验证和 review 轴;需要改变上层契约时升级 deviation 并返回 Spec/Ticket/ADR。
|
|
145
155
|
|
|
146
156
|
### 6. Evidence 与状态
|
|
147
157
|
|
|
@@ -159,10 +169,12 @@ Direct Spec 模式写入:
|
|
|
159
169
|
|
|
160
170
|
Evidence 必须包含实际修改范围、命令与结果、验收逐条映射、未运行项、偏差、残余风险和提交引用。
|
|
161
171
|
|
|
162
|
-
delegated execution
|
|
172
|
+
存在委派附录时,加载 `<Path>{roots.workflows}/specdev/I-implement/delegated-evidence-template.md</Path>`,补充 execution model、provider、派单与最终 checkpoint、workspace/session locator、候选交付核对、修正轮次和未验证声明。Lead 使用 `<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/SKILL.md</Path>` 的 `operation=execute` 分支完成核对;provider 自报结果不能直接标记为 `pass`。普通 Evidence 不包含这些字段或空占位。
|
|
163
173
|
|
|
164
174
|
Ticket 状态依次为 `ready → in_progress → review → done`;阻塞使用 `blocked`,实际实现与批准契约不一致使用 `deviated`。验证无法运行或存在未批准偏差时不得标 `done`。
|
|
165
175
|
|
|
176
|
+
最后一个计划内 Ticket 完成后加载 `<Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>`:没有 Goal Plan 或 Goal Plan 不含委派附录时,完成门全部通过后由本 Work 原子设置 change 为 completed;存在完整委派附录时只返回 Evidence,由 Lead 独立验收并关闭 change。若 triage 显示 `pending-close` 或 `close-failed`,下一 Work 为 `<Path>{roots.workflows}/specdev/T-triage/T-triage.md</Path>`;否则进入 Archive。
|
|
177
|
+
|
|
166
178
|
同步:
|
|
167
179
|
|
|
168
180
|
- Ticket:`<Path>{roots.state}/specdev/changes/{change}/ticket/{ticket-file}.md</Path>`
|
|
@@ -176,10 +188,10 @@ Ticket 状态依次为 `ready → in_progress → review → done`;阻塞使
|
|
|
176
188
|
2. 仅在 `<Path>{roots.state}/specdev/config.json</Path>` 和用户授权允许时提交;
|
|
177
189
|
3. 提交信息引用 Ticket ID 或 Direct Spec change;
|
|
178
190
|
4. 不自动推送、合并、部署、发布或执行不可逆迁移;
|
|
179
|
-
5. 返回 Ticket ID 与状态、Evidence 完整路径、`workspace_ref`、commit 或 PR
|
|
191
|
+
5. 返回 Ticket ID 与状态、Evidence 完整路径、`workspace_ref`、commit 或 PR 引用和适用 E2E 结果;委派 Worker 返回待 Lead 执行的 E2E;
|
|
180
192
|
6. Direct Spec 模式返回 change、状态和 `<Path>{roots.state}/specdev/changes/{change}/evidence/direct-spec.md</Path>`。
|
|
181
193
|
|
|
182
|
-
|
|
194
|
+
普通 Goal Plan 遵循 `<Path>{roots.workflows}/specdev/P-goal-plan/orchestration-protocol.md</Path>` 的 Evidence 返回协议;存在委派附录时遵循 `<Path>{roots.workflows}/specdev/P-goal-plan/delegated-execution.md</Path>`,同时返回稳定 workspace/session locator、最终 checkpoint、修正轮次和未验证项。
|
|
183
195
|
|
|
184
196
|
## 完成标准
|
|
185
197
|
|
|
@@ -201,8 +213,11 @@ Ticket 状态依次为 `ready → in_progress → review → done`;阻塞使
|
|
|
201
213
|
- 代码库设计规则:`<Path>{roots.workflows}/specdev/common/rules/codebase-design.md</Path>`
|
|
202
214
|
- Design It Twice:`<Path>{roots.workflows}/specdev/I-implement/design-it-twice.md</Path>`
|
|
203
215
|
- TDD 规则:`<Path>{roots.workflows}/specdev/I-implement/tdd-rules.md</Path>`
|
|
204
|
-
- TDD
|
|
216
|
+
- TDD 测试设计:`<Path>{roots.workflows}/specdev/I-implement/tdd-test-design.md</Path>`
|
|
217
|
+
- TDD Mocking:`<Path>{roots.workflows}/specdev/I-implement/tdd-mocking.md</Path>`
|
|
205
218
|
- 代码注释规则:`<Path>{roots.workflows}/specdev/common/rules/code-commenting-rule.md</Path>`
|
|
206
|
-
- 双轴审查:`<Path>{roots.workflows}/specdev/
|
|
219
|
+
- 双轴审查:`<Path>{roots.workflows}/specdev/common/skills/code-review/SKILL.md</Path>`
|
|
207
220
|
- Evidence 模板:`<Path>{roots.workflows}/specdev/I-implement/evidence-template.md</Path>`
|
|
221
|
+
- 委派 Evidence 附录:`<Path>{roots.workflows}/specdev/I-implement/delegated-evidence-template.md</Path>`,仅 Goal Plan 含委派附录时加载
|
|
208
222
|
- Agent 交付合同:`<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/SKILL.md</Path>`
|
|
223
|
+
- Merge/rebase 冲突:`<Path>{roots.workflows}/specdev/I-implement/merge-conflict-protocol.md</Path>`
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Delegated Evidence Addendum
|
|
2
|
+
|
|
3
|
+
Goal Plan 含完整 `## Delegated Execution Addendum` 时,把以下字段加入对应 Ticket Evidence;普通执行不生成本附录或空占位。
|
|
4
|
+
|
|
5
|
+
- **Execution model / Provider:** native-subagent / external-web-subagent;`<provider>`
|
|
6
|
+
- **Session/Package locator:** `<portable-locator>`
|
|
7
|
+
- **Dispatch / Final checkpoint:** `<sha-or-fixed-baseline>` / `<sha-or-fixed-baseline>`
|
|
8
|
+
- **Correction rounds:** `<count>`
|
|
9
|
+
- **Candidate delivery verification:** 范围、附件 hash、声明与独立核对结果
|
|
10
|
+
- **Lead E2E:** 不适用 / 待执行:场景与预期 / 通过 / 失败
|
|
11
|
+
- **Unverified claims:** 无 / `<items-and-reason>`
|
|
@@ -7,10 +7,6 @@
|
|
|
7
7
|
- **Goal Plan:** `<Path>{roots.state}/specdev/changes/{change}/goal-plan.md</Path>` / 不适用
|
|
8
8
|
- **基线/分支:**
|
|
9
9
|
- **Worktree 引用:** 不适用 / `<workspace_ref>`
|
|
10
|
-
- **执行模型/Provider:** direct / native-subagent / external-web-subagent;provider 或不适用
|
|
11
|
-
- **Session/Package locator:** 不适用 / `<portable-locator>`
|
|
12
|
-
- **派单/最终 Checkpoint:** `<sha-or-local-baseline>` / `<sha-or-local-baseline>`
|
|
13
|
-
- **修正轮次:** 0 / `<count>`
|
|
14
10
|
- **实现者:**
|
|
15
11
|
- **开始/结束:**
|
|
16
12
|
- **状态:** review / done / blocked / deviated
|
|
@@ -41,11 +37,29 @@
|
|
|
41
37
|
|
|
42
38
|
- **失败后修复与重跑:** 无 / ...
|
|
43
39
|
- **未运行检查:** 无 / 原因与风险 ...
|
|
44
|
-
- **
|
|
40
|
+
- **E2E:** 不适用 / 场景、执行者与结果
|
|
45
41
|
- **反向验证:** 不适用 / 受控失败信号与恢复结果
|
|
46
42
|
- **外部声明:** 无 / 已核对 / `unverified`:原因
|
|
47
43
|
|
|
48
|
-
## 5.
|
|
44
|
+
## 5. 双轴审查
|
|
45
|
+
|
|
46
|
+
### 标准轴
|
|
47
|
+
|
|
48
|
+
- **结果:** pass / request-changes
|
|
49
|
+
- **来源:** 仓库标准 + Fowler baseline
|
|
50
|
+
- **Findings:** 无 / ...
|
|
51
|
+
- **修正与重跑:** 不适用 / ...
|
|
52
|
+
|
|
53
|
+
### 规范轴
|
|
54
|
+
|
|
55
|
+
- **结果:** pass / request-changes / skipped:no-spec
|
|
56
|
+
- **来源:** Spec / Ticket / source / 无
|
|
57
|
+
- **Findings:** 无 / ...
|
|
58
|
+
- **修正与重跑:** 不适用 / ...
|
|
59
|
+
|
|
60
|
+
两轴保持独立顺序,不合并或跨轴重排 finding。
|
|
61
|
+
|
|
62
|
+
## 6. 路径所有权审计
|
|
49
63
|
|
|
50
64
|
- **writable 内修改:**
|
|
51
65
|
- **shared 修改与 owner 批准:** 无 / ...
|
|
@@ -53,7 +67,7 @@
|
|
|
53
67
|
- **未声明路径:** 无
|
|
54
68
|
- **生成文件或锁文件:** 无 / 来源与 owner ...
|
|
55
69
|
|
|
56
|
-
##
|
|
70
|
+
## 7. 偏差与决策
|
|
57
71
|
|
|
58
72
|
- **偏差:** 无 / `<deviation-id>`
|
|
59
73
|
- **偏差记录:** `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>` / 不适用
|
|
@@ -62,15 +76,15 @@
|
|
|
62
76
|
|
|
63
77
|
偏差处理遵守 `<Path>{roots.workflows}/specdev/common/rules/deviation-control.md</Path>`,不得静默修改 Ticket 目标或验收。
|
|
64
78
|
|
|
65
|
-
##
|
|
79
|
+
## 8. 残余风险与后续
|
|
66
80
|
|
|
67
81
|
- **残余风险:** 无 / ...
|
|
68
82
|
- **已知限制:** 无 / ...
|
|
69
83
|
- **后续 Ticket:** 无 / `<ticket-id>`
|
|
70
84
|
- **监控或回滚触发条件:** 不适用 / ...
|
|
71
85
|
|
|
72
|
-
##
|
|
86
|
+
## 9. 交付定位
|
|
73
87
|
|
|
74
88
|
- **Commit / PR:**
|
|
75
|
-
- **最终 Workspace
|
|
89
|
+
- **最终 Workspace 引用:** 不适用 / `<workspace_ref>`
|
|
76
90
|
- **Evidence 文件:** `<Path>{roots.state}/specdev/changes/{change}/evidence/{ticket-id}.md</Path>`
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
- [ ] 当前代码入口、接口和路径仍与 Ticket 假设一致。
|
|
9
9
|
- [ ] writable_paths 无并发 owner 冲突。
|
|
10
10
|
- [ ] 并行执行时,`<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>` 的 `worktrees` 中本 Ticket 为 `active`,`base_sha`、分支和 `workspace_ref` 与派单一致。
|
|
11
|
-
- [ ]
|
|
12
|
-
- [ ]
|
|
13
|
-
- [ ]
|
|
11
|
+
- [ ] Goal Plan 含 `## Delegated Execution Addendum` 时,只有一个 execution model 和 Lead,派单 checkpoint 与当前源码一致,workspace/session locator 可恢复。
|
|
12
|
+
- [ ] 委派附录的授权矩阵逐项覆盖 local changes、commit、push、PR、merge、deploy、migration 和生产动作;未授权动作不会执行。
|
|
13
|
+
- [ ] 委派候选交付的附件 hash、修改范围和事实声明可由 Lead 独立核对。
|
|
14
14
|
- [ ] 验证命令/环境可用。
|
|
15
15
|
- [ ] 可静默失效的关键门禁定义了受控反向验证;普通测试不为形式追加破坏性检查。
|
|
16
16
|
- [ ] Deep Ticket 的批准点已满足。
|
|
@@ -22,5 +22,5 @@
|
|
|
22
22
|
- **ticket-invalid**:范围、接口、依赖、验证或路径契约失效;停止并修 Ticket。
|
|
23
23
|
- **spec-invalid**:外部行为/合同需改变;停止并修 Spec。
|
|
24
24
|
- **adr-conflict**:架构决策冲突;停止并处理 ADR。
|
|
25
|
-
- **checkpoint-drift
|
|
25
|
+
- **checkpoint-drift**:委派派单基线、源码包或当前代码已经漂移;暂停并由 Lead 重放、重派或建立新 checkpoint。
|
|
26
26
|
- **delivery-unverified**:候选交付、provider 声明或附件无法独立核对;保持 `unverified`,不得推进 `done`。
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Merge / Rebase Conflict Protocol
|
|
2
|
+
|
|
3
|
+
只在 `git status` 证明仓库正处于 merge 或 rebase 冲突时加载。普通集成设计冲突继续按 deviation/upstream owner 处理。
|
|
4
|
+
|
|
5
|
+
## 流程
|
|
6
|
+
|
|
7
|
+
1. 读取 Git 状态、操作类型、冲突文件、base/ours/theirs commit 和当前 Ticket/Evidence。
|
|
8
|
+
2. 追溯双方意图:commit message、冻结的 source、Spec、Ticket、ADR、测试和调用者。二者缺失时不凭代码表面猜测产品行为。
|
|
9
|
+
3. 逐 conflict hunk 写出双方意图、共同约束和建议结果。只合并既有意图;需要发明新行为或改变上层合同则停止并登记 deviation。
|
|
10
|
+
4. 在获授权可写范围内解决文本,运行受影响测试、typecheck、lint 和项目要求的验证。
|
|
11
|
+
5. 分别展示并确认 `git add`、`git merge/rebase --continue` 和最终 commit 动作。没有授权时保存已分析方案、剩余文件和精确恢复命令,不擅自继续。
|
|
12
|
+
6. 重读 Git 状态和 diff,确认无 marker、无未声明路径、双方要求及测试仍成立。
|
|
13
|
+
|
|
14
|
+
## 完成标准
|
|
15
|
+
|
|
16
|
+
- 每个 hunk 的结果可追溯到双方意图;
|
|
17
|
+
- 新产品决定没有藏在冲突解决中;
|
|
18
|
+
- 项目验证有命令、退出码和关键输出;
|
|
19
|
+
- Git 副作用逐动作获得授权;
|
|
20
|
+
- 完成或暂停状态可以从 Evidence 和 Git 状态恢复。
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# TDD Mocking
|
|
2
|
+
|
|
3
|
+
Mock 只位于系统边界:外部 API、不可控时间/随机、必要时文件系统,以及无法使用测试实例的数据库。优先真实测试数据库或轻量实现。
|
|
4
|
+
|
|
5
|
+
不 Mock 自有模块、内部协作者或可在进程内运行的真实逻辑。Mock 调用本身只有在协议明确把该调用定义为外部行为时才可断言。
|
|
6
|
+
|
|
7
|
+
## Boundary Design
|
|
8
|
+
|
|
9
|
+
- 通过依赖注入传入外部 client,不在业务函数内部创建;
|
|
10
|
+
- 使用按操作命名的 SDK 风格接口,例如 `getUser`、`createOrder`,避免要求 mock 内再次实现路由条件的通用 `fetch(endpoint)`;
|
|
11
|
+
- 每个 fake/mock 返回具体协议形态并验证错误、超时和资源清理;
|
|
12
|
+
- 适配器负责第三方 wire format,领域代码测试稳定内部接口。
|
|
13
|
+
|
|
14
|
+
## 完成门
|
|
15
|
+
|
|
16
|
+
- 每个 mock 对应真实系统边界;
|
|
17
|
+
- 自有业务行为由真实实现参与测试;
|
|
18
|
+
- mock setup 没有复制生产路由逻辑;
|
|
19
|
+
- 协议兼容、错误和非确定性有可观察验证。
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
# TDD
|
|
1
|
+
# TDD 红绿规则
|
|
2
2
|
|
|
3
|
-
1. 从 Ticket
|
|
4
|
-
2.
|
|
5
|
-
3.
|
|
6
|
-
4.
|
|
7
|
-
5.
|
|
3
|
+
1. 从 Ready Ticket/Spec 选择下一条最小可观察行为,并写下已确认 seam。
|
|
4
|
+
2. 只为该行为编写一个会因目标能力缺失而失败的测试或验证。
|
|
5
|
+
3. 运行并观察红灯;失败原因必须是目标行为缺失,而不是语法、夹具或环境错误。
|
|
6
|
+
4. 只写使当前测试通过的最小生产代码,不预测后续切片。
|
|
7
|
+
5. 运行定向测试并观察绿灯,记录命令与结果。
|
|
8
|
+
6. 进入下一条窄垂直切片;周期性运行受影响回归。
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
重构不属于红绿循环。全部目标行为完成并经过双轴 review 后,才进入独立修正/重构阶段,并重跑受影响 review 轴与验证。
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
12
|
+
## 完成门
|
|
13
|
+
|
|
14
|
+
- 每个切片有对应 red 和 green 证据;
|
|
15
|
+
- 一个循环只有一个 seam、一个测试和一个最小实现;
|
|
16
|
+
- 测试没有通过删除、跳过、吞错或放宽断言制造绿色;
|
|
17
|
+
- review 前没有以“顺手重构”扩大切片。
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# TDD Test Design
|
|
2
|
+
|
|
3
|
+
## Seam Agreement
|
|
4
|
+
|
|
5
|
+
测试 seam 必须来自 Ready Ticket/Spec。合同已锁定时直接采用并记录来源;缺失且选择会改变范围、公共接口或事故半径时,先返回上游或请求用户决定。局部且不改变合同的 seam 可按仓库先例选择。
|
|
6
|
+
|
|
7
|
+
## 行为与独立真相
|
|
8
|
+
|
|
9
|
+
- 通过公共 API/CLI/HTTP/事件或稳定集成接缝验证调用者可观察行为;
|
|
10
|
+
- 测试名称描述 WHAT,不描述私有 HOW;
|
|
11
|
+
- 预期值来自字面量、手工算例、规范或已知正确夹具,不能用生产实现的同一算法重新计算;
|
|
12
|
+
- 通过被测接口观察结果,不旁路查询内部数据库或私有状态;
|
|
13
|
+
- 一个测试表达一个逻辑行为,但可以包含证明该行为所需的多个断言。
|
|
14
|
+
|
|
15
|
+
## 垂直切片
|
|
16
|
+
|
|
17
|
+
一个测试、一个最小实现、一次反馈。不要先批量写出所有测试再批量实现;水平切片会在理解真实实现前锁定想象中的结构。
|
|
18
|
+
|
|
19
|
+
## 反模式
|
|
20
|
+
|
|
21
|
+
- Mock 内部协作者或被测对象;
|
|
22
|
+
- 测试私有方法、调用次数或内部顺序;
|
|
23
|
+
- 同义反复地重算预期值;
|
|
24
|
+
- 绕过公共接口验证内部存储;
|
|
25
|
+
- 只覆盖 happy path,遗漏 Ticket 明确的错误与边界行为。
|
|
@@ -3,7 +3,7 @@ id: specdev/init-setup
|
|
|
3
3
|
type: workflow-entry
|
|
4
4
|
workflow: specdev
|
|
5
5
|
name: 初始化设置
|
|
6
|
-
description: 初始化 SpecDev
|
|
6
|
+
description: 初始化 SpecDev 的语言、配置、全局状态、本地 change 追踪、领域知识布局、验证命令和并发治理。
|
|
7
7
|
keywords: [初始化, 配置, status, tracking, 验证命令]
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -46,6 +46,8 @@ keywords: [初始化, 配置, status, tracking, 验证命令]
|
|
|
46
46
|
- 共享高冲突路径的类型,例如根依赖清单、锁文件、全局导出、共享 schema、迁移索引和全局路由;
|
|
47
47
|
- 项目中已有的提交、分支和发布约定。
|
|
48
48
|
|
|
49
|
+
同时确认项目根 `.gitignore` 存在且包含 `specdev-worktree/`(`/specdev-worktree/` 视为等价)。该条目由 `speculo init` 单一维护;缺失时停止并提示用户以当前 Speculo 版本重新运行 `speculo init`,本 Work 不作为第二写入者修改它。
|
|
50
|
+
|
|
49
51
|
### 3. 询问不可发现偏好
|
|
50
52
|
|
|
51
53
|
仅在上下文未提供时询问:
|
|
@@ -54,7 +56,6 @@ keywords: [初始化, 配置, status, tracking, 验证命令]
|
|
|
54
56
|
- 是否允许自动提交;
|
|
55
57
|
- 最大并发数;
|
|
56
58
|
- Deep Ticket 的迁移、发布和不可逆操作是否必须人工批准;
|
|
57
|
-
- 外部任务系统标签是否需要映射。
|
|
58
59
|
|
|
59
60
|
不询问可由仓库事实回答的文件位置、脚本名或默认分支。
|
|
60
61
|
|
|
@@ -82,11 +83,12 @@ keywords: [初始化, 配置, status, tracking, 验证命令]
|
|
|
82
83
|
- `<Path>{roots.state}/specdev/research/</Path>`
|
|
83
84
|
- `<Path>{roots.state}/specdev/archive/</Path>`
|
|
84
85
|
|
|
86
|
+
若全局状态已存在,先检查 `schema_version`。版本未知、JSON 不可解析或状态与当前 workflow 契约不一致时,停止当前 Work,并提示用户重新运行 `speculo init` 刷新受 Speculo 管理的状态;不得在 Work 内迁移、兼容或猜测旧状态。只有状态不存在时才从 schema v4 模板创建。
|
|
87
|
+
|
|
85
88
|
从模板生成:
|
|
86
89
|
|
|
87
90
|
- `<Path>{roots.workflows}/specdev/I-init-setup/tracking-template.md</Path>` → `<Path>{roots.state}/specdev/.config/tracking.md</Path>`
|
|
88
91
|
- `<Path>{roots.workflows}/specdev/I-init-setup/domain-layout-template.md</Path>` → `<Path>{roots.state}/specdev/.config/domain-layout.md</Path>`
|
|
89
|
-
- `<Path>{roots.workflows}/specdev/I-init-setup/status-labels-template.md</Path>` → `<Path>{roots.state}/specdev/.config/status-labels.md</Path>`
|
|
90
92
|
|
|
91
93
|
已有永久知识不得被初始化过程清空。已有配置应先验证和展示差异,再按用户授权更新。
|
|
92
94
|
|
|
@@ -96,8 +98,9 @@ keywords: [初始化, 配置, status, tracking, 验证命令]
|
|
|
96
98
|
2. 对照 `<Path>{roots.workflows}/specdev/common/schemas/config.schema.json</Path>` 与 `<Path>{roots.workflows}/specdev/common/schemas/status.schema.json</Path>`;
|
|
97
99
|
3. 确认 `<Path>{roots.workflows}/specdev/I-init-setup/change-status-template.json</Path>` 的字段与 `<Path>{roots.workflows}/specdev/common/schemas/change-status.schema.json</Path>` 对齐;实际创建 change 时替换模板占位符后再执行 Schema 验证;
|
|
98
100
|
4. 确认所有必需目录存在;
|
|
99
|
-
5.
|
|
100
|
-
6.
|
|
101
|
+
5. 确认两个配置文档均已从对应模板生成;
|
|
102
|
+
6. 确认项目根 `.gitignore` 已忽略 `specdev-worktree/`;
|
|
103
|
+
7. 运行:
|
|
101
104
|
|
|
102
105
|
```bash
|
|
103
106
|
node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> --self-check
|
|
@@ -105,17 +108,18 @@ node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> --
|
|
|
105
108
|
|
|
106
109
|
### 7. 更新状态并汇报
|
|
107
110
|
|
|
108
|
-
|
|
111
|
+
若本 Work 由某个 active change 调用,开始时把该 entry 的 `current_work` 设为 `specdev/init-setup`,完成时将该 id 去重加入 `works_run` 并清空;纯工作流初始化没有 active change 时不创建虚假的 change。时间和验证结果写入本次回复或 change 自有 Evidence/LOG,不写入全局索引。向用户汇报:状态根、语言、验证命令、并发策略、人工批准策略和任何仍为 `null` 的配置项。
|
|
109
112
|
|
|
110
113
|
## 完成标准
|
|
111
114
|
|
|
112
115
|
- `<Path>{roots.state}/specdev/config.json</Path>` 与 `<Path>{roots.state}/specdev/status.json</Path>` 可解析且满足 Schema;
|
|
113
116
|
- 状态目录、永久知识目录和归档目录齐全;
|
|
114
|
-
-
|
|
117
|
+
- 两个配置文档已就位;
|
|
115
118
|
- 验证命令与并发规则有来源;
|
|
119
|
+
- 项目根 `.gitignore` 已包含 `specdev-worktree/`;
|
|
116
120
|
- 无敏感值被写入;
|
|
117
121
|
- 包级自检无 error;
|
|
118
|
-
-
|
|
122
|
+
- 存在调用 change 时,其 `works_run` 已包含本 work且 `current_work` 已清空;纯初始化时全局 active 保持真实为空。
|
|
119
123
|
|
|
120
124
|
## 子文件引用
|
|
121
125
|
|
|
@@ -124,4 +128,3 @@ node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> --
|
|
|
124
128
|
- `<Path>{roots.workflows}/specdev/I-init-setup/change-status-template.json</Path>`
|
|
125
129
|
- `<Path>{roots.workflows}/specdev/I-init-setup/tracking-template.md</Path>`
|
|
126
130
|
- `<Path>{roots.workflows}/specdev/I-init-setup/domain-layout-template.md</Path>`
|
|
127
|
-
- `<Path>{roots.workflows}/specdev/I-init-setup/status-labels-template.md</Path>`
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
|
|
14
14
|
## 职责
|
|
15
15
|
|
|
16
|
-
- `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path
|
|
16
|
+
- `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`:当前 bounded context 的项目规范术语和 `_Avoid_` 同义词;不保存代码导航或 change 历史。
|
|
17
17
|
- `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`:当前 change 已接受、被替代或废弃的架构决策。
|
|
18
18
|
- `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>`:设计讨论轨迹,不作为当前架构的最终权威。
|
|
19
19
|
- `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`:用户问题、外部行为、范围与验收合同。
|
|
20
20
|
- `<Path>{roots.state}/specdev/changes/{change}/ticket/</Path>`:单个垂直切片的执行契约。
|
|
21
21
|
- `<Path>{roots.state}/specdev/changes/{change}/goal-plan.md</Path>`:跨 Ticket 的门禁、调度和治理。
|
|
22
22
|
|
|
23
|
-
change
|
|
23
|
+
change 完成后,只有仍真实、跨 change 有用且有实现证据的规范术语或符合三项准入条件的 ADR 才能提升到永久目录。
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# 变更追踪约定
|
|
2
2
|
|
|
3
|
+
SpecDev 只使用本地 Markdown/JSON 工件跟踪开发。远程 Issue、URL 或指定内容必须先由 Triage 冻结为 `<Path>{roots.state}/specdev/changes/{change}/source.md</Path>`;远程状态、label、assignee 和 dependency 不替代本地 change、Ticket、Map、Goal Plan 或 Evidence。
|
|
4
|
+
|
|
3
5
|
- change 根:`<Path>{roots.state}/specdev/changes/</Path>`。
|
|
4
6
|
- 单个 change:`<Path>{roots.state}/specdev/changes/{change}/</Path>`,其中 `{change}` 使用 `<YYYY-MM-DD>-<kebab-topic>`。
|
|
5
7
|
- 一个 change 表示一个可独立说明、实现、验证和归档的目标。
|
|
@@ -8,3 +10,4 @@
|
|
|
8
10
|
- 工件状态应在同一次操作中同步,避免入口状态、Ticket 状态与 Map 状态漂移。
|
|
9
11
|
- 完成条件:全部必需 Ticket 为 `done` 或有批准的 `cancelled`,证据齐全,无未批准 deviation,change 级验证通过。
|
|
10
12
|
- 归档后的 `<Path>{roots.state}/specdev/archive/YYYY-MM/{change}/</Path>` 默认只读;后续纠正通过新 change 和 supersedes 链完成。
|
|
13
|
+
- 可关闭的远程来源在本地完成后由 Triage reconcile;`closed`、显式 `waived` 或 `not-applicable` 后才归档。
|