@namewta/speculo 0.4.0 → 0.6.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 +3 -4
- package/package.json +1 -1
- package/template/canonical/canonical-specdev-engineering-cognitive-mentor.md +5 -0
- package/template/canonical/canonical-specdev-goal-plan.md +366 -59
- package/template/canonical/canonical-specdev-grill-with-docs.md +153 -104
- package/template/canonical/canonical-specdev-spec.md +5 -0
- package/template/canonical/canonical-specdev-tickets.md +5 -0
- package/template/canonical/canonical-specdev-wayfinder.md +171 -249
- package/template/commands/docs-sync.md +3 -3
- package/template/skills/docs-sync/SKILL.md +4 -3
- package/template/skills/docs-sync/assets/report-template.md +1 -0
- package/template/skills/docs-sync/references/agents/agent-writing.md +75 -0
- package/template/skills/{agents-md-builder/references → docs-sync/references/agents}/claude-redirect.md +1 -1
- package/template/skills/docs-sync/references/agents-contract.md +23 -1
- package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +78 -73
- package/template/workflows/specdev/G-grill-with-docs/design-tree-template.json +9 -0
- package/template/workflows/specdev/G-grill-with-docs/grilling-protocol.md +16 -35
- package/template/workflows/specdev/G-grill-with-docs/log-format.md +2 -0
- package/template/workflows/specdev/I-implement/I-implement.md +12 -10
- package/template/workflows/specdev/I-implement/design-it-twice.md +45 -6
- package/template/workflows/specdev/I-implement/evidence-template.md +7 -0
- package/template/workflows/specdev/I-implement/execution-preflight.md +6 -0
- package/template/workflows/specdev/INDEX.md +11 -4
- package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +23 -10
- package/template/workflows/specdev/P-goal-plan/completion-control.md +20 -7
- package/template/workflows/specdev/P-goal-plan/goal-plan-template.md +55 -3
- package/template/workflows/specdev/P-goal-plan/orchestration-protocol.md +42 -38
- package/template/workflows/specdev/P-goal-plan/planning-modes.md +36 -2
- package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +67 -80
- package/template/workflows/specdev/R-review-architecture/architecture-report-contract.md +123 -0
- package/template/workflows/specdev/R-review-architecture/architecture-review-report-template.html +103 -55
- package/template/workflows/specdev/R-review-architecture/architecture-review-template.md +20 -29
- package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +76 -147
- package/template/workflows/specdev/W-wayfinder/investigation-ticket-template.md +8 -53
- package/template/workflows/specdev/W-wayfinder/local-tracker-contract.md +36 -0
- package/template/workflows/specdev/W-wayfinder/solution-comment-template.md +17 -0
- package/template/workflows/specdev/W-wayfinder/wayfinder-map-template.md +12 -65
- package/template/workflows/specdev/common/README.md +4 -0
- package/template/workflows/specdev/common/rules/artifact-contract.md +5 -0
- package/template/workflows/specdev/common/rules/codebase-design.md +148 -0
- package/template/workflows/specdev/common/schemas/design-tree.schema.json +35 -0
- package/template/workflows/specdev/common/schemas/wayfinder-ticket.schema.json +19 -0
- package/template/workflows/specdev/common/skills/subagent-delivery/SKILL.md +61 -0
- package/template/workflows/specdev/common/skills/subagent-delivery/references/external-web-subagent.md +32 -0
- package/template/workflows/specdev/common/skills/subagent-delivery/references/github-checkpoints.md +24 -0
- package/template/workflows/specdev/common/skills/subagent-delivery/references/native-subagent.md +35 -0
- package/template/workflows/specdev/common/skills/subagent-delivery/references/source-package.md +17 -0
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +226 -5
- package/template/skills/agents-md-builder/SKILL.md +0 -30
- package/template/workflows/specdev/I-implement/codebase-design-glossary.md +0 -12
- package/template/workflows/specdev/I-implement/deepening.md +0 -17
- /package/template/skills/{agents-md-builder/references → docs-sync/references/agents}/content-contract.md +0 -0
- /package/template/skills/{agents-md-builder/references → docs-sync/references/agents}/evidence-collection.md +0 -0
- /package/template/skills/{agents-md-builder/references → docs-sync/references/agents}/manifest-discovery.md +0 -0
- /package/template/skills/{agents-md-builder/references → docs-sync/references/agents}/role-classification.md +0 -0
- /package/template/skills/{agents-md-builder/references → docs-sync/references/agents}/templates/aggregator-AGENTS.md +0 -0
- /package/template/skills/{agents-md-builder/references → docs-sync/references/agents}/templates/capability-module-AGENTS.md +0 -0
- /package/template/skills/{agents-md-builder/references → docs-sync/references/agents}/templates/contract-module-AGENTS.md +0 -0
- /package/template/skills/{agents-md-builder/references → docs-sync/references/agents}/templates/repo-root-AGENTS.md +0 -0
- /package/template/skills/{agents-md-builder/references → docs-sync/references/agents}/templates/runnable-app-AGENTS.md +0 -0
- /package/template/skills/{agents-md-builder/references → docs-sync/references/agents}/templates/scripts-docs-AGENTS.md +0 -0
- /package/template/skills/{agents-md-builder/references → docs-sync/references/agents}/writing-style.md +0 -0
|
@@ -3,194 +3,123 @@ id: specdev/wayfinder
|
|
|
3
3
|
type: workflow-entry
|
|
4
4
|
workflow: specdev
|
|
5
5
|
name: 寻路
|
|
6
|
-
description:
|
|
7
|
-
keywords: [wayfinder, 寻路,
|
|
6
|
+
description: 为超出单次会话且路径尚不可见的工作建立本地共享地图,逐个解决 research、prototype、grilling 或 task Ticket,直到目的地路线决策完备。
|
|
7
|
+
keywords: [wayfinder, 寻路, shared-map, research, prototype, grilling, task, 战争迷雾, 前沿]
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# 寻路
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
一个模糊的想法出现了——太大而无法放入单个 Agent 会话,且从当前状态到**目的地**的路径尚不可见。寻路就是找到那条路,而非冲向目标。此 work 在 change state 中绘制一张**共享地图**,然后逐个处理其 Tickets,直到路径变得清晰。
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
目的地可能是一份待移交和迭代的 Spec、一个在规划开始前需锁定的决策,或一项经说明允许在地图中完成的变更。命名目的地是第一步,它塑造每个 Ticket。
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
- **以名称指代**:共享地图和每个调查 Ticket 都是有标题的实体。凡是人会读到的叙述,一律用**名称**指代(如“调查:登录态跨域刷新策略”),而不是裸编号(`INV-03`)或裸路径。ID 与路径作为链接附在名称里,不单独充当称呼。一屏 `INV-03、INV-04、INV-05` 无法阅读。
|
|
16
|
+
## 核心纪律
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
### 规划,而非执行
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
- 调查 Ticket 目录:`<Path>{roots.state}/specdev/changes/{change}/investigation/</Path>`
|
|
23
|
-
- 单个调查 Ticket:`<Path>{roots.state}/specdev/changes/{change}/investigation/{investigation-id}.md</Path>`
|
|
24
|
-
- 调查 Evidence:`<Path>{roots.state}/specdev/changes/{change}/investigation/evidence/</Path>`
|
|
25
|
-
- 全局领取状态:`<Path>{roots.state}/specdev/status.json</Path>` 中当前 change 的 `claimed_investigations`
|
|
20
|
+
Wayfinder 默认进行**规划**:每个 Ticket 解决一个决策,当地图完成时路径就清晰了——在某人动手之前没有任何剩余决定。想要直接动手通常说明已经到达地图边缘,是时候移交。只有地图“说明”明确覆盖此行为时,task 才能把解除阻塞的执行带入地图。
|
|
26
21
|
|
|
27
|
-
|
|
22
|
+
### 用名称引用
|
|
28
23
|
|
|
29
|
-
-
|
|
30
|
-
- `<Path>{roots.workflows}/specdev/W-wayfinder/wayfinder-map-template.md</Path>`
|
|
31
|
-
|
|
32
|
-
## 何时运行
|
|
33
|
-
|
|
34
|
-
- 路径未知,无法安全写出 Ready Spec 或 Ticket;
|
|
35
|
-
- 需要跨多个领域、技术栈或外部系统调查;
|
|
36
|
-
- 调查量超出单个上下文,适合并行研究;
|
|
37
|
-
- 存在多个相互依赖的高影响未知项;
|
|
38
|
-
- 需要在若干候选方案中先获得事实证据再做决定。
|
|
39
|
-
|
|
40
|
-
若问题只是一个可在当前上下文通过短暂只读探索回答的事实,不创建 Wayfinder Map。若在命名目标、绘制前沿后发现根本没有迷雾——所有决策都已清楚——则不需要地图,停下并直接告知用户下一步。
|
|
41
|
-
|
|
42
|
-
## 两种调用模式
|
|
43
|
-
|
|
44
|
-
Wayfinder 有两种入口,可分次进行:
|
|
45
|
-
|
|
46
|
-
- **绘制地图**:用户带来一个粗略想法。命名目标 → 广度优先勾勒前沿 → 建立共享地图(写好目标与笔记,已定决策留空,迷雾写入“尚未指定”)→ 创建当前可明确表述的调查 Ticket 并二次连边补齐阻塞关系 → 并行触发 research 型 AFK 调查 → 停止。绘制本身不解决任何未知项。
|
|
47
|
-
- **走完地图**:用户带来一张已存在的地图(可选带指定 Ticket)。加载低分辨率地图 → 选取并领取一个前沿 Ticket → 解决它 → 记录结论、释放领取、关闭 Ticket → 浮现新 Ticket、让已可表述的迷雾毕业、把越界工作移入范围之外。
|
|
48
|
-
|
|
49
|
-
## 流程
|
|
50
|
-
|
|
51
|
-
### 1. 命名目标与勾勒边界
|
|
52
|
-
|
|
53
|
-
命名目标是第一动作,它塑造每一个后续 Ticket。写明:
|
|
54
|
-
|
|
55
|
-
- **最终目标**:一到两行描述“终点长什么样”。
|
|
56
|
-
- **已知边界**:当前确定的前提、约束与不变量。
|
|
57
|
-
- **当前不能决定的事项**:以及“为什么这些未知项阻塞规划”。
|
|
58
|
-
|
|
59
|
-
高影响未知项按**调查目的**分为四类:
|
|
24
|
+
每张地图和每个 Ticket 都有一个名称。人类阅读的叙述和“已做出的决策”始终用名称引用;ID 和路径包裹在名称链接里,不以裸 `INV-01` 墙代替名称。
|
|
60
25
|
|
|
61
|
-
|
|
62
|
-
- **decision**:事实已足够,但需要用户或架构 owner 做取舍;
|
|
63
|
-
- **validation**:已有方案,需要实验验证关键可行性或风险;
|
|
64
|
-
- **mapping**:需要建立调用链、数据流、依赖图或影响面。
|
|
26
|
+
### 每会话一个 Ticket
|
|
65
27
|
|
|
66
|
-
|
|
28
|
+
无论绘制还是遍历,**每个会话绝不解决超过一个 Ticket**。绘制地图的会话不解决任何 Ticket;并行 research 的每个独立 Agent 也只负责一个 Ticket。
|
|
67
29
|
|
|
68
|
-
|
|
69
|
-
- **HITL**(human-in-the-loop):必须通过与用户的实时交流才能解决,代理不得替用户作答;典型是 decision,以及需要用户对原型或方案取舍反馈的 validation。
|
|
30
|
+
## 产物与适配
|
|
70
31
|
|
|
71
|
-
|
|
32
|
+
- 地图:`<Path>{roots.state}/specdev/changes/{change}/wayfinder-map.md</Path>`
|
|
33
|
+
- 子 Tickets:`<Path>{roots.state}/specdev/changes/{change}/investigation/</Path>`
|
|
34
|
+
- solution comments:`<Path>{roots.state}/specdev/changes/{change}/investigation/comments/</Path>`
|
|
35
|
+
- assignment registry:`<Path>{roots.state}/specdev/status.json</Path>` 的 `claimed_investigations`
|
|
72
36
|
|
|
73
|
-
|
|
37
|
+
每次绘制或遍历前加载 `<Path>{roots.workflows}/specdev/W-wayfinder/local-tracker-contract.md</Path>`。Ticket 和地图模板:
|
|
74
38
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
-
|
|
78
|
-
- **战争迷雾**:范围内、你已隐约感到会出现、但此刻还无法精确表述的决策。它们写入共享地图的“尚未指定”区,不切成 Ticket。
|
|
79
|
-
- **毕业判据**:能否**此刻精确陈述这个问题**(而非能否此刻回答它)。问题已经足够锐利就立 Ticket(即使仍被阻塞);还说不清就留在迷雾里。不要预先把迷雾切成 Ticket 大小的碎片。
|
|
80
|
-
|
|
81
|
-
每解决一个 Ticket 都会驱散前方迷雾,让新可表述的问题从“尚未指定”毕业为新 Ticket。
|
|
82
|
-
|
|
83
|
-
### 3. 建立共享地图
|
|
84
|
-
|
|
85
|
-
使用 `<Path>{roots.workflows}/specdev/W-wayfinder/wayfinder-map-template.md</Path>` 写入 `<Path>{roots.state}/specdev/changes/{change}/wayfinder-map.md</Path>`。地图是**索引而非仓库**:每个决策只在一处存放(对应调查 Ticket 或 Evidence),地图只给出一行摘要并链接到详情。地图包含:
|
|
86
|
-
|
|
87
|
-
- **目标**:终点,一到两行。
|
|
88
|
-
- **笔记**:领域、需参考的 skills、固定偏好,以及是否显式授权把执行纳入地图。
|
|
89
|
-
- **调查清单**:当前所有已表述 Ticket 的索引表(含 ID、类型、执行模式、问题、依赖、领取状态、结果指针),前沿由此表投影。
|
|
90
|
-
- **调查 DAG**:阻塞关系图,避免多个调查重复回答同一问题;标记可并行与必须串行的决策点。
|
|
91
|
-
- **已定决策**:每关闭一个 Ticket 追加一行结论,作为“实际走过的路线”索引。
|
|
92
|
-
- **尚未指定**:范围内、尚不可表述为 Ticket 的迷雾。
|
|
93
|
-
- **范围之外**:见第 4 节。
|
|
94
|
-
- **停止条件**:整体收敛判据,不以“所有可能问题都研究完”为目标。
|
|
95
|
-
|
|
96
|
-
每个 Ticket 只关闭一个高影响未知项。
|
|
97
|
-
|
|
98
|
-
### 4. 范围之外
|
|
99
|
-
|
|
100
|
-
迷雾只朝目标方向聚集,目标一旦确定就固定了范围,因此超出目标的工作是**范围之外**,不是迷雾。它单独成节,列出被有意识排除的工作,写清摘要与理由。
|
|
101
|
-
|
|
102
|
-
- 范围之外**永不毕业**回地图;只有在目标被重画时,作为新的 change 重新纳入。
|
|
103
|
-
- 当一个已存在的 Ticket 被发现落在目标之外时,关闭它并在“范围之外”留一行摘要与原因,**不写入“已定决策”**——已定决策只记录实际走过的路线。
|
|
104
|
-
|
|
105
|
-
### 5. 领取与并行
|
|
39
|
+
- `<Path>{roots.workflows}/specdev/W-wayfinder/investigation-ticket-template.md</Path>`
|
|
40
|
+
- `<Path>{roots.workflows}/specdev/W-wayfinder/wayfinder-map-template.md</Path>`
|
|
41
|
+
- `<Path>{roots.workflows}/specdev/W-wayfinder/solution-comment-template.md</Path>`
|
|
106
42
|
|
|
107
|
-
|
|
43
|
+
## Ticket 类型
|
|
108
44
|
|
|
109
|
-
|
|
110
|
-
- 已领取 → 跳过并选择其他前沿 Ticket;
|
|
111
|
-
- 超过配置的 claim 超时且无进展 → 允许在记录原因后回收;
|
|
112
|
-
- 完成或释放后从领取集合移除,并同步共享地图。
|
|
45
|
+
每个 Ticket 要么是 **HITL**,与一个代表自己发言的人类一起工作;要么是 **AFK**,由 Agent 独立驱动。HITL Ticket 只能通过实时交流解决,Agent 绝不代替人类一方发言。
|
|
113
46
|
|
|
114
|
-
|
|
47
|
+
- **Research(AFK)**:阅读文档、第三方 API 或知识库等资源,揭示某个决策等待的事实。调用 `<Path>{roots.workflows}/specdev/common/skills/research/SKILL.md</Path>`。当需要当前工作目录之外的知识时使用。
|
|
48
|
+
- **Prototype(HITL)**:制作廉价、粗糙、具体的产物提高讨论保真度——大纲、粗略尝试、桩代码或 UI/逻辑原型。将原型链接为资产;当“它应是什么样”或“怎样表现”是关键问题时使用。
|
|
49
|
+
- **Grilling(HITL)**:对话。调用 `<Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path>` 的 grilling 与 domain-modeling 能力,但本会话只关闭当前 Wayfinder Ticket。
|
|
50
|
+
- **Task(HITL 或 AFK)**:在决策做出前必须完成的手动工作。它通过为决策解除阻塞赢得位置,不以交付目的地为目标。Agent 能独立驱动时使用 AFK,否则给人类精确清单。
|
|
115
51
|
|
|
116
|
-
|
|
117
|
-
- **decision 及其他 HITL 型 Ticket,单个会话一次只解决一个**。这类 Ticket 会实质改变方案走向、开启新的迷雾,逐个解决才能让地图稳定地生长;一次塞多个决策会污染前沿。因此除 research 型外,**同一会话不要在一轮里解决多个 HITL 型 Ticket**。
|
|
118
|
-
- 用户可能在其他会话并行推进未阻塞的 Ticket,要预期对地图和领取状态的并发编辑,写回前先重读。
|
|
52
|
+
Ticket label 只能是 `wayfinder:research | wayfinder:prototype | wayfinder:grilling | wayfinder:task`。
|
|
119
53
|
|
|
120
|
-
|
|
54
|
+
## 战争迷雾与范围
|
|
121
55
|
|
|
122
|
-
|
|
56
|
+
地图刻意不完整:不要绘制还看不到的内容。活跃 Tickets 之外是**战争迷雾**——能感觉即将到来、但依赖尚未解决问题而无法精确陈述的决策和调查。
|
|
123
57
|
|
|
124
|
-
|
|
125
|
-
- 文档、规范和官方来源研究;
|
|
126
|
-
- 可撤销的临时实验、最小原型或插桩(原型用于让用户对“看起来/表现如何”作出反应,是手段不是最终架构);
|
|
127
|
-
- 性能测量、调用点扫描、schema 对比或兼容性验证。
|
|
58
|
+
**迷雾还是 Ticket?** 判断标准是现在能否精确陈述问题,而非现在能否回答:
|
|
128
59
|
|
|
129
|
-
|
|
60
|
+
- 问题已经清晰时做成 Ticket,即使仍被阻塞;
|
|
61
|
+
- 还无法精确表述时留在“尚未明确”,不预先切成 Ticket 大小碎片。
|
|
130
62
|
|
|
131
|
-
|
|
63
|
+
目的地固定范围。目标之外的工作进入**超出范围**,不是战争迷雾。范围之外永不升级;只有重新命名目的地并创建新 change 时才重新考虑。越界 Ticket 关闭为 `out-of-scope`,链接进“超出范围”,不进入“已做出的决策”。
|
|
132
64
|
|
|
133
|
-
|
|
134
|
-
- 提交未经审查的实验代码;
|
|
135
|
-
- 将原型视为最终架构;
|
|
136
|
-
- 在没有证据时把建议写成事实;
|
|
137
|
-
- 代 HITL 型 Ticket 的用户作答;
|
|
138
|
-
- 无停止条件地持续研究。
|
|
65
|
+
## 调用模式
|
|
139
66
|
|
|
140
|
-
###
|
|
67
|
+
### 绘制地图
|
|
141
68
|
|
|
142
|
-
|
|
69
|
+
用户带着模糊想法调用:
|
|
143
70
|
|
|
144
|
-
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
71
|
+
1. **命名目的地。** 运行一轮 G 的 grilling/domain-modeling,确定正在寻路的 Spec、决策或变更。
|
|
72
|
+
2. **绘制前沿。** 再次质询,这次广度优先,在整个空间展开而非深入一条线索。如果没有浮现任何迷雾,停下并询问用户如何继续,不创建地图。
|
|
73
|
+
3. **创建地图。** 使用模板填写目的地和说明;“已做出的决策”为空,迷雾写入“尚未明确”。
|
|
74
|
+
4. **创建现在可明确的 Tickets。** 先创建全部 Ticket,再第二遍连接 `blocked_by`,因为 ID 必须先存在。
|
|
75
|
+
5. **派出 research Agent。** 每个 research Ticket 使用独立上下文和 claim,各自只解决一个 Ticket;需要 Git 分支时先取得对应授权。
|
|
76
|
+
6. 停止。绘制地图是一个会话的工作,它不亲手解决任何 Ticket。
|
|
150
77
|
|
|
151
|
-
|
|
78
|
+
**完成标准**:目的地、地图、当前可表述 Tickets、阻塞边和战争迷雾已持久化;绘图会话没有关闭 Ticket。
|
|
152
79
|
|
|
153
|
-
|
|
154
|
-
- `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`;
|
|
155
|
-
- `<Path>{roots.state}/specdev/changes/{change}/ticket/{ticket-file}.md</Path>`;
|
|
156
|
-
- `<Path>{roots.state}/specdev/changes/{change}/diagnosis.md</Path>`。
|
|
80
|
+
### 遍历地图
|
|
157
81
|
|
|
158
|
-
|
|
82
|
+
用户带来地图,可选指定 Ticket:
|
|
159
83
|
|
|
160
|
-
1.
|
|
161
|
-
2.
|
|
162
|
-
3.
|
|
163
|
-
4.
|
|
84
|
+
1. 加载地图的低分辨率视图,不加载每个 Ticket 正文。
|
|
85
|
+
2. 用户指定 Ticket 时使用它;否则按本地 tracker contract 查询并选择第一个 frontier Ticket。
|
|
86
|
+
3. 在任何工作前领取 Ticket。已领取时跳过并选择其他 frontier。
|
|
87
|
+
4. 按需缩放:只读取当前 Ticket、相关或已关闭 Ticket 的详情,以及“说明”指定的能力。
|
|
88
|
+
5. 解决当前唯一 Ticket,使用下一个未占用编号写 solution comment,原子关闭 Ticket 并释放 claim。
|
|
89
|
+
6. 在地图“已做出的决策”追加名称链接和一句概括;越界则写入“超出范围”。
|
|
90
|
+
7. 创建新浮现的 Tickets,第二遍连接阻塞;从“尚未明确”删除每个已升级补丁;更新或关闭被答案判定无效的 Tickets。
|
|
164
91
|
|
|
165
|
-
|
|
92
|
+
写回前重读地图、Ticket 与 claims,预期其他会话并发编辑。
|
|
166
93
|
|
|
167
|
-
|
|
94
|
+
**完成标准**:本会话只关闭一个 Ticket;Ticket、solution comment、claim、地图和新 frontier 一致。
|
|
168
95
|
|
|
169
|
-
|
|
96
|
+
## 收敛与路由
|
|
170
97
|
|
|
171
|
-
|
|
172
|
-
- 外部行为已清楚 → `<Path>{roots.workflows}/specdev/S-spec/S-spec.md</Path>`;
|
|
173
|
-
- Spec 已 Ready 且只是实现拆分未知 → `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`;
|
|
174
|
-
- Bug 根因路径已收敛 → `<Path>{roots.workflows}/specdev/D-diagnose-bugs/D-diagnose-bugs.md</Path>`;
|
|
175
|
-
- 仍存在高影响未知项 → 保持 blocked,并明确下一调查或用户决策。
|
|
98
|
+
当前沿为空且“尚未明确”不再包含阻塞目的地的内容时,路径清晰:
|
|
176
99
|
|
|
177
|
-
|
|
100
|
+
- 需要产品或架构取舍:`<Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path>`;
|
|
101
|
+
- 外部行为已清楚:`<Path>{roots.workflows}/specdev/S-spec/S-spec.md</Path>`;
|
|
102
|
+
- Spec Ready、只需拆分:`<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`;
|
|
103
|
+
- Bug 根因路线收敛:`<Path>{roots.workflows}/specdev/D-diagnose-bugs/D-diagnose-bugs.md</Path>`;
|
|
104
|
+
- 仍有高影响未知项:保持 active/blocked 并返回下一 frontier Ticket 名称。
|
|
178
105
|
|
|
179
106
|
## 完成标准
|
|
180
107
|
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
189
|
-
-
|
|
190
|
-
-
|
|
191
|
-
- 已明确下一 work 或阻塞决策。
|
|
108
|
+
- 目的地塑造每个 Ticket 并固定范围;
|
|
109
|
+
- 地图是低分辨率索引,不列开放 Tickets,不复制答案详情;
|
|
110
|
+
- 四类 Ticket 与 HITL/AFK 语义正确;
|
|
111
|
+
- frontier 由 open、unblocked、unclaimed 事实查询;
|
|
112
|
+
- 名称用于人类叙述,裸 ID 只作内部标识;
|
|
113
|
+
- 战争迷雾、Ticket 与超出范围按可精确表述性和范围区分;
|
|
114
|
+
- 每会话最多解决一个 Ticket,HITL 用户没有被 Agent 代答;
|
|
115
|
+
- 每个关闭 Ticket 有 solution comment,资产通过链接引用;
|
|
116
|
+
- claim、阻塞、地图与 Ticket 状态一致;
|
|
117
|
+
- 路径清晰时返回下一 work,不把产品实现藏进寻路。
|
|
192
118
|
|
|
193
119
|
## 子文件引用
|
|
194
120
|
|
|
195
|
-
-
|
|
196
|
-
-
|
|
121
|
+
- 本地 Tracker:`<Path>{roots.workflows}/specdev/W-wayfinder/local-tracker-contract.md</Path>`
|
|
122
|
+
- Ticket 模板:`<Path>{roots.workflows}/specdev/W-wayfinder/investigation-ticket-template.md</Path>`
|
|
123
|
+
- Solution comment:`<Path>{roots.workflows}/specdev/W-wayfinder/solution-comment-template.md</Path>`
|
|
124
|
+
- 地图模板:`<Path>{roots.workflows}/specdev/W-wayfinder/wayfinder-map-template.md</Path>`
|
|
125
|
+
- Ticket schema:`<Path>{roots.workflows}/specdev/common/schemas/wayfinder-ticket.schema.json</Path>`
|
|
@@ -1,61 +1,16 @@
|
|
|
1
1
|
---
|
|
2
|
-
artifact:
|
|
2
|
+
artifact: wayfinder-ticket
|
|
3
3
|
id: INV-01
|
|
4
|
-
name:
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
name: <精确问题名称>
|
|
5
|
+
parent_map: <Path>{roots.state}/specdev/changes/{change}/wayfinder-map.md</Path>
|
|
6
|
+
label: wayfinder:grilling
|
|
7
7
|
status: open
|
|
8
8
|
blocked_by: []
|
|
9
|
-
|
|
10
|
-
claimed_by: null
|
|
11
|
-
claimed_at: null
|
|
9
|
+
resolution: null
|
|
12
10
|
---
|
|
13
11
|
|
|
14
|
-
#
|
|
12
|
+
# <精确问题名称>
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
## 问题
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
- **共享地图:** `<Path>{roots.state}/specdev/changes/{change}/wayfinder-map.md</Path>`
|
|
20
|
-
- **Evidence:** `<Path>{roots.state}/specdev/changes/{change}/investigation/evidence/INV-01.md</Path>`
|
|
21
|
-
|
|
22
|
-
## 0. 分类
|
|
23
|
-
|
|
24
|
-
- **Type:** research / decision / validation / mapping
|
|
25
|
-
- **模式:** AFK(子代理独立完成)/ HITL(须与用户实时交流,代理不代答)
|
|
26
|
-
|
|
27
|
-
## 1. 决策用途
|
|
28
|
-
|
|
29
|
-
- 要回答或决定什么(一个精确问题):
|
|
30
|
-
- 为什么阻塞规划:
|
|
31
|
-
- 结果由哪个工件消费:
|
|
32
|
-
|
|
33
|
-
## 2. 已知事实与假设
|
|
34
|
-
|
|
35
|
-
### 已知事实
|
|
36
|
-
|
|
37
|
-
### 待验证假设
|
|
38
|
-
|
|
39
|
-
## 3. 调查契约
|
|
40
|
-
|
|
41
|
-
- **允许的代码探索:** `<Path>project/relative/path/**</Path>`
|
|
42
|
-
- **允许的实验 / 原型:**(原型仅供用户反应,不作最终架构)
|
|
43
|
-
- **禁止的产品实现:**
|
|
44
|
-
- **来源优先级:**
|
|
45
|
-
- **停止条件:**
|
|
46
|
-
- **时间或资源边界:**
|
|
47
|
-
|
|
48
|
-
## 4. 结果
|
|
49
|
-
|
|
50
|
-
- **状态:** confirmed / disproved / decision-needed / unresolved / superseded / cancelled
|
|
51
|
-
- **结论:**
|
|
52
|
-
- **证据:**
|
|
53
|
-
- **置信度:** high / medium / low
|
|
54
|
-
- **适用范围与版本:**
|
|
55
|
-
- **反例或限制:**
|
|
56
|
-
- **对 Spec 的影响:** 无 / `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`
|
|
57
|
-
- **对 ADR 的影响:** 无 / `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`
|
|
58
|
-
- **对 Ticket 的影响:** 无 / `<Path>{roots.state}/specdev/changes/{change}/ticket/{ticket-file}.md</Path>`
|
|
59
|
-
- **浮现的新迷雾 / 新 Ticket:**
|
|
60
|
-
- **是否越界(移入范围之外):** 否 / 是(理由:)
|
|
61
|
-
- **下一步:**
|
|
16
|
+
<此 Ticket 要解决的一个决策、调查或解除阻塞工作。>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Wayfinder 本地 Tracker 适配
|
|
2
|
+
|
|
3
|
+
最新版 Wayfinder 以 issue tracker 为物理载体。SpecDev 的默认 tracker 是 change state 内的本地 Markdown/JSON;本文件只映射物理原语,不改写 Wayfinder 的地图、Ticket、战争迷雾或遍历语义。
|
|
4
|
+
|
|
5
|
+
| Tracker 原语 | 本地实现 |
|
|
6
|
+
|---|---|
|
|
7
|
+
| 地图 issue | `<Path>{roots.state}/specdev/changes/{change}/wayfinder-map.md</Path>` |
|
|
8
|
+
| 子 issue | `<Path>{roots.state}/specdev/changes/{change}/investigation/{investigation-id}.md</Path>` |
|
|
9
|
+
| label | Ticket frontmatter 的 `wayfinder:research|prototype|grilling|task` |
|
|
10
|
+
| 阻塞关系 | Ticket frontmatter 的 `blocked_by` |
|
|
11
|
+
| assignment | `<Path>{roots.state}/specdev/status.json</Path>` 当前 change 的 `claimed_investigations` |
|
|
12
|
+
| solution comment | `<Path>{roots.state}/specdev/changes/{change}/investigation/comments/{investigation-id}/NN-solution.md</Path>` |
|
|
13
|
+
| 关闭 issue | Ticket frontmatter 的 `status: closed` 与 `resolution` |
|
|
14
|
+
|
|
15
|
+
## 查询前沿
|
|
16
|
+
|
|
17
|
+
扫描当前地图的全部子 Ticket。一个 Ticket 同时满足以下条件时属于**前沿**:
|
|
18
|
+
|
|
19
|
+
1. `status: open`;
|
|
20
|
+
2. `blocked_by` 中的每个 Ticket 都是 `status: closed`;
|
|
21
|
+
3. `claimed_investigations` 中没有相同 `id`。
|
|
22
|
+
|
|
23
|
+
按文件名中的数字 ID 升序返回。地图正文不缓存开放 Ticket 列表;每次选择前沿都从 Ticket 与 claim 事实重新查询。
|
|
24
|
+
|
|
25
|
+
## 原子领取
|
|
26
|
+
|
|
27
|
+
开始任何工作前,重读全局状态并原子写入 `id`、`owner`、可选 `session` 和 `claimed_at`。已领取则选择下一前沿 Ticket。写回结果前再次重读;完成、释放或取消时删除 claim。
|
|
28
|
+
|
|
29
|
+
Ticket 文件不重复保存 assignee,地图不重复保存 claim。全局 assignment registry 是领取的单一事实源。
|
|
30
|
+
|
|
31
|
+
## 解决方案评论
|
|
32
|
+
|
|
33
|
+
Ticket 正文只保存问题。答案写入下一个未占用的 solution comment 文件,资产从评论链接,不粘贴进 Ticket。关闭 Ticket 后,地图的“已做出的决策”只追加名称链接和一句概括;`out-of-scope` 不进入决策索引。
|
|
34
|
+
|
|
35
|
+
**完成标准**:地图、Ticket、claim、阻塞和 solution comment 可以重建相同前沿;同一事实没有第二份可写副本。
|
|
36
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
artifact: wayfinder-solution-comment
|
|
3
|
+
ticket: INV-01
|
|
4
|
+
sequence: 1
|
|
5
|
+
resolution: answered
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Solution: <Ticket 名称>
|
|
9
|
+
|
|
10
|
+
- **Ticket:** `<Path>{roots.state}/specdev/changes/{change}/investigation/INV-01.md</Path>`
|
|
11
|
+
- **答案:** <此 Ticket 关闭的决定或已完成的解除阻塞工作>
|
|
12
|
+
- **事实与来源:**
|
|
13
|
+
- **资产:** 无 / `<Path>project/relative/path</Path>` / `<Url>https://example.com</Url>`
|
|
14
|
+
- **后续 Ticket 所依赖的事实:** 无 / ...
|
|
15
|
+
- **新浮现的 Tickets:** 无 / <按名称列出>
|
|
16
|
+
- **升级的战争迷雾:** 无 / ...
|
|
17
|
+
- **对现有 Tickets 的影响:** 无 / update / close / supersede
|
|
@@ -4,79 +4,26 @@ change: <YYYY-MM-DD-topic>
|
|
|
4
4
|
status: active
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Wayfinder Map:
|
|
7
|
+
# Wayfinder Map: <地图名称>
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## 目的地
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
- **调查目录:** `<Path>{roots.state}/specdev/changes/{change}/investigation/</Path>`
|
|
13
|
-
- **领取状态:** `<Path>{roots.state}/specdev/status.json</Path>`
|
|
11
|
+
<到达此地图终点时的样子——此工作正在寻路的 spec、决策或变更。一到两行;每个会话在挑选 Ticket 之前以其为定位。>
|
|
14
12
|
|
|
15
|
-
##
|
|
13
|
+
## 说明
|
|
16
14
|
|
|
17
|
-
|
|
15
|
+
<领域;每个会话应咨询的 skills;此工作的常设偏好;是否明确把执行带入地图。>
|
|
18
16
|
|
|
19
|
-
##
|
|
17
|
+
## 已做出的决策
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
- **需参考的 skills:**
|
|
23
|
-
- **固定偏好 / 约束:**
|
|
24
|
-
- **执行授权:** 默认只产出决策不产出交付物;如需把执行纳入地图,在此显式写明。
|
|
19
|
+
<!-- 索引——每个已关闭 Ticket 一行:足以判断相关性,然后放大链接查看 solution comment 持有的详细信息。开放 Tickets 通过本地 tracker 查询,不列在这里。 -->
|
|
25
20
|
|
|
26
|
-
|
|
21
|
+
- **<已关闭 Ticket 标题>:** `<Path>{roots.state}/specdev/changes/{change}/investigation/comments/INV-01/01-solution.md</Path>` —— <答案的一句话概括>
|
|
27
22
|
|
|
28
|
-
|
|
23
|
+
## 尚未明确
|
|
29
24
|
|
|
30
|
-
|
|
31
|
-
|---|---|---|---|---|---|---|---|---|
|
|
32
|
-
| 示例:登录态跨域刷新策略 | INV-01 | research | AFK | ... | — | unassigned | open | `<Path>{roots.state}/specdev/changes/{change}/investigation/INV-01-<name>.md</Path>` |
|
|
25
|
+
<!-- 范围内但尚无法精确表述为 Ticket 的战争迷雾;随着前沿推进而升级。 -->
|
|
33
26
|
|
|
34
|
-
|
|
35
|
-
- 模式:AFK(子代理独立完成,典型 research/mapping)/ HITL(须与用户实时交流,代理不代答,典型 decision)。
|
|
27
|
+
## 超出范围
|
|
36
28
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
```text
|
|
40
|
-
INV-01
|
|
41
|
-
├─→ INV-02
|
|
42
|
-
└─→ INV-03
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
- 标记可并行调查与必须串行的决策点,避免多个调查重复回答同一问题。
|
|
46
|
-
|
|
47
|
-
## 5. 并行与领取规则
|
|
48
|
-
|
|
49
|
-
- 最大并发来自 `<Path>{roots.state}/specdev/config.json</Path>`。
|
|
50
|
-
- 当前领取集合以 `<Path>{roots.state}/specdev/status.json</Path>` 为权威。
|
|
51
|
-
- 同一调查 Ticket 只能有一个 owner/session。
|
|
52
|
-
- **research / AFK 型可并行领取**;**decision 及其他 HITL 型,单会话一次只解决一个**(research 除外),逐个解决让地图稳定生长。
|
|
53
|
-
- 共享地图是状态投影,领取变更后必须同步;写回前先重读,预期并发编辑。
|
|
54
|
-
|
|
55
|
-
## 6. 已定决策(实际走过的路线)
|
|
56
|
-
|
|
57
|
-
> 每关闭一个 Ticket 追加一行结论索引。越界工作不写这里,移入“范围之外”。
|
|
58
|
-
|
|
59
|
-
| 名称 | 结论(一行) | 置信度 | 消费工件 | 详情指针 |
|
|
60
|
-
|---|---|---|---|---|
|
|
61
|
-
|
|
62
|
-
## 7. 尚未指定(战争迷雾)
|
|
63
|
-
|
|
64
|
-
> 范围内、已隐约感到会出现、但此刻还无法**精确表述**的决策。看得清就毕业成第 3 节的 Ticket,看不清就留在这里。不要预先切成 Ticket 大小的碎片。
|
|
65
|
-
|
|
66
|
-
- ...
|
|
67
|
-
|
|
68
|
-
## 8. 范围之外
|
|
69
|
-
|
|
70
|
-
> 超出目标的工作。永不毕业回地图;目标被重画时作为新 change 处理。已存在 Ticket 若被发现越界,关闭后在此留一行摘要与理由。
|
|
71
|
-
|
|
72
|
-
| 被排除的工作 | 理由 |
|
|
73
|
-
|---|---|
|
|
74
|
-
|
|
75
|
-
## 9. 停止条件
|
|
76
|
-
|
|
77
|
-
- [ ] 目标已命名,并塑造了地图上的每个 Ticket。
|
|
78
|
-
- [ ] 所有高影响未知项已 confirmed、disproved,或明确转为用户/owner 决策。
|
|
79
|
-
- [ ] 战争迷雾中不再有阻塞目标、且已可精确表述却未立 Ticket 的问题。
|
|
80
|
-
- [ ] 可以形成 Ready Spec、Ticket、诊断契约或架构决策。
|
|
81
|
-
- [ ] 没有把产品实现留在调查 Ticket 中。
|
|
82
|
-
- [ ] 所有 claim 已释放或转为明确 blocked。
|
|
29
|
+
<!-- 被裁定在目的地之外的工作;已关闭,永不升级。 -->
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
- 偏差控制:`<Path>{roots.workflows}/specdev/common/rules/deviation-control.md</Path>`
|
|
20
20
|
- 路径引用:`<Path>{roots.workflows}/specdev/common/rules/path-reference-contract.md</Path>`
|
|
21
21
|
- 代码注释:`<Path>{roots.workflows}/specdev/common/rules/code-commenting-rule.md</Path>`
|
|
22
|
+
- 代码库设计:`<Path>{roots.workflows}/specdev/common/rules/codebase-design.md</Path>`
|
|
22
23
|
|
|
23
24
|
## 结构化工件 Schema
|
|
24
25
|
|
|
@@ -29,6 +30,8 @@
|
|
|
29
30
|
- Ticket:`<Path>{roots.workflows}/specdev/common/schemas/ticket.schema.json</Path>`
|
|
30
31
|
- Tickets Map:`<Path>{roots.workflows}/specdev/common/schemas/tickets-map.schema.json</Path>`
|
|
31
32
|
- Goal Plan:`<Path>{roots.workflows}/specdev/common/schemas/goal-plan.schema.json</Path>`
|
|
33
|
+
- 设计树:`<Path>{roots.workflows}/specdev/common/schemas/design-tree.schema.json</Path>`
|
|
34
|
+
- Wayfinder Ticket:`<Path>{roots.workflows}/specdev/common/schemas/wayfinder-ticket.schema.json</Path>`
|
|
32
35
|
|
|
33
36
|
## 工具与 Skill
|
|
34
37
|
|
|
@@ -36,6 +39,7 @@
|
|
|
36
39
|
- 校验器说明:`<Path>{roots.workflows}/specdev/common/tools/README.md</Path>`
|
|
37
40
|
- 外部技术研究 Skill:`<Path>{roots.workflows}/specdev/common/skills/research/SKILL.md</Path>`
|
|
38
41
|
- 并行 Ticket worktree Skill:`<Path>{roots.workflows}/specdev/common/skills/dev-worktree/SKILL.md</Path>`
|
|
42
|
+
- Agent 交付合同 Skill:`<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/SKILL.md</Path>`
|
|
39
43
|
|
|
40
44
|
## 加载原则
|
|
41
45
|
|
|
@@ -9,6 +9,7 @@ SpecDev 通过分层工件避免同一决策被多个模型反复重做。每个
|
|
|
9
9
|
| 分诊 | `<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>` | 请求类别、影响、风险、缺失输入和下一 work | 详细实现方案 |
|
|
10
10
|
| 诊断 | `<Path>{roots.state}/specdev/changes/{change}/diagnosis.md</Path>` | 复现、证据、根因、修复不变量和回归契约 | 未经验证的修复实现 |
|
|
11
11
|
| 设计日志 | `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>` | 讨论轨迹、确认、延后、替代与废弃结论 | 当前架构权威摘要 |
|
|
12
|
+
| 设计树 | `<Path>{roots.state}/specdev/changes/{change}/design-tree.json</Path>` | 决策节点、依赖、当前 frontier、轮次与共识状态 | 领域真相或架构决定正文 |
|
|
12
13
|
| 领域上下文 | `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>` | 当前领域术语、语义和稳定不变量 | 临时会议记录 |
|
|
13
14
|
| 架构决策 | `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` | 已接受架构决策、原因、后果和替代关系 | 尚未决定的方案集合 |
|
|
14
15
|
| Spec | `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>` | 用户问题、外部行为、范围、验收合同、非功能要求和已锁定实现约束 | 文件级施工步骤 |
|
|
@@ -16,6 +17,10 @@ SpecDev 通过分层工件避免同一决策被多个模型反复重做。每个
|
|
|
16
17
|
| Tickets Map | `<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>` | 依赖 DAG、合同覆盖、Ready 投影、并行候选和路径冲突 | 单 Ticket 的完整实现契约 |
|
|
17
18
|
| Goal Plan | `<Path>{roots.state}/specdev/changes/{change}/goal-plan.md</Path>` | 跨 Ticket 调度、Gate、共享所有权、迁移顺序、集成和偏差治理 | 复制 Ticket 全文 |
|
|
18
19
|
| Evidence | `<Path>{roots.state}/specdev/changes/{change}/evidence/{ticket-id}.md</Path>` | 实际修改、命令、结果、验收映射、偏差、风险和提交引用 | 新的产品或架构决策 |
|
|
20
|
+
| Wayfinder 地图 | `<Path>{roots.state}/specdev/changes/{change}/wayfinder-map.md</Path>` | 目的地、说明、已关闭决策索引、战争迷雾和范围之外 | 开放 Ticket 正文或答案详情 |
|
|
21
|
+
| Wayfinder Ticket | `<Path>{roots.state}/specdev/changes/{change}/investigation/{investigation-id}.md</Path>` | 一个可精确陈述的问题、类型、阻塞和关闭状态 | 解决方案评论或交付目标 |
|
|
22
|
+
| Wayfinder solution comment | `<Path>{roots.state}/specdev/changes/{change}/investigation/comments/{investigation-id}/NN-solution.md</Path>` | Ticket 的答案、结果事实和资产指针 | 地图索引或产品实现 |
|
|
23
|
+
| 架构审查 | `<Path>{roots.state}/specdev/changes/{change}/architecture-review.md</Path>` 与 `<Path>{roots.state}/specdev/changes/{change}/architecture-review.html</Path>` | 深化候选、证据、可视化、选择和访谈状态 | 未经用户选择的执行契约 |
|
|
19
24
|
|
|
20
25
|
## 2. 权威顺序
|
|
21
26
|
|