@namewta/speculo 1.0.2 → 1.0.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.
Files changed (77) hide show
  1. package/README.md +6 -2
  2. package/package.json +2 -2
  3. package/template/AGENTS.md +3 -1
  4. package/template/canonical/canonical-specdev-goal-plan.md +757 -225
  5. package/template/canonical/canonical-specdev-grill-with-docs.md +221 -133
  6. package/template/canonical/canonical-specdev-spec.md +73 -3
  7. package/template/canonical/canonical-specdev-tickets.md +681 -252
  8. package/template/canonical/canonical-specdev-wayfinder.md +330 -113
  9. package/template/commands/git-repository-audit.md +3 -602
  10. package/template/commands/references/git-repository-audit-procedure.md +608 -0
  11. package/template/skills/writing-great-skills/SKILL.md +2 -0
  12. package/template/skills/writing-great-skills/references/document-contract.md +23 -0
  13. package/template/workflows/learning/common/rules/activation-and-memory.md +7 -3
  14. package/template/workflows/ops/common/rules/activation-and-memory.md +7 -3
  15. package/template/workflows/person/common/rules/activation-and-memory.md +7 -3
  16. package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +13 -136
  17. package/template/workflows/specdev/G-grill-with-docs/references/interview-procedure.md +134 -0
  18. package/template/workflows/specdev/I-implement/I-implement.md +15 -189
  19. package/template/workflows/specdev/I-implement/evidence-template.md +12 -0
  20. package/template/workflows/specdev/I-implement/execution-preflight.md +1 -1
  21. package/template/workflows/specdev/I-implement/references/implementation-procedure.md +192 -0
  22. package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +28 -143
  23. package/template/workflows/specdev/P-goal-plan/completion-control.md +1 -1
  24. package/template/workflows/specdev/P-goal-plan/references/goal-lifecycle.md +35 -0
  25. package/template/workflows/specdev/P-goal-plan/references/goal-tickets-map-template.md +15 -0
  26. package/template/workflows/specdev/P-goal-plan/references/map-control.md +28 -0
  27. package/template/workflows/specdev/{O-orchestrate-implementation/O-orchestrate-implementation.md → P-goal-plan/references/multi-change-plan.md} +21 -33
  28. package/template/workflows/specdev/P-goal-plan/references/replan-and-recovery.md +21 -0
  29. package/template/workflows/specdev/P-goal-plan/references/single-change-plan.md +149 -0
  30. package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +48 -53
  31. package/template/workflows/specdev/R-review-architecture/architecture-review-template.md +19 -10
  32. package/template/workflows/specdev/R-review-architecture/proposal-to-ticket.md +3 -1
  33. package/template/workflows/specdev/R-review-architecture/review-rubric.md +52 -0
  34. package/template/workflows/specdev/README.md +36 -216
  35. package/template/workflows/specdev/T-tickets/T-tickets.md +19 -230
  36. package/template/workflows/specdev/T-tickets/references/planning-procedure.md +233 -0
  37. package/template/workflows/specdev/T-tickets/ticket-template.md +16 -0
  38. package/template/workflows/specdev/T-tickets/tickets-map-template.md +14 -0
  39. package/template/workflows/specdev/T-triage/T-triage.md +3 -1
  40. package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +24 -118
  41. package/template/workflows/specdev/W-wayfinder/references/initiative-discovery.md +29 -0
  42. package/template/workflows/specdev/W-wayfinder/references/initiative-template.json +8 -0
  43. package/template/workflows/specdev/W-wayfinder/references/map-traversal.md +120 -0
  44. package/template/workflows/specdev/W-wayfinder/wayfinder-map-template.md +4 -0
  45. package/template/workflows/specdev/common/README.md +1 -1
  46. package/template/workflows/specdev/common/rules/activation-and-memory.md +7 -3
  47. package/template/workflows/specdev/common/rules/artifact-contract.md +10 -2
  48. package/template/workflows/specdev/common/rules/operating-governance.md +38 -0
  49. package/template/workflows/specdev/common/rules/parent-implementation-orchestration.md +6 -2
  50. package/template/workflows/specdev/common/rules/skill-invocation.md +27 -0
  51. package/template/workflows/specdev/common/rules/workflow-routing.md +24 -0
  52. package/template/workflows/specdev/common/rules/workflow-state-and-lifecycle.md +93 -0
  53. package/template/workflows/specdev/common/schemas/goal-tickets-map.schema.json +33 -0
  54. package/template/workflows/specdev/common/schemas/initiative.schema.json +94 -0
  55. package/template/workflows/specdev/common/schemas/ticket.schema.json +168 -1
  56. package/template/workflows/specdev/common/schemas/tickets-map.schema.json +74 -6
  57. package/template/workflows/specdev/common/skills/code-review/SKILL.md +3 -2
  58. package/template/workflows/specdev/common/skills/code-review/references/risk-review.md +25 -0
  59. package/template/workflows/specdev/common/skills/plan-quality-review/SKILL.md +10 -0
  60. package/template/workflows/specdev/common/skills/plan-quality-review/references/checklist.md +13 -0
  61. package/template/workflows/specdev/common/skills/subagent-delivery/SKILL.md +5 -83
  62. package/template/workflows/specdev/common/skills/subagent-delivery/references/dispatch-and-accept.md +87 -0
  63. package/template/workflows/specdev/common/tools/README.md +14 -2
  64. package/template/workflows/specdev/common/tools/plan-contract.mjs +256 -0
  65. package/template/workflows/specdev/common/tools/ticket-control.mjs +251 -0
  66. package/template/workflows/specdev/common/tools/validate-specdev.mjs +58 -40
  67. package/template/workflows/specdev/manifest.json +97 -1
  68. package/template/canonical/canonical-specdev-orchestrate-implementation.md +0 -2839
  69. package/template/workflows/specdev/O-orchestrate-implementation/implementation-evidence-template.md +0 -39
  70. package/template/workflows/specdev/O-orchestrate-implementation/implementation-map-template.md +0 -50
  71. package/template/workflows/specdev/O-orchestrate-implementation/implementation-plan-template.md +0 -61
  72. package/template/workflows/specdev/R-review-architecture/architecture-report-contract.md +0 -123
  73. package/template/workflows/specdev/R-review-architecture/architecture-review-report-template.html +0 -106
  74. /package/template/workflows/specdev/{O-orchestrate-implementation/conflict-and-drift.md → P-goal-plan/references/multi-conflict-and-drift.md} +0 -0
  75. /package/template/workflows/specdev/{O-orchestrate-implementation/execution-loop.md → P-goal-plan/references/multi-execution-loop.md} +0 -0
  76. /package/template/workflows/specdev/{O-orchestrate-implementation/input-readiness.md → P-goal-plan/references/multi-input-readiness.md} +0 -0
  77. /package/template/workflows/specdev/{O-orchestrate-implementation/super-dag.md → P-goal-plan/references/multi-super-dag.md} +0 -0
