@namewta/speculo 0.6.0 → 0.6.1
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 +7 -4
- package/dist/src/cli.js +2 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/index.js +37 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/migrate.d.ts +14 -1
- package/dist/src/migrate.js +308 -11
- package/dist/src/migrate.js.map +1 -1
- package/package.json +3 -2
- 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/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/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
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:speculo:specdev:source:v1",
|
|
4
|
+
"title": "SpecDev Source Frontmatter",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schema_version", "artifact", "change", "source_type", "canonical_locator", "captured_at", "content_sha256", "remote_state", "close_capability"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schema_version": {"const": 1},
|
|
9
|
+
"artifact": {"const": "source"},
|
|
10
|
+
"change": {"type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*$"},
|
|
11
|
+
"source_type": {"enum": ["conversation", "pasted", "local-file", "url", "github-issue", "github-pr"]},
|
|
12
|
+
"canonical_locator": {"type": ["string", "null"]},
|
|
13
|
+
"captured_at": {"type": "string", "minLength": 1},
|
|
14
|
+
"content_sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
|
|
15
|
+
"remote_state": {"enum": ["open", "closed", "unknown", "not-applicable"]},
|
|
16
|
+
"close_capability": {"enum": ["supported", "unsupported", "not-applicable"]},
|
|
17
|
+
"supersedes_source": {"type": "string", "minLength": 1}
|
|
18
|
+
},
|
|
19
|
+
"additionalProperties": true
|
|
20
|
+
}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "urn:speculo:specdev:status:
|
|
3
|
+
"$id": "urn:speculo:specdev:status:v4",
|
|
4
4
|
"title": "SpecDev Global Status",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"required": [
|
|
7
7
|
"schema_version",
|
|
8
8
|
"workflow",
|
|
9
9
|
"active",
|
|
10
|
-
"
|
|
11
|
-
"completed"
|
|
10
|
+
"archived"
|
|
12
11
|
],
|
|
13
12
|
"properties": {
|
|
14
13
|
"schema_version": {
|
|
15
|
-
"const":
|
|
14
|
+
"const": 4
|
|
16
15
|
},
|
|
17
16
|
"workflow": {
|
|
18
17
|
"const": "specdev"
|
|
@@ -24,30 +23,27 @@
|
|
|
24
23
|
"required": [
|
|
25
24
|
"change",
|
|
26
25
|
"current_work",
|
|
27
|
-
"works_run"
|
|
28
|
-
"result"
|
|
26
|
+
"works_run"
|
|
29
27
|
],
|
|
30
28
|
"properties": {
|
|
31
29
|
"change": {
|
|
32
|
-
"type": "string"
|
|
30
|
+
"type": "string",
|
|
31
|
+
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*$"
|
|
33
32
|
},
|
|
34
33
|
"current_work": {
|
|
35
34
|
"type": [
|
|
36
35
|
"string",
|
|
37
36
|
"null"
|
|
38
|
-
]
|
|
37
|
+
],
|
|
38
|
+
"pattern": "^specdev/"
|
|
39
39
|
},
|
|
40
40
|
"works_run": {
|
|
41
41
|
"type": "array",
|
|
42
42
|
"items": {
|
|
43
|
-
"type": "string"
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"type": [
|
|
48
|
-
"string",
|
|
49
|
-
"null"
|
|
50
|
-
]
|
|
43
|
+
"type": "string",
|
|
44
|
+
"pattern": "^specdev/"
|
|
45
|
+
},
|
|
46
|
+
"uniqueItems": true
|
|
51
47
|
},
|
|
52
48
|
"claimed_investigations": {
|
|
53
49
|
"type": "array",
|
|
@@ -75,75 +71,21 @@
|
|
|
75
71
|
"type": "string"
|
|
76
72
|
}
|
|
77
73
|
},
|
|
78
|
-
"additionalProperties":
|
|
74
|
+
"additionalProperties": false
|
|
79
75
|
}
|
|
80
76
|
}
|
|
81
77
|
},
|
|
82
|
-
"additionalProperties":
|
|
78
|
+
"additionalProperties": false
|
|
83
79
|
}
|
|
84
80
|
},
|
|
85
|
-
"
|
|
81
|
+
"archived": {
|
|
86
82
|
"type": "array",
|
|
87
83
|
"items": {
|
|
88
|
-
"type": "
|
|
89
|
-
"
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
"started_at",
|
|
93
|
-
"completed_at",
|
|
94
|
-
"result"
|
|
95
|
-
],
|
|
96
|
-
"properties": {
|
|
97
|
-
"change": {
|
|
98
|
-
"type": "string"
|
|
99
|
-
},
|
|
100
|
-
"work_id": {
|
|
101
|
-
"type": "string",
|
|
102
|
-
"pattern": "^specdev/"
|
|
103
|
-
},
|
|
104
|
-
"started_at": {
|
|
105
|
-
"type": "string"
|
|
106
|
-
},
|
|
107
|
-
"completed_at": {
|
|
108
|
-
"type": [
|
|
109
|
-
"string",
|
|
110
|
-
"null"
|
|
111
|
-
]
|
|
112
|
-
},
|
|
113
|
-
"result": {
|
|
114
|
-
"type": [
|
|
115
|
-
"string",
|
|
116
|
-
"null"
|
|
117
|
-
]
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
"additionalProperties": true
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
"completed": {
|
|
124
|
-
"type": "array",
|
|
125
|
-
"items": {
|
|
126
|
-
"type": "object",
|
|
127
|
-
"required": [
|
|
128
|
-
"change",
|
|
129
|
-
"archived_at",
|
|
130
|
-
"archive_path"
|
|
131
|
-
],
|
|
132
|
-
"properties": {
|
|
133
|
-
"change": {
|
|
134
|
-
"type": "string"
|
|
135
|
-
},
|
|
136
|
-
"archived_at": {
|
|
137
|
-
"type": "string"
|
|
138
|
-
},
|
|
139
|
-
"archive_path": {
|
|
140
|
-
"type": "string",
|
|
141
|
-
"pattern": "^<Path>\\{roots\\.state\\}/specdev/archive/[^<]+</Path>$"
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
"additionalProperties": true
|
|
145
|
-
}
|
|
84
|
+
"type": "string",
|
|
85
|
+
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*$"
|
|
86
|
+
},
|
|
87
|
+
"uniqueItems": true
|
|
146
88
|
}
|
|
147
89
|
},
|
|
148
|
-
"additionalProperties":
|
|
90
|
+
"additionalProperties": false
|
|
149
91
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:speculo:specdev:triage:v1",
|
|
4
|
+
"title": "SpecDev Triage Frontmatter",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schema_version", "artifact", "change", "mode", "source", "classification", "risk", "route", "ready_for_implementation", "external_action", "updated_at"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"schema_version": {"const": 1},
|
|
9
|
+
"artifact": {"const": "triage"},
|
|
10
|
+
"change": {"type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*$"},
|
|
11
|
+
"mode": {"enum": ["intake", "reconcile"]},
|
|
12
|
+
"source": {"type": "string", "minLength": 1},
|
|
13
|
+
"classification": {"enum": ["bug", "feature", "refactor", "investigation", "operations", "documentation", "review", "mixed"]},
|
|
14
|
+
"risk": {"enum": ["low", "medium", "high", "critical"]},
|
|
15
|
+
"route": {"type": "string", "pattern": "^specdev/[a-z0-9]+(?:-[a-z0-9]+)*$"},
|
|
16
|
+
"ready_for_implementation": {"type": "boolean"},
|
|
17
|
+
"external_action": {"enum": ["not-applicable", "pending-close", "closed", "close-failed", "waived"]},
|
|
18
|
+
"updated_at": {"type": "string", "minLength": 1}
|
|
19
|
+
},
|
|
20
|
+
"additionalProperties": true
|
|
21
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specdev-code-review
|
|
3
|
+
description: 从不可变固定点对本地 diff 执行隔离的标准轴与规范轴审查,供独立 C Work 和 I Work 最终审查共同调用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SpecDev Code Review
|
|
7
|
+
|
|
8
|
+
本 Skill 返回审查结果,不创建 runtime namespace。调用方分别负责 C review 工件或 I Evidence。
|
|
9
|
+
|
|
10
|
+
## 输入
|
|
11
|
+
|
|
12
|
+
- `fixed_point`:已解析的 commit SHA;
|
|
13
|
+
- `head`:已解析的 HEAD/checkpoint SHA;
|
|
14
|
+
- `diff_command`:固定为三点 diff;
|
|
15
|
+
- `commit_log`:固定点之后的 commit 列表;
|
|
16
|
+
- `spec_sources`:零个或多个本地权威来源;
|
|
17
|
+
- `standards_sources`:仓库编码标准来源;
|
|
18
|
+
- `review_context`:路径范围、调用 Work 和适用授权;
|
|
19
|
+
- `parallel_reviewers`:平台支持时为 true,否则使用两个独立上下文包顺序执行。
|
|
20
|
+
|
|
21
|
+
## 流程
|
|
22
|
+
|
|
23
|
+
1. 重验 fixed point/head 可解析、三点 diff 非空,失败时不启动 reviewer。
|
|
24
|
+
2. 加载 `<Path>{roots.workflows}/specdev/common/skills/code-review/references/source-discovery.md</Path>`,穷尽规范和标准来源。
|
|
25
|
+
3. 加载 `<Path>{roots.workflows}/specdev/common/skills/code-review/references/fowler-smells.md</Path>` 作为标准轴最低启发式;仓库明确标准优先。
|
|
26
|
+
4. 加载 `<Path>{roots.workflows}/specdev/common/skills/code-review/references/reviewer-contracts.md</Path>`,用互不共享发现的上下文分别运行两个轴。
|
|
27
|
+
5. 原顺序返回 `standards` 和 `specification` 两份结果。规范来源不存在时只跳过规范轴并解释,标准轴继续。
|
|
28
|
+
|
|
29
|
+
## 输出
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
{
|
|
33
|
+
fixed_point, head, diff_command, commit_log,
|
|
34
|
+
standards: { result, findings, sources },
|
|
35
|
+
specification: { result, findings, sources },
|
|
36
|
+
skipped_axes,
|
|
37
|
+
summary_counts
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Finding 必须包含 severity、项目相对 Path/代码块、具体风险、依据和满足条件。两个轴不合并、不跨轴重排,也不选“赢家”。
|
|
42
|
+
|
|
43
|
+
## 完成标准
|
|
44
|
+
|
|
45
|
+
- fixed point、head、diff 和 commits 固定且可重复;
|
|
46
|
+
- 仓库标准优先于 Fowler 启发式;
|
|
47
|
+
- 两个 reviewer 上下文没有相互发现污染;
|
|
48
|
+
- 每个发现可定位且说明行为风险;
|
|
49
|
+
- 两轴按固定顺序返回,缺失规范没有掩盖标准审查。
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Fowler Smell Baseline
|
|
2
|
+
|
|
3
|
+
以下条目是标准轴最低启发式,不是硬性违规;仓库明确允许时抑制,工具链已覆盖时不重复报告:
|
|
4
|
+
|
|
5
|
+
- **Mysterious Name**:名称不能揭示职责或数据含义;重命名,无法诚实命名时重新审视设计。
|
|
6
|
+
- **Duplicated Code**:同一知识形态出现在多个代码块;提取单一权威实现。
|
|
7
|
+
- **Feature Envy**:方法主要操作另一个对象的数据;把行为移动到数据 owner。
|
|
8
|
+
- **Data Clumps**:一组字段/参数反复同行;形成有语义的类型。
|
|
9
|
+
- **Primitive Obsession**:基本类型代替领域概念;引入小型领域类型。
|
|
10
|
+
- **Repeated Switches**:同一分类判断重复出现;集中映射或使用多态。
|
|
11
|
+
- **Shotgun Surgery**:一个逻辑变化迫使分散修改多个文件;汇聚共同变化知识。
|
|
12
|
+
- **Divergent Change**:同一模块因多个无关理由变化;按职责拆分。
|
|
13
|
+
- **Speculative Generality**:为规范未要求的未来需求增加抽象;删除并内联到真实需求出现。
|
|
14
|
+
- **Message Chains**:调用者依赖长导航链;由第一个对象隐藏导航。
|
|
15
|
+
- **Middle Man**:模块大部分只做转发;删除无价值中间层。
|
|
16
|
+
- **Refused Bequest**:继承者拒绝大部分合同;使用组合或重建接口。
|
|
17
|
+
|
|
18
|
+
每个命中写为“可能的 <Smell>”,引用代码块并解释为什么在当前 diff 中构成风险。
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Isolated Reviewer Contracts
|
|
2
|
+
|
|
3
|
+
## 标准轴
|
|
4
|
+
|
|
5
|
+
输入仅包含固定 diff/log、标准来源和 Fowler baseline。报告仓库规则违规和判断性 smell,引用来源与代码块,区分 hard violation 与 heuristic,并跳过工具链已强制执行的纯格式项。
|
|
6
|
+
|
|
7
|
+
## 规范轴
|
|
8
|
+
|
|
9
|
+
输入仅包含固定 diff/log 与规范来源。报告缺失或不完整需求、超出范围行为和语义/失败/边界错误,并引用具体规范来源。
|
|
10
|
+
|
|
11
|
+
## 隔离与结果
|
|
12
|
+
|
|
13
|
+
平台支持独立 reviewer 时可并行;否则创建两个不共享发现的完整输入包并顺序执行。汇总者只整理格式,不删除、合并或跨轴重排 finding。每轴独立返回 `pass | request-changes | skipped`;一轴通过不抵消另一轴失败。
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Review Source Discovery
|
|
2
|
+
|
|
3
|
+
## 规范来源
|
|
4
|
+
|
|
5
|
+
按顺序查找并记录每一步结论:
|
|
6
|
+
|
|
7
|
+
1. commit message 中的 Issue/PR 引用,对应本地 `<Path>{roots.state}/specdev/changes/{change}/source.md</Path>`;
|
|
8
|
+
2. 调用方显式提供的 Spec、Ticket、ADR、Goal Plan 或其他路径;
|
|
9
|
+
3. 与分支或功能匹配的仓库 `docs/`、`specs/` 或同类规范文件;
|
|
10
|
+
4. 都不存在时询问规范是否确实不存在。确认不存在后规范轴标记 `skipped:no-spec`。
|
|
11
|
+
|
|
12
|
+
远程 Issue/PR 必须先由 Triage 冻结,或解析为本地不可变 SHA;review 不把可变远程正文当作唯一权威。
|
|
13
|
+
|
|
14
|
+
## 标准来源
|
|
15
|
+
|
|
16
|
+
穷尽仓库中声明代码写法的文件:适用的 AGENTS/CLAUDE、CONTRIBUTING、编码标准、lint/type/test 配置和项目生成的 standards skill。记录适用范围;工具已经机械执行的格式项不重复生成人工噪声。
|
|
17
|
+
|
|
18
|
+
## 完成标准
|
|
19
|
+
|
|
20
|
+
- 每个候选来源有 found/not-found/not-applicable 结论;
|
|
21
|
+
- 来源使用项目相对 Path 或 SpecDev 完整 Path;
|
|
22
|
+
- 不存在的规范被明确确认,不由 reviewer 猜测。
|
|
@@ -1,28 +1,31 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: specdev-dev-worktree
|
|
3
|
-
description:
|
|
3
|
+
description: 为需要隔离项目写入的 Ready Ticket 或一次性原型建立可恢复 worktree,并由调用方明确的 workspace owner 管理基线、集成或清理。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SpecDev Dev Worktree
|
|
7
7
|
|
|
8
8
|
## 适用范围
|
|
9
9
|
|
|
10
|
-
-
|
|
10
|
+
- 用于并行写代码且路径所有权不冲突的 Ready Ticket,或明确要求临时隔离的一次性原型。
|
|
11
11
|
- 只读调查和顺序执行默认共用当前工作区。
|
|
12
|
-
-
|
|
12
|
+
- 调用方必须明确 workspace owner、implementation owner、固定基线、工作项 ID、持久化 owner 和允许的结束动作。
|
|
13
|
+
- 普通执行不建立额外角色;委派 Goal Plan 才把 workspace owner/implementation owner 分别映射为 Lead/Worker。
|
|
13
14
|
- 平台原生 worktree 优先;不可用时使用 Git worktree。
|
|
14
15
|
|
|
15
16
|
## 生命周期
|
|
16
17
|
|
|
17
18
|
1. 创建或恢复时加载 `<Path>{roots.workflows}/specdev/common/skills/dev-worktree/references/create.md</Path>`。
|
|
18
|
-
2.
|
|
19
|
-
3.
|
|
19
|
+
2. implementation owner 完成后返回工作项状态、Evidence/record 路径、`workspace_ref`、checkpoint、commit 或 PR 引用和未验证项;Ticket worktree 从 `active` 更新为 `review`。
|
|
20
|
+
3. workspace owner 集成或清理时加载 `<Path>{roots.workflows}/specdev/common/skills/dev-worktree/references/finalize.md</Path>`;一次性原型只评估和清理,不合入生产分支。
|
|
20
21
|
|
|
21
|
-
状态依次为 `planned → active → review → integrated → removed`;失败进入 `blocked
|
|
22
|
+
Ticket worktree 状态依次为 `planned → active → review → integrated → removed`;失败进入 `blocked`,记录写入 `<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>` 的 `worktrees`。原型的 branch、`workspace_ref` 和清理结果只写入 `<Path>{roots.state}/specdev/changes/{change}/prototypes/{prototype-id}/record.md</Path>`,不伪造 Ticket worktree 记录。
|
|
22
23
|
|
|
23
24
|
## 边界
|
|
24
25
|
|
|
25
|
-
- 每个并行 Ticket 使用独立 worktree、分支和相同 `base_sha
|
|
26
|
-
-
|
|
27
|
-
-
|
|
26
|
+
- 每个并行 Ticket 使用独立 worktree、分支和相同 `base_sha`;每个原型使用独立 worktree 和分支。
|
|
27
|
+
- Git provider 固定使用 `<project-root>/specdev-worktree/<work-item-id>/`,持久化 `workspace_ref: specdev-worktree/<work-item-id>`;`<project-root>` 由 `workspace.json#path_base: project-root` 解析。
|
|
28
|
+
- native/external provider 保留其可迁移 opaque locator;所有 provider 都不保存机器绝对路径、认证秘密或真实用户数据。
|
|
29
|
+
- 项目根 `.gitignore` 的 `specdev-worktree/` 条目由 `speculo init` 单一维护;缺失时创建流程阻塞并提示重新运行 init。
|
|
30
|
+
- E2E 仅适用于用户界面交互受影响的变更。普通执行由当前集成 owner 运行;委派执行由 Lead 在集成阶段运行。
|
|
28
31
|
- 合并、推送、PR、删除分支或 worktree 仍需用户授权。
|
|
@@ -1,30 +1,35 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 创建或恢复工作项 Worktree
|
|
2
2
|
|
|
3
3
|
## 前置
|
|
4
4
|
|
|
5
|
-
- Ticket `ready: true
|
|
6
|
-
- `<Path>{roots.state}/specdev/config.json</Path>` 中 `git.worktree_for_parallel: true
|
|
7
|
-
-
|
|
5
|
+
- Ticket `ready: true` 且依赖完成,或原型问题与临时写入范围已锁定;项目写路径无冲突。
|
|
6
|
+
- 并行 Ticket 要求 `<Path>{roots.state}/specdev/config.json</Path>` 中 `git.worktree_for_parallel: true`;一次性原型要求 P-prototype 已取得本次临时 worktree 授权。
|
|
7
|
+
- 调用方已指定 workspace owner、implementation owner、工作项 ID、持久化 owner,并固定 `base_sha`;并行 Ticket 共用同一基线。
|
|
8
8
|
|
|
9
9
|
## 创建
|
|
10
10
|
|
|
11
|
-
1.
|
|
12
|
-
2.
|
|
13
|
-
3.
|
|
14
|
-
4.
|
|
15
|
-
5.
|
|
11
|
+
1. 从 Speculo 工作区声明的 `path_base: project-root` 解析 `<project-root>`。若记录的 provider 为 `git`,要求 `workspace_ref` 精确为 `specdev-worktree/<work-item-id>`,拼接后仍位于 project root,且 `specdev-worktree/` 不是逃逸到外部的符号链接。
|
|
12
|
+
2. 读取调用方拥有的持久化记录:Ticket 使用 `<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>` 的 `worktrees`;原型使用 `<Path>{roots.state}/specdev/changes/{change}/prototypes/{prototype-id}/record.md</Path>`。若已有可恢复记录,Git provider 必须在 `git worktree list --porcelain` 中匹配固定路径、分支与 `base_sha`;native/external 由对应 provider 解析 opaque locator。一致则恢复,任一不一致停止。
|
|
13
|
+
3. 否则优先调用平台原生 worktree 能力。使用 native/external 时保存 provider 返回的可迁移 locator;不可用时进入 Git fallback。
|
|
14
|
+
4. Git fallback 前确认项目根 `.gitignore` 已包含 `specdev-worktree/` 或等价根模式。缺失时停止并提示重新运行当前版本 `speculo init`,不在本 Skill 内修改 `.gitignore`。
|
|
15
|
+
5. Git fallback 固定 `physical_path = <project-root>/specdev-worktree/<work-item-id>`、`workspace_ref = specdev-worktree/<work-item-id>`,从 `base_sha` 执行 `git worktree add -b <work-item-branch> <physical-path> <base-sha>`。已存在但未与同一记录和 Git 注册匹配的目标路径一律阻塞。
|
|
16
|
+
6. 分支使用 `speculo/<change>/<work-item-id>`;现有分支未能匹配记录时停止。
|
|
17
|
+
7. 安装项目所需依赖,运行最小基线检查。E2E 不属于 implementation owner 的创建基线。
|
|
18
|
+
8. Ticket 将记录写入 `worktrees`:
|
|
16
19
|
|
|
17
20
|
```json
|
|
18
21
|
{
|
|
19
22
|
"ticket_id": "T-01",
|
|
20
|
-
"owner": "<
|
|
21
|
-
"provider": "
|
|
23
|
+
"owner": "<implementation-owner>",
|
|
24
|
+
"provider": "git",
|
|
22
25
|
"base_sha": "<sha>",
|
|
23
26
|
"branch": "speculo/<change>/T-01",
|
|
24
|
-
"workspace_ref": "
|
|
27
|
+
"workspace_ref": "specdev-worktree/T-01",
|
|
25
28
|
"status": "active",
|
|
26
29
|
"updated_at": "<ISO-8601>"
|
|
27
30
|
}
|
|
28
31
|
```
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
native/external provider 将示例中的 provider 与 `workspace_ref` 换为对应可迁移 locator,不套用 Git 物理路径。原型不使用本 JSON 结构,只在 record 的 Run and Assets 中记录源码 branch/commit,并在 frontmatter 写入 `workspace_ref` 与清理状态。
|
|
34
|
+
|
|
35
|
+
完成条件:工作区可定位、基线可用、调用方记录与实际 provider、分支和 checkpoint 一致;Git provider 的引用与工作项 ID 完全一致。失败时在调用方拥有的记录中设为 `blocked` 并保留现场。
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 集成与清理工作项 Worktree
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 集成
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
仅生产 Ticket 进入本段;一次性原型不得合入生产分支。
|
|
6
|
+
|
|
7
|
+
1. workspace owner 确认记录为 `review`,读取 implementation owner 的 Evidence,实际修改未越过路径契约。
|
|
6
8
|
2. 在目标集成基线上应用变更并运行受影响的定向与回归验证。
|
|
7
|
-
3.
|
|
9
|
+
3. 仅当变更影响用户界面交互时,由当前集成 owner 运行验收所需的最小 E2E;委派执行中 implementation owner 只提供场景和预期结果,Lead 负责运行。
|
|
8
10
|
4. 验证通过后将记录更新为 `integrated`;冲突或失败时设为 `blocked` 并保留 worktree。
|
|
9
11
|
|
|
10
12
|
## 清理
|
|
11
13
|
|
|
12
14
|
1. 取得用户对删除 worktree 和分支的授权。
|
|
13
|
-
2.
|
|
14
|
-
3. 确认 worktree
|
|
15
|
+
2. Git provider 从 project root 解析 `specdev-worktree/<work-item-id>`,重验无路径逃逸且与 `git worktree list --porcelain` 的记录一致,再从主工作树移除;native/external 通过对应 provider 管理入口移除。
|
|
16
|
+
3. 确认 worktree 不再注册且工作项目录不存在后删除对应分支。Ticket 将状态更新为 `removed`;原型把 `cleanup_status` 更新为 `clean`。保留项目根 `specdev-worktree/` 统一目录及 `.gitignore` 条目。
|
|
15
17
|
|
|
16
18
|
PR 或暂缓集成时保留 worktree。清理失败时停止;仅在用户明确要求时使用强制删除。
|
|
@@ -1,43 +1,55 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: specdev-research
|
|
3
|
-
description:
|
|
3
|
+
description: 为调用 Work 的具体决定研究外部技术、依赖、标准或未知行为,逐声明返回一手来源、限制与不确定性,由调用方写入其拥有的工件。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SpecDev Research
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## 输入
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
- `decision`:研究要支持的一个具体决定;
|
|
11
|
+
- `questions`:需要回答的穷尽问题集;
|
|
12
|
+
- `stop_condition`:何时证据已足够;
|
|
13
|
+
- `caller`:D、G、S、W、R、T 或 I;
|
|
14
|
+
- `target_artifact`:调用方拥有且将接收结果的完整 Path。
|
|
15
|
+
|
|
16
|
+
缺少 owner 或 target 时返回阻塞,不创建 `{change}/research/` 等共享 namespace。
|
|
11
17
|
|
|
12
18
|
## 流程
|
|
13
19
|
|
|
14
|
-
1.
|
|
15
|
-
2.
|
|
16
|
-
3.
|
|
17
|
-
4.
|
|
18
|
-
5.
|
|
19
|
-
6.
|
|
20
|
-
7. 长期有效且经实现验证后才可由 Archive 提升到永久 research。
|
|
20
|
+
1. 固定问题、版本、环境和停止条件。
|
|
21
|
+
2. 优先官方文档、规范、源代码、论文或维护者材料;技术问题使用一手来源。
|
|
22
|
+
3. 核对发布日期、版本、适用环境、限制和已知冲突。
|
|
23
|
+
4. 对每个会改变决定的实质声明就近给出来源;关键结论交叉验证,来源冲突时并列呈现。
|
|
24
|
+
5. 区分来源事实、代码库事实、推断、建议和未知项。
|
|
25
|
+
6. 返回一个 Markdown block,由 caller 原子写入 `target_artifact`;本 Skill 不自行写 state。
|
|
21
26
|
|
|
22
|
-
##
|
|
27
|
+
## 输出
|
|
23
28
|
|
|
24
29
|
```markdown
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
30
|
+
## Research: <问题>
|
|
31
|
+
- Decision / target:
|
|
32
|
+
- Scope / version:
|
|
33
|
+
- Stop condition:
|
|
29
34
|
|
|
30
|
-
## Findings
|
|
31
35
|
### R-001
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
- Claim:
|
|
37
|
+
- Type: official fact / code fact / inference / recommendation
|
|
38
|
+
- Source:
|
|
39
|
+
- Confidence:
|
|
40
|
+
- Limits:
|
|
41
|
+
- Artifact impact:
|
|
42
|
+
|
|
43
|
+
### Conflicts and Unknowns
|
|
44
|
+
### Recommendation
|
|
41
45
|
```
|
|
42
46
|
|
|
43
|
-
|
|
47
|
+
不得长篇复制受版权保护内容。长期有效且经实现验证的结论只能由 Archive 从调用方工件提升到永久 research。
|
|
48
|
+
|
|
49
|
+
## 完成标准
|
|
50
|
+
|
|
51
|
+
- 每个输入问题有答案或明确未知;
|
|
52
|
+
- 每个实质声明就近引用一手来源;
|
|
53
|
+
- 版本、限制、冲突和置信度已记录;
|
|
54
|
+
- 结果有唯一 owning artifact;
|
|
55
|
+
- 本 Skill 没有创建自己的 state 路径。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: subagent-delivery
|
|
3
|
-
description:
|
|
3
|
+
description: 交付合同:只为用户已选择委派的 Goal Plan 生成可恢复的原生或外部网页 Agent 派单,并在 Implement 阶段核对基线、候选交付、修正和 Lead 验收。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SpecDev Subagent Delivery
|
|
@@ -10,12 +10,12 @@ description: 交付合同:为 Goal Plan 生成可恢复的 direct、原生或
|
|
|
10
10
|
## 输入
|
|
11
11
|
|
|
12
12
|
- `operation`:`plan` 或 `execute`;
|
|
13
|
-
- `execution_model`:`
|
|
13
|
+
- `execution_model`:`native-subagent` 或 `external-web-subagent`;
|
|
14
14
|
- Lead、Ticket、Goal Plan、Spec、适用 ADR/CONTEXT、Wave/Gate 和依赖 Evidence;
|
|
15
15
|
- 项目写、只读和 shared 路径,验证矩阵与当前源码基线;
|
|
16
16
|
- provider、会话或 workspace locator、源码交付方式,以及用户当前明确授权。
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
普通 Goal Plan 和缺失 Goal Plan 的 Ticket 直接由 `<Path>{roots.workflows}/specdev/I-implement/I-implement.md</Path>` 执行,不调用本 Skill。委派输入缺失时返回调用方补齐,不猜测 checkpoint、权限或验收结果。
|
|
19
19
|
|
|
20
20
|
## 流程
|
|
21
21
|
|
|
@@ -37,7 +37,6 @@ description: 交付合同:为 Goal Plan 生成可恢复的 direct、原生或
|
|
|
37
37
|
|
|
38
38
|
### 3. 加载执行分支
|
|
39
39
|
|
|
40
|
-
- `direct`:直接使用 Ticket、Goal Plan、`<Path>{roots.workflows}/specdev/I-implement/I-implement.md</Path>` 和 Evidence 合同,不加载 provider 规则;
|
|
41
40
|
- `native-subagent`:加载 `<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/references/native-subagent.md</Path>`,完成隔离派单、恢复和返回;
|
|
42
41
|
- `external-web-subagent`:加载 `<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/references/external-web-subagent.md</Path>`,完成能力探测、会话恢复、候选交付与修正。
|
|
43
42
|
|
|
@@ -58,4 +57,3 @@ description: 交付合同:为 Goal Plan 生成可恢复的 direct、原生或
|
|
|
58
57
|
恢复时读取 Goal Plan 的派单块、Ticket、最新 Evidence 和 change/worktree 状态,从最后已验证 checkpoint 继续,不重新决定已锁定事项。完成或阻塞后向调用方返回 Ticket 状态、Evidence 完整路径、workspace/session locator、checkpoint、commit/PR 引用、未验证项和待 Lead E2E。
|
|
59
58
|
|
|
60
59
|
**完成标准**:交付结束于 `review`、`done`、`blocked` 或 `deviated`;状态、Evidence、源码引用和恢复信息一致。
|
|
61
|
-
|
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> \
|
|
7
|
+
--stage <triage|diagnosis|grill|spec|tickets|goal-plan|implement|review|prototype|wayfinder|complete> \
|
|
7
8
|
<Path>{roots.state}/specdev/changes/{change}</Path>
|
|
8
9
|
```
|
|
9
10
|
|
|
11
|
+
`--stage` 只要求该阶段已经拥有的工件;所有已经存在的工件仍会验证。省略 stage 时验证当前存在的工件,不会因未来 Work 尚未运行而报错。
|
|
12
|
+
|
|
10
13
|
## 校验 SpecDev 工作流包
|
|
11
14
|
|
|
12
15
|
```bash
|