@@ -1,4 +1,4 @@
1
- # 寻路
1
+ # 探索大需求与 Change 边界
2
2
 
3
3
  ## 网页平台运行约定
4
4
 
@@ -11,131 +11,40 @@
11
11
  - 项目代码与测试始终使用项目根相对路径;不写机器绝对路径。工件之间使用上述逻辑路径,不使用 Speculo 的运行时路径标签。
12
12
  - 如果网页平台不能直接写项目文件,则按目标文件名输出完整内容,并在答复中明确应保存的位置;不得把“无法写文件”伪装成已经持久化。
13
13
  - 若本地项目提供 Speculo Node 校验器,可运行它补充结构校验;纯网页环境按本文内联的 schema、Ready 清单和完成标准逐项核对,并明确记录未运行的自动校验。
14
+ - 本地只读 Goal 控制器和 Plan 合同校验库不随网页快照提供,不能把其名称当作可执行命令。网页执行者按内联 map-control/调用合同逐项计算依赖与门禁;缺少真实项目 Skill 源或执行能力时阻塞对应任务,不声称自动验证通过。
14
15
  - 提交、推送、合并、部署、发布、归档移动和不可逆迁移仍需用户明确授权。
15
16
 
16
- 一个模糊的想法出现了——太大而无法放入单个 Agent 会话,且从当前状态到**目的地**的路径尚不可见。寻路就是找到那条路,而非冲向目标。此 work 在 change state 中绘制一张**共享地图**,然后逐个处理其 Tickets,直到路径变得清晰。
17
+ > 激活后读取 SpecDev 的激活合同。
17
18
 
18
- 目的地可能是一份待移交和迭代的 Spec、一个在规划开始前需锁定的决策,或一项经说明允许在地图中完成的变更。命名目的地是第一步,它塑造每个 Ticket
19
+ W 位于 change 形成之前:Initiative → 候选 change → 各自 Grill → Spec → Tickets → 一个或多个 change 的 Goal。探索载体继续使用普通 change 目录,不增加另一套全局状态根;它不等于最终产品 change
19
20
 
20
21
  ## 读取范围
21
22
 
22
- 1. 先读取 SpecDev 的激活合同 与当前 Work 的状态入口。
23
- 2. 再读取 SpecDev 的按需读取与记忆写入协议,按当前分支、状态和关键词定位最小相关工件。
24
- 3. 只在本 Work 明确要求恢复、冲突、执行安全或归档证据时扩展为全量读取;缺少匹配证据或 owner/gateway 时停止受影响分支。
25
-
26
-
27
- ## 核心纪律
28
-
29
- ### 规划,而非执行
30
-
31
- Wayfinder 默认进行**规划**:每个 Ticket 解决一个决策,当地图完成时路径就清晰了——在某人动手之前没有任何剩余决定。想要直接动手通常说明已经到达地图边缘,是时候移交。只有地图“说明”明确覆盖此行为时,task 才能把解除阻塞的执行带入地图。
32
-
33
- ### 用名称引用
34
-
35
- 每张地图和每个 Ticket 都有一个名称。人类阅读的叙述和“已做出的决策”始终用名称引用;ID 和路径包裹在名称链接里,不以裸 `INV-01` 墙代替名称。
36
-
37
- ### 每会话一个 Ticket
38
-
39
- 无论绘制还是遍历,**每个会话绝不解决超过一个 Ticket**。绘制地图的会话不解决任何 Ticket;并行 research 的每个独立 Agent 也只负责一个 Ticket。
40
-
41
- ## 产物与适配
42
-
43
- - 地图:`specdev/changes/{change}/wayfinder-map.md`
44
- - 子 Tickets:`specdev/changes/{change}/investigation/`
45
- - solution comments:`specdev/changes/{change}/investigation/comments/`
46
- - assignment registry:`specdev/changes/{change}/.status.json` 的 `claimed_investigations`
47
-
48
- 每次绘制或遍历前加载 下方 `<local-tracker-contract>` 标签。Ticket 和地图模板:
49
-
50
- - 下方 `<investigation-ticket-template>` 标签
51
- - 下方 `<wayfinder-map-template>` 标签
52
- - 下方 `<solution-comment-template>` 标签
53
-
54
- ## Ticket 类型
55
-
56
- 每个 Ticket 要么是 **HITL**,与一个代表自己发言的人类一起工作;要么是 **AFK**,由 Agent 独立驱动。HITL Ticket 只能通过实时交流解决,Agent 绝不代替人类一方发言。
57
-
58
- - **Research(AFK)**:阅读文档、第三方 API 或知识库等资源,揭示某个决策等待的事实。调用 下方 `<research>` 标签。当需要当前工作目录之外的知识时使用。
59
- - **Prototype(HITL)**:调用 “原型阶段” 检测项目 UI、比较功能风格候选并逐步确认设计方向,把 `specdev/changes/{change}/prototypes/{design-id}/design-system.md` 与 comparison locator 链接为 solution comment 资产;`{design-id}` 使用 P 返回的 `UI-NNN`,P 不实现目的地。
60
- - **Grilling(HITL)**:对话。调用 “设计访谈能力” 的 grilling 与 domain-modeling 能力,但本会话只关闭当前 Wayfinder Ticket。
61
- - **Task(HITL 或 AFK)**:在决策做出前必须完成的手动工作。它通过为决策解除阻塞赢得位置,不以交付目的地为目标。Agent 能独立驱动时使用 AFK,否则给人类精确清单。
62
-
63
- Ticket label 只能是 `wayfinder:research | wayfinder:prototype | wayfinder:grilling | wayfinder:task`。
64
-
65
- ## 战争迷雾与范围
66
-
67
- 地图刻意不完整:不要绘制还看不到的内容。活跃 Tickets 之外是**战争迷雾**——能感觉即将到来、但依赖尚未解决问题而无法精确陈述的决策和调查。
68
-
69
- **迷雾还是 Ticket?** 判断标准是现在能否精确陈述问题,而非现在能否回答:
70
-
71
- - 问题已经清晰时做成 Ticket,即使仍被阻塞;
72
- - 还无法精确表述时留在“尚未明确”,不预先切成 Ticket 大小碎片。
73
-
74
- 目的地固定范围。目标之外的工作进入**超出范围**,不是战争迷雾。范围之外永不升级;只有重新命名目的地并创建新 change 时才重新考虑。越界 Ticket 关闭为 `out-of-scope`,链接进“超出范围”,不进入“已做出的决策”。
75
-
76
- ## 调用模式
77
-
78
- ### 绘制地图
79
-
80
- 用户带着模糊想法调用:
81
-
82
- 1. **命名目的地。** 运行一轮 G 的 grilling/domain-modeling,确定正在寻路的 Spec、决策或变更。
83
- 2. **绘制前沿。** 再次质询,这次广度优先,在整个空间展开而非深入一条线索。如果没有浮现任何迷雾,停下并询问用户如何继续,不创建地图。
84
- 3. **创建地图。** 使用模板填写目的地和说明;“已做出的决策”为空,迷雾写入“尚未明确”。
85
- 4. **创建现在可明确的 Tickets。** 先创建全部 Ticket,再第二遍连接 `blocked_by`,因为 ID 必须先存在。
86
- 5. **派出 research Agent。** 每个 research Ticket 使用独立上下文和 claim,各自只解决一个 Ticket;需要 Git 分支时先取得对应授权。
87
- 6. 停止。绘制地图是一个会话的工作,它不亲手解决任何 Ticket。
88
-
89
- **完成标准**:目的地、地图、当前可表述 Tickets、阻塞边和战争迷雾已持久化;绘图会话没有关闭 Ticket。
90
-
91
- ### 遍历地图
92
-
93
- 用户带来地图,可选指定 Ticket:
94
-
95
- 1. 加载地图的低分辨率视图,不加载每个 Ticket 正文。
96
- 2. 用户指定 Ticket 时使用它;否则按本地 tracker contract 查询并选择第一个 frontier Ticket。
97
- 3. 在任何工作前领取 Ticket。已领取时跳过并选择其他 frontier。
98
- 4. 按需缩放:只读取当前 Ticket、相关或已关闭 Ticket 的详情,以及“说明”指定的能力。
99
- 5. 解决当前唯一 Ticket,使用下一个未占用编号写 solution comment,原子关闭 Ticket 并释放 claim。
100
- 6. 在地图“已做出的决策”追加名称链接和一句概括;越界则写入“超出范围”。
101
- 7. 创建新浮现的 Tickets,第二遍连接阻塞;从“尚未明确”删除每个已升级补丁;更新或关闭被答案判定无效的 Tickets。
102
-
103
- 写回前重读地图、Ticket 与 claims,预期其他会话并发编辑。
23
+ 先读 下方 `<activation-and-memory>` 标签;读取共享地图、当前问题与依赖索引,只回读命中原文。低分辨率地图不缓存所有开放票正文。
104
24
 
105
- **完成标准**:本会话只关闭一个 Ticket;Ticket、solution comment、claim、地图和新 frontier 一致。
25
+ ## 分支
106
26
 
107
- ## 收敛与路由
27
+ | 当前需要 | 按需读取 |
28
+ |---|---|
29
+ | 初次绘制问题空间,或划分多个 change | 下方 `<ref-w-wayfinder-references-initiative-discovery>` 标签 |
30
+ | 领取并解决一个调查问题,或恢复既有地图 | 下方 `<ref-w-wayfinder-references-map-traversal>` 标签 和 下方 `<local-tracker-contract>` 标签 |
31
+ | 生成地图、问题与答案 | 下方 `<wayfinder-map-template>` 标签、下方 `<investigation-ticket-template>` 标签、下方 `<solution-comment-template>` 标签 |
32
+ | 选定清晰 change 交给 Goal | 下方 `<ref-w-wayfinder-references-initiative-discovery>` 标签 的交接门禁 |
108
33
 
109
- 当前沿为空且“尚未明确”不再包含阻塞目的地的内容时,路径清晰:
34
+ ## 必留纪律
110
35
 
111
- 路由前使用 Speculo Node 校验器 的 `--stage wayfinder`;Ticket、claim、comment 或地图不一致时保持 blocked。
36
+ - 目的地约束所有调查;能精确陈述的问题成为调查票,尚不能陈述的留在战争迷雾,目标外内容不自动升级。
37
+ - 默认每个会话最多解决一个调查 Ticket;绘图会话不关闭调查票。这个限制约束 W,不限制 P 的长期 Goal 调度;不静默减少用户明确要求的交付数量。
38
+ - 四类保持 `wayfinder:research`、`wayfinder:prototype`、`wayfinder:grilling`、`wayfinder:task`。HITL 必须真人参与,Agent 不代答;Task 仅解除调查阻塞,不偷做目的地实现。
39
+ - `claimed_investigations` 仍由探索载体的 change 状态唯一拥有。先领取后执行;他人已领取的问题跳过,不接管;只暂停有归属冲突的部分。
40
+ - 每个 materialized change 拥有自己的 design-tree、LOG、CONTEXT、ADR、Spec 与 tickets-map。共享探索答案通过 solution comment 引用,不复制成多个可写事实源。
41
+ - 缺失关键决定或必需证据时保持该 change 未就绪;其他独立清晰 change 可以交接,不要求整个大需求一次揭完迷雾。
112
42
 
113
- - 需要产品或架构取舍:“设计访谈能力”;
114
- - 外部行为已清楚:“编写 Spec 阶段”;
115
- - Spec Ready、只需拆分:“拆分 Tickets 阶段”;
116
- - Bug 根因路线收敛:“Bug 诊断阶段”;
117
- - 仍有高影响未知项:保持 active/blocked 并返回下一 frontier Ticket 名称。
43
+ ## 校验与交接
118
44
 
119
- ## 完成标准
45
+ 存在多个候选 change 时,由 W 写 `specdev/changes/{change}/initiative.json`;使用 下方 `<ref-w-wayfinder-references-initiative-template>` 标签 和 下方 `<ref-common-schemas-initiative-schema>` 标签。目标 change 只在用户接受边界后创建,不能挪用已属于其他任务的状态。
120
46
 
121
- - 目的地塑造每个 Ticket 并固定范围;
122
- - 地图是低分辨率索引,不列开放 Tickets,不复制答案详情;
123
- - 四类 Ticket 与 HITL/AFK 语义正确;
124
- - frontier 由 open、unblocked、unclaimed 事实查询;
125
- - 名称用于人类叙述,裸 ID 只作内部标识;
126
- - 战争迷雾、Ticket 与超出范围按可精确表述性和范围区分;
127
- - 每会话最多解决一个 Ticket,HITL 用户没有被 Agent 代答;
128
- - 每个关闭 Ticket 有 solution comment,资产通过链接引用;
129
- - claim、阻塞、地图与 Ticket 状态一致;
130
- - 路径清晰时返回下一 work,不把产品实现藏进寻路。
131
-
132
- ## 子文件引用
133
-
134
- - 本地 Tracker:下方 `<local-tracker-contract>` 标签
135
- - Ticket 模板:下方 `<investigation-ticket-template>` 标签
136
- - Solution comment:下方 `<solution-comment-template>` 标签
137
- - 地图模板:下方 `<wayfinder-map-template>` 标签
138
- - Ticket schema:下方 `<wayfinder-ticket-schema>` 标签
47
+ 运行 Speculo Node 校验器 的 `--stage wayfinder` 校验地图、claim、评论和 initiative;选定成员必须分别满足 Grill 共识、Ready Spec 和 Ready Tickets,再转交 “目标规划阶段”。W 不把“地图完成”宣称为产品已经交付。
139
48
 
140
49
  ---
141
50
 
@@ -204,6 +113,10 @@ status: active
204
113
 
205
114
  <!-- 被裁定在目的地之外的工作;已关闭,永不升级。 -->
206
115
 
116
+ ## Change 边界入口
117
+
118
+ 存在多个候选 change 时,W 创建并按需读取 `specdev/changes/{change}/initiative.json`;地图不复制其中的候选或子状态。每个目标 change 的 Grill/Spec/Ticket 独立拥有,交接规则见 下方 `<ref-w-wayfinder-references-initiative-discovery>` 标签。
119
+
207
120
  </wayfinder-map-template>
208
121
 
209
122
  <local-tracker-contract>
@@ -728,3 +641,307 @@ resolution: answered
728
641
  ```
729
642
 
730
643
  </wayfinder-ticket-schema>
644
+
645
+ <activation-and-memory>
646
+
647
+ # Activation and memory retrieval protocol
648
+
649
+ 本规则只在用户明确激活当前 workflow 或某个 Work 后读取。INDEX 只用于被动发现,不初始化状态、不读取 active change、不写入知识。
650
+
651
+ ## Locate before read
652
+
653
+ 1. 先解析当前 workflow 的 roots、状态索引和稳定 ID;不存在时静默跳过,不能凭旧路径猜测。
654
+ 2. 根据当前请求、Work 分支、关键词、稳定 ID、状态和 provenance,先搜索相关索引行或目录项,再定位最小相关 entry;不把索引全文默认装入上下文。
655
+ 3. 只回读命中的 entry 和直接 provenance;需要恢复、冲突裁决、归档、迁移或执行安全证明时,才读取该阶段声明的完整证据集合。
656
+ 4. 没有匹配证据时返回缺失证据并停止依赖该结论的分支,不补造事实。
657
+
658
+ ## Memory writes
659
+
660
+ 正式知识、永久 context、synthesis 或 archive 写入前,先解析唯一 owner 与 gateway,检查 pending transaction、lock、未完成 promotion 和 recovery evidence。gateway 不明或事务未闭合时,只阻塞记忆写入,继续独立且已授权的审计、定位、验证和其他工作。
661
+
662
+ 每次写入必须记录 source IDs、证据定位、验证时间或 digest;写入后定位受影响索引项并重新读取目标 entry,确认 owner、locator、内容和状态投影一致。原始证据不可被派生视图覆盖。
663
+
664
+ ## Read budget
665
+
666
+ 当前 Work 的权威状态、schema、Map/Plan、当前输入和直接所有权合同可以完整读取;非当前分支的知识树、历史 change、研究库、项目 Skill 和示例只按索引与关键词读取。执行、冲突、恢复和归档 Work 需要完整证据时,以该 Work 的显式合同为准。
667
+
668
+ ## 事务与归属隔离
669
+
670
+ 启动正式写入前检查原网关未闭合事务与写集。属于本任务的事务按原恢复协议处理;属于其他任务的事务不得接管、解锁、清空或覆盖。只暂停资源重叠的写入与依赖分支,继续独立、已授权工作;事务年龄不构成接管授权。写后按变更 ID 定位受影响的索引项并回读目标原文,不为核验默认整读整库。
671
+
672
+ </activation-and-memory>
673
+
674
+ <ref-w-wayfinder-references-initiative-discovery>
675
+
676
+ # Initiative:从大需求到独立 Change
677
+
678
+ ## 结构与所有权
679
+
680
+ 探索载体是现有 change 目录;W 在其中拥有 `specdev/changes/{change}/initiative.json` 与 wayfinder 地图/调查票。`specdev/changes/{change}/initiative.json` 只记录候选边界、关系和 materialized target,不缓存子 change 的状态、Spec、设计树或票正文。
681
+
682
+ 候选 `id` 是稳定 kebab 标识,`target` 为 null 或实际 sibling change 名;同一个 target 不能重复,也不能指向探索载体本身或父 implementation change。其他任务的现存 change 只能在核验归属并获得明确关联授权后引用,不接管其工作。
683
+
684
+ ## 探索顺序
685
+
686
+ 1. 命名大目标、用户指定数量和排除项;按行为、领域边界、风险、接口与发布独立性广度扫描。
687
+ 2. 能描述边界的部分成为候选 change;不能描述的留在迷雾。候选至少写背景、目标、非目标和未知项,不预造实施步骤。
688
+ 3. 在探索地图建立共享调查问题;每个问题仍遵循 research/prototype/grilling/task、HITL/AFK 和每会话一个调查票的原纪律。
689
+ 4. 用户接受候选边界后,创建或明确关联 target change。共享答案以 solution comment/source 引用导入,不复制成新的永久知识。
690
+ 5. 对每个 target 调用 “设计访谈能力”;该 target 独立拥有 design-tree、LOG、CONTEXT、ADR。已确认共享决定可引用复用,不能要求用户机械回答同一问题。
691
+ 6. 单个 target 的关键决定清晰后分别进入 S/T;无关 target 继续探索。一个 target 的 blocker 不应阻塞其独立 sibling。
692
+
693
+ ## 校验与交接门禁
694
+
695
+ - 候选 DAG 无环,依赖 ID 存在;目标与来源有证据,未创建 target 的候选不宣称 Ready。
696
+ - `--stage wayfinder` 验证 initiative 结构、目标存在性与禁止自引用;它不等于子 change 已就绪。
697
+ - 交接时对**选定** target 分别执行 `--stage grill` 与 `--stage tickets --repo <project-root>`,检查设计树 consensus、Spec `ready_for_tickets`、所有待执行票 Ready。
698
+ - 选定范围的跨 change 依赖须同时选择或有已完成基线证据,不用未完成/已取消票虚假满足依赖。
699
+ - 一个 target 交给 P 的单 change 分支;两个或以上 Ready target 交给 P 的多 change 分支。P 不接手剩余迷雾,也不为这些未知部分伪造计划。
700
+ - 用户明确要求全部 change 时,报告全部候选与各自阻塞;交接已清晰部分不等于少交付其他部分或宣布整个大需求完成。
701
+
702
+ ## 版本与恢复
703
+
704
+ 变更候选边界或依赖时递增 `revision`,在探索 LOG 记录来源和替代关系。原 claim、评论编号和低分辨率地图仍是原协议;不改写其他任务,不把探索载体迁成父实现 change。两者可以关联,但职责和 owner 分开。
705
+
706
+ </ref-w-wayfinder-references-initiative-discovery>
707
+
708
+ <ref-w-wayfinder-references-map-traversal>
709
+
710
+ # 寻路
711
+
712
+
713
+ 一个模糊的想法出现了——太大而无法放入单个 Agent 会话,且从当前状态到**目的地**的路径尚不可见。寻路就是找到那条路,而非冲向目标。此 work 在 change state 中绘制一张**共享地图**,然后逐个处理其 Tickets,直到路径变得清晰。
714
+
715
+ 目的地可能是一份待移交和迭代的 Spec、一个在规划开始前需锁定的决策,或一项经说明允许在地图中完成的变更。命名目的地是第一步,它塑造每个 Ticket。
716
+
717
+
718
+ ## 核心纪律
719
+
720
+ ### 规划,而非执行
721
+
722
+ Wayfinder 默认进行**规划**:每个 Ticket 解决一个决策,当地图完成时路径就清晰了——在某人动手之前没有任何剩余决定。想要直接动手通常说明已经到达地图边缘,是时候移交。只有地图“说明”明确覆盖此行为时,task 才能把解除阻塞的执行带入地图。
723
+
724
+ ### 用名称引用
725
+
726
+ 每张地图和每个 Ticket 都有一个名称。人类阅读的叙述和“已做出的决策”始终用名称引用;ID 和路径包裹在名称链接里,不以裸 `INV-01` 墙代替名称。
727
+
728
+ ### 每会话一个 Ticket
729
+
730
+ 无论绘制还是遍历,**每个会话绝不解决超过一个 Ticket**。绘制地图的会话不解决任何 Ticket;并行 research 的每个独立 Agent 也只负责一个 Ticket。
731
+
732
+ ## 产物与适配
733
+
734
+ - 地图:`specdev/changes/{change}/wayfinder-map.md`
735
+ - 子 Tickets:`specdev/changes/{change}/investigation/`
736
+ - solution comments:`specdev/changes/{change}/investigation/comments/`
737
+ - assignment registry:`specdev/changes/{change}/.status.json` 的 `claimed_investigations`
738
+
739
+ 每次绘制或遍历前加载 下方 `<local-tracker-contract>` 标签。Ticket 和地图模板:
740
+
741
+ - 下方 `<investigation-ticket-template>` 标签
742
+ - 下方 `<wayfinder-map-template>` 标签
743
+ - 下方 `<solution-comment-template>` 标签
744
+
745
+ ## Ticket 类型
746
+
747
+ 每个 Ticket 要么是 **HITL**,与一个代表自己发言的人类一起工作;要么是 **AFK**,由 Agent 独立驱动。HITL Ticket 只能通过实时交流解决,Agent 绝不代替人类一方发言。
748
+
749
+ - **Research(AFK)**:阅读文档、第三方 API 或知识库等资源,揭示某个决策等待的事实。调用 下方 `<research>` 标签。当需要当前工作目录之外的知识时使用。
750
+ - **Prototype(HITL)**:调用 “原型阶段” 检测项目 UI、比较功能风格候选并逐步确认设计方向,把 `specdev/changes/{change}/prototypes/{design-id}/design-system.md` 与 comparison locator 链接为 solution comment 资产;`{design-id}` 使用 P 返回的 `UI-NNN`,P 不实现目的地。
751
+ - **Grilling(HITL)**:对话。调用 “设计访谈能力” 的 grilling 与 domain-modeling 能力,但本会话只关闭当前 Wayfinder Ticket。
752
+ - **Task(HITL 或 AFK)**:在决策做出前必须完成的手动工作。它通过为决策解除阻塞赢得位置,不以交付目的地为目标。Agent 能独立驱动时使用 AFK,否则给人类精确清单。
753
+
754
+ Ticket label 只能是 `wayfinder:research | wayfinder:prototype | wayfinder:grilling | wayfinder:task`。
755
+
756
+ ## 战争迷雾与范围
757
+
758
+ 地图刻意不完整:不要绘制还看不到的内容。活跃 Tickets 之外是**战争迷雾**——能感觉即将到来、但依赖尚未解决问题而无法精确陈述的决策和调查。
759
+
760
+ **迷雾还是 Ticket?** 判断标准是现在能否精确陈述问题,而非现在能否回答:
761
+
762
+ - 问题已经清晰时做成 Ticket,即使仍被阻塞;
763
+ - 还无法精确表述时留在“尚未明确”,不预先切成 Ticket 大小碎片。
764
+
765
+ 目的地固定范围。目标之外的工作进入**超出范围**,不是战争迷雾。范围之外永不升级;只有重新命名目的地并创建新 change 时才重新考虑。越界 Ticket 关闭为 `out-of-scope`,链接进“超出范围”,不进入“已做出的决策”。
766
+
767
+ ## 调用模式
768
+
769
+ ### 绘制地图
770
+
771
+ 用户带着模糊想法调用:
772
+
773
+ 1. **命名目的地。** 运行一轮 G 的 grilling/domain-modeling,确定正在寻路的 Spec、决策或变更。
774
+ 2. **绘制前沿。** 再次质询,这次广度优先,在整个空间展开而非深入一条线索。如果没有浮现任何迷雾,停下并询问用户如何继续,不创建地图。
775
+ 3. **创建地图。** 使用模板填写目的地和说明;“已做出的决策”为空,迷雾写入“尚未明确”。
776
+ 4. **创建现在可明确的 Tickets。** 先创建全部 Ticket,再第二遍连接 `blocked_by`,因为 ID 必须先存在。
777
+ 5. **派出 research Agent。** 每个 research Ticket 使用独立上下文和 claim,各自只解决一个 Ticket;需要 Git 分支时先取得对应授权。
778
+ 6. 停止。绘制地图是一个会话的工作,它不亲手解决任何 Ticket。
779
+
780
+ **完成标准**:目的地、地图、当前可表述 Tickets、阻塞边和战争迷雾已持久化;绘图会话没有关闭 Ticket。
781
+
782
+ ### 遍历地图
783
+
784
+ 用户带来地图,可选指定 Ticket:
785
+
786
+ 1. 加载地图的低分辨率视图,不加载每个 Ticket 正文。
787
+ 2. 用户指定 Ticket 时使用它;否则按本地 tracker contract 查询并选择第一个 frontier Ticket。
788
+ 3. 在任何工作前领取 Ticket。已领取时跳过并选择其他 frontier。
789
+ 4. 按需缩放:只读取当前 Ticket、相关或已关闭 Ticket 的详情,以及“说明”指定的能力。
790
+ 5. 解决当前唯一 Ticket,使用下一个未占用编号写 solution comment,原子关闭 Ticket 并释放 claim。
791
+ 6. 在地图“已做出的决策”追加名称链接和一句概括;越界则写入“超出范围”。
792
+ 7. 创建新浮现的 Tickets,第二遍连接阻塞;从“尚未明确”删除每个已升级补丁;更新或关闭被答案判定无效的 Tickets。
793
+
794
+ 写回前重读地图、Ticket 与 claims,预期其他会话并发编辑。
795
+
796
+ **完成标准**:本会话只关闭一个 Ticket;Ticket、solution comment、claim、地图和新 frontier 一致。
797
+
798
+ ## 收敛与路由
799
+
800
+ 当前沿为空且“尚未明确”不再包含阻塞目的地的内容时,路径清晰:
801
+
802
+ 路由前使用 Speculo Node 校验器 的 `--stage wayfinder`;Ticket、claim、comment 或地图不一致时保持 blocked。
803
+
804
+ - 需要产品或架构取舍:“设计访谈能力”;
805
+ - 外部行为已清楚:“编写 Spec 阶段”;
806
+ - Spec Ready、只需拆分:“拆分 Tickets 阶段”;
807
+ - Bug 根因路线收敛:“Bug 诊断阶段”;
808
+ - 仍有高影响未知项:保持 active/blocked 并返回下一 frontier Ticket 名称。
809
+
810
+ ## 完成标准
811
+
812
+ - 目的地塑造每个 Ticket 并固定范围;
813
+ - 地图是低分辨率索引,不列开放 Tickets,不复制答案详情;
814
+ - 四类 Ticket 与 HITL/AFK 语义正确;
815
+ - frontier 由 open、unblocked、unclaimed 事实查询;
816
+ - 名称用于人类叙述,裸 ID 只作内部标识;
817
+ - 战争迷雾、Ticket 与超出范围按可精确表述性和范围区分;
818
+ - 每会话最多解决一个 Ticket,HITL 用户没有被 Agent 代答;
819
+ - 每个关闭 Ticket 有 solution comment,资产通过链接引用;
820
+ - claim、阻塞、地图与 Ticket 状态一致;
821
+ - 路径清晰时返回下一 work,不把产品实现藏进寻路。
822
+
823
+ ## 子文件引用
824
+
825
+ - 本地 Tracker:下方 `<local-tracker-contract>` 标签
826
+ - Ticket 模板:下方 `<investigation-ticket-template>` 标签
827
+ - Solution comment:下方 `<solution-comment-template>` 标签
828
+ - 地图模板:下方 `<wayfinder-map-template>` 标签
829
+ - Ticket schema:下方 `<wayfinder-ticket-schema>` 标签
830
+
831
+ </ref-w-wayfinder-references-map-traversal>
832
+
833
+ <ref-w-wayfinder-references-initiative-template>
834
+
835
+ ```json
836
+ {
837
+ "schema_version": 1,
838
+ "artifact": "initiative",
839
+ "change": "<YYYY-MM-DD-initiative>",
840
+ "revision": 1,
841
+ "destination": "<大需求目标>",
842
+ "changes": []
843
+ }
844
+ ```
845
+
846
+ </ref-w-wayfinder-references-initiative-template>
847
+
848
+ <ref-common-schemas-initiative-schema>
849
+
850
+ ```json
851
+ {
852
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
853
+ "$id": "urn:speculo:specdev:initiative:v1",
854
+ "type": "object",
855
+ "required": [
856
+ "schema_version",
857
+ "artifact",
858
+ "change",
859
+ "revision",
860
+ "destination",
861
+ "changes"
862
+ ],
863
+ "properties": {
864
+ "schema_version": {
865
+ "const": 1
866
+ },
867
+ "artifact": {
868
+ "const": "initiative"
869
+ },
870
+ "change": {
871
+ "type": "string",
872
+ "minLength": 1
873
+ },
874
+ "revision": {
875
+ "type": "integer",
876
+ "minimum": 1
877
+ },
878
+ "destination": {
879
+ "type": "string",
880
+ "minLength": 1
881
+ },
882
+ "changes": {
883
+ "type": "array",
884
+ "items": {
885
+ "type": "object",
886
+ "required": [
887
+ "id",
888
+ "name",
889
+ "background",
890
+ "scope",
891
+ "non_goals",
892
+ "unknowns",
893
+ "depends_on",
894
+ "target"
895
+ ],
896
+ "properties": {
897
+ "id": {
898
+ "type": "string",
899
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
900
+ },
901
+ "name": {
902
+ "type": "string",
903
+ "minLength": 1
904
+ },
905
+ "background": {
906
+ "type": "string",
907
+ "minLength": 1
908
+ },
909
+ "scope": {
910
+ "type": "string",
911
+ "minLength": 1
912
+ },
913
+ "non_goals": {
914
+ "type": "array",
915
+ "items": {
916
+ "type": "string"
917
+ }
918
+ },
919
+ "unknowns": {
920
+ "type": "array",
921
+ "items": {
922
+ "type": "string"
923
+ }
924
+ },
925
+ "depends_on": {
926
+ "type": "array",
927
+ "items": {
928
+ "type": "string"
929
+ },
930
+ "uniqueItems": true
931
+ },
932
+ "target": {
933
+ "type": [
934
+ "string",
935
+ "null"
936
+ ]
937
+ }
938
+ },
939
+ "additionalProperties": false
940
+ }
941
+ }
942
+ },
943
+ "additionalProperties": false
944
+ }
945
+ ```
946
+
947
+ </ref-common-schemas-initiative-schema>