@namewta/speculo 2.0.4 → 2.0.6
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/package.json +1 -1
- package/template/canonical/canonical-specdev-goal-plan.md +2272 -1069
- package/template/canonical/canonical-specdev-grill-with-docs.md +2164 -661
- package/template/canonical/canonical-specdev-spec.md +2163 -660
- package/template/canonical/canonical-specdev-tickets.md +2095 -574
- package/template/canonical/canonical-specdev-wayfinder.md +2339 -836
- package/template/references/coordination/coordination-contract.md +8 -6
- package/template/references/coordination/modes/cli.md +1 -1
- package/template/references/coordination/modes/herdr.md +2 -2
- package/template/references/coordination/modes/orca.md +3 -3
- package/template/references/coordination/report-template.md +18 -0
- package/template/references/coordination/result-and-recovery.md +4 -4
- package/template/references/coordination/session-files.md +49 -56
- package/template/references/coordination/task-brief.md +7 -7
- package/template/references/coordination/task-template.md +25 -0
- package/template/references/retrospective/references/friction-taxonomy.md +1 -1
- package/template/references/writing-for-agents/references/project-skill-maintenance.md +29 -0
- package/template/references/writing-for-agents/writing-contract.md +2 -0
- package/template/workflows/specdev/SKILL.md +1 -1
- package/template/workflows/specdev/common/README.md +1 -1
- package/template/workflows/specdev/common/rules/artifact-contract.md +1 -1
- package/template/workflows/specdev/common/rules/change-completion.md +6 -6
- package/template/workflows/specdev/common/rules/domain-runtime.md +2 -2
- package/template/workflows/specdev/common/rules/evidence-and-verification.md +17 -34
- package/template/workflows/specdev/common/rules/execution-policy.md +24 -16
- package/template/workflows/specdev/common/rules/operating-governance.md +1 -1
- package/template/workflows/specdev/common/rules/parent-implementation-orchestration.md +4 -2
- package/template/workflows/specdev/common/rules/path-ownership.md +9 -7
- package/template/workflows/specdev/common/rules/path-reference-contract.md +1 -1
- package/template/workflows/specdev/common/rules/workflow-routing.md +1 -1
- package/template/workflows/specdev/common/rules/workflow-state-and-lifecycle.md +7 -3
- package/template/workflows/specdev/common/schemas/execution-context.schema.json +67 -0
- package/template/workflows/specdev/common/schemas/execution-record.schema.json +154 -0
- package/template/workflows/specdev/common/schemas/goal-plan.schema.json +15 -55
- package/template/workflows/specdev/common/schemas/implementation-plan.schema.json +15 -55
- package/template/workflows/specdev/common/schemas/retro-approval.schema.json +44 -0
- package/template/workflows/specdev/common/schemas/retro-archive.schema.json +99 -0
- package/template/workflows/specdev/common/schemas/retro-execution.schema.json +112 -0
- package/template/workflows/specdev/common/schemas/retro-upgrade.schema.json +163 -0
- package/template/workflows/specdev/common/schemas/retrospective.schema.json +119 -14
- package/template/workflows/specdev/common/schemas/session-locator.schema.json +15 -0
- package/template/workflows/specdev/common/skills/code-review/references/review-evidence.md +3 -3
- package/template/workflows/specdev/common/skills/code-review/references/source-discovery.md +2 -0
- package/template/workflows/specdev/common/skills/code-review/references/working-tree-review.md +1 -1
- package/template/workflows/specdev/common/skills/dev-worktree/SKILL.md +15 -34
- package/template/workflows/specdev/common/skills/dev-worktree/references/create.md +27 -56
- package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +10 -54
- package/template/workflows/specdev/common/tools/README.md +16 -0
- package/template/workflows/specdev/common/tools/delivery-artifacts.mjs +5 -5
- package/template/workflows/specdev/common/tools/execution-context.mjs +104 -0
- package/template/workflows/specdev/common/tools/plan-contract.mjs +3 -1
- package/template/workflows/specdev/common/tools/review-evidence.mjs +2 -2
- package/template/workflows/specdev/common/tools/tests/engineering.test.mjs +2 -2
- package/template/workflows/specdev/common/tools/tests/review-fixture.mjs +4 -4
- package/template/workflows/specdev/common/tools/ticket-control.mjs +17 -12
- package/template/workflows/specdev/common/tools/validate-handoff.mjs +108 -0
- package/template/workflows/specdev/common/tools/validate-retro.mjs +331 -0
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +135 -105
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/SKILL.md +2 -1
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/operation-contract.md +2 -0
- package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/retro-archive.md +27 -0
- package/template/workflows/specdev/specdev-c-code-review/SKILL.md +1 -1
- package/template/workflows/specdev/specdev-i-implement/SKILL.md +3 -3
- package/template/workflows/specdev/specdev-i-implement/assets/evidence-template.md +39 -31
- package/template/workflows/specdev/specdev-i-implement/references/execution-preflight.md +16 -16
- package/template/workflows/specdev/specdev-i-implement/references/implementation-procedure.md +21 -37
- package/template/workflows/specdev/specdev-i-implement/references/merge-conflict-protocol.md +8 -18
- package/template/workflows/specdev/specdev-p-goal-plan/SKILL.md +3 -3
- package/template/workflows/specdev/specdev-p-goal-plan/assets/goal-plan-template.md +23 -26
- package/template/workflows/specdev/specdev-p-goal-plan/references/completion-control.md +11 -14
- package/template/workflows/specdev/specdev-p-goal-plan/references/lead-orchestration.md +12 -33
- package/template/workflows/specdev/specdev-p-goal-plan/references/map-control.md +1 -1
- package/template/workflows/specdev/specdev-p-goal-plan/references/multi-change-plan.md +11 -16
- package/template/workflows/specdev/specdev-p-goal-plan/references/multi-conflict-and-drift.md +2 -2
- package/template/workflows/specdev/specdev-p-goal-plan/references/multi-execution-loop.md +6 -6
- package/template/workflows/specdev/specdev-p-goal-plan/references/orchestration-protocol.md +13 -44
- package/template/workflows/specdev/specdev-p-goal-plan/references/planning-modes.md +18 -25
- package/template/workflows/specdev/specdev-p-goal-plan/references/single-change-plan.md +16 -16
- package/template/workflows/specdev/specdev-r-retro/SKILL.md +15 -11
- package/template/workflows/specdev/specdev-r-retro/assets/retro-template.md +26 -14
- package/template/workflows/specdev/specdev-r-retro/assets/upgrade-plan-template.md +41 -0
- package/template/workflows/specdev/specdev-r-retro/references/development-retrospective.md +42 -0
- package/template/workflows/specdev/specdev-r-retro/references/records.md +47 -0
- package/template/workflows/specdev/specdev-r-retro/references/skill-upgrade.md +13 -0
- package/template/workflows/specdev/specdev-t-tickets/SKILL.md +2 -0
- package/template/workflows/specdev/specdev-t-tickets/assets/ticket-template.md +1 -1
- package/template/workflows/specdev/specdev-t-tickets/assets/tickets-map-template.md +6 -6
- package/template/workflows/specdev/specdev-t-tickets/references/planning-procedure.md +2 -2
- package/template/workflows/specdev/specdev-t-tickets/references/ticket-readiness.md +3 -3
|
@@ -1,34 +1,21 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Evidence 与验证
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
I、C、P 验收时读取。环境由 change README 的执行上下文定位,不从票据串并行或 Agent 数量推导。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
| 检查 | 执行位置 | owner | 证据 |
|
|
6
|
+
|---|---|---|---|
|
|
7
|
+
| 单元、组件、类型、lint/build、正常/失败路径 | change-workspace | 实际实现者 | 原 Ticket/Direct Spec Evidence |
|
|
8
|
+
| 独立双轴审查 | 选定工作区的固定 commit 或工作副本快照 | 未参与本范围实现的 reviewer | 原 Independent Review 与工具核验 |
|
|
9
|
+
| 集成/回归及适用 E2E | change-workspace 的稳定交付输入 | Lead | 命令、退出码、观察、E2E disposition |
|
|
10
|
+
| 整体 AC/Gate | 同一 change 工作区;跨 change 按明确 aggregate 合同 | Lead | 原整体 Evidence |
|
|
6
11
|
|
|
7
|
-
|
|
12
|
+
有提交授权可用实际 commit 固定输入;没有授权时使用 <Path>{roots.workflows}/specdev/common/skills/code-review/references/working-tree-review.md</Path>。快照必须包含本票真实实现范围,保留其他票及用户改动的排除理由。单票通过不代表整个工作区全部通过;最终审查覆盖全部实际交付。
|
|
8
13
|
|
|
9
|
-
|
|
10
|
-
|---|---|---|---|---|---|
|
|
11
|
-
| 正常/失败路径 | 公共接口或稳定接缝 | 定向测试 | current-workspace 或 source-worktree | 合同成立 | Ticket Evidence |
|
|
12
|
-
| 跨模块回归 | 集成接缝 | 回归命令 | current-workspace 或 parent-candidate | 组合状态成立 | Ticket Evidence |
|
|
13
|
-
| E2E required | 真实端到端边界 | 场景步骤 | current-workspace 或 parent-candidate | 外部行为成立 | Ticket Evidence |
|
|
14
|
+
共享工作区验收前协调相关 writer 停写,测试资源/生成输出独占或明确隔离。Git index 操作串行;当前交付与固定输入、规范或标准不一致时重验受影响项。必需 E2E 未运行/失败不能写 passed,not-required 必须给理由。E2E Gate 仍由 Lead 拥有,不接受执行者自报代替。
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
Ticket 的 verified 执行记录和 done 状态基于真实改动、AC、检查与独立审查;不要求每票提交、父分支推进或 candidate worktree。Direct Spec 同样逐 AC 验收,不制造票据。明确承诺的 Git/发布交付按原授权单列,失败不伪造成功。
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
current 模式的 implementation owner 在当前父分支和当前 workspace 工作。Ticket 必须严格串行,workspace clean 后形成非空 implementation commit;Lead 在同一 workspace 执行适用集成/回归和 E2E,并在父 HEAD 未漂移时将 Ticket commit 记录为 result SHA。
|
|
20
|
-
|
|
21
|
-
### Source-worktree
|
|
22
|
-
|
|
23
|
-
implementation owner 运行最接近目标行为的单元/组件测试、静态分析、类型、lint/build 等适用非 E2E 检查。来源实现必须在 clean worktree 形成 commit。任何 source-worktree E2E pass 声明无效。
|
|
24
|
-
|
|
25
|
-
### Parent-candidate
|
|
26
|
-
|
|
27
|
-
required 模式下,Lead 在最新父分支与 source commit 的 candidate 状态运行受影响集成/回归、项目父状态检查和适用 E2E。E2E 由实际跨边界风险决定,不限于 UI;not-required 必须写理由。required E2E 未运行或失败时不得推进父分支。
|
|
28
|
-
|
|
29
|
-
### Direct Spec
|
|
30
|
-
|
|
31
|
-
Direct Spec 按 <Path>{roots.workflows}/specdev/common/rules/execution-policy.md</Path> 独立选择工作区。current 记录实施前基线、最终 checkpoint、dirty 状态和实际检查;required 以整个 change 为单元复用上方 source-worktree/parent-candidate 两层验证,记录真实 source/candidate/result。E2E 仍只由 Lead 执行;两种模式均按完整规格覆盖全部 AC,不伪造 Ticket 或未发生的集成。
|
|
18
|
+
重复失败按 <Path>{roots.workflows}/specdev/common/rules/execution-policy.md</Path> 保留历史并复盘。恢复读原 Evidence、Git 和工具事实,不从 REPORT completed 或进程退出推断验收通过。
|
|
32
19
|
|
|
33
20
|
低层证据不能替代明确要求的外部行为证据。高风险迁移还需要 dry-run、调用点扫描、数据核对、监控或恢复演练。
|
|
34
21
|
|
|
@@ -38,21 +25,17 @@ Direct Spec 按 <Path>{roots.workflows}/specdev/common/rules/execution-policy.md
|
|
|
38
25
|
|
|
39
26
|
## 4. 失败分类与完整性
|
|
40
27
|
|
|
41
|
-
失败分类为本 Ticket 新失败、基线既有失败、环境/权限/基础设施失败、无效验证或
|
|
28
|
+
失败分类为本 Ticket 新失败、基线既有失败、环境/权限/基础设施失败、无效验证或 固定输入漂移。不得通过跳过、放宽断言、吞错、删除用例或迁移验证位置制造绿色。
|
|
42
29
|
|
|
43
30
|
受控反向验证只用于可能静默通过的关键门禁:证明检查能在目标风险出现时失败,再恢复并重跑。普通测试不为形式执行破坏性操作。
|
|
44
31
|
|
|
45
|
-
##
|
|
46
|
-
|
|
47
|
-
每个 Ticket Evidence 至少包含:Lead、Dispatch/返回(若有)、workspace 策略、base/source/result SHA、candidate 字段(required 模式适用,current 模式明确不适用)、实际路径、每条命令/环境/退出状态、合同映射、双轴审查、E2E disposition、未运行项、失败分类、偏差、残余风险和父分支重读结果。
|
|
48
|
-
|
|
49
|
-
required Ticket Done 必须有 source commit、通过 candidate、父分支 result 与 Lead Evidence;current Ticket Done 必须有 implementation commit、通过 direct-parent 验证、父分支 result 与 Lead Evidence。无法运行 required 验证、存在未批准偏差、父分支未包含 Ticket commit 或 Evidence 不完整时不得 Done。
|
|
32
|
+
## Evidence 最低内容
|
|
50
33
|
|
|
51
|
-
|
|
34
|
+
记录 Lead、实际派遣/返回、唯一 change 工作区引用、基线与实际 checkpoint/快照、真实修改路径、逐命令环境/退出结果、AC 映射、独立双轴审查、E2E disposition、未运行项、失败分类、偏差和残余风险。Direct Spec 同时保留实际授权和唯一获批规格,不制造 Ticket。
|
|
52
35
|
|
|
53
|
-
|
|
36
|
+
父 Implementation Orchestration Evidence 不能替代子 Evidence;至少记录最终 Map revision、成员状态/证据引用、dependency/serialization 实际顺序、跨 change 合同检查、aggregate 命令/环境/结果、漂移处置与残余风险。成员未 completed 或整体验证未通过不能完成父 change。
|
|
54
37
|
|
|
55
|
-
Evidence 原文不出仓库。对 GitHub 的公共投影由 T-triage publish
|
|
38
|
+
Evidence 原文不出仓库。对 GitHub 的公共投影由 T-triage publish 按公共投影规则生成,不替代完整记录。
|
|
56
39
|
|
|
57
40
|
## 6. 按改动选择检查与复用证据
|
|
58
41
|
|
|
@@ -1,28 +1,36 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 票据调度、Agent 编排与 change 工作区
|
|
2
2
|
|
|
3
|
-
I 开始实现、P 安排执行和 dev-worktree
|
|
3
|
+
I 开始实现、P 安排执行和 dev-worktree 创建/恢复时读取。三项决定分别记录,互不推导。工具选择和任务交接读取 <Path>{roots.references}/coordination/coordination-contract.md</Path>。
|
|
4
4
|
|
|
5
5
|
## 输入和选择
|
|
6
6
|
|
|
7
|
-
- 获批完整 Spec 可直接进入 I;`ready_for_tickets: true`
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
7
|
+
- 获批完整 Spec 可直接进入 I;`ready_for_tickets: true` 表示规格就绪,不强制拆票。README 替代独立 Spec 仍限原轻量边界;明确要求的 Spec/Ticket/Goal 必须交付。
|
|
8
|
+
- 需要独立调度、DAG 或逐票追踪时使用 T;跨任务 Gate、跨 change 或明确总控请求进入 P。已有活动责任不能通过改称 Direct Spec 绕过,先由原 owner 处置原记录。
|
|
9
|
+
- 票据调度 `ticket_execution: auto | serial | parallel`:默认 auto,由 Agent 按 DAG、写集、语义资源、用户/项目要求和实际能力决定。serial 完成当前票的实现、独立审查和验证后再开始下一票;parallel 允许同时推进独立票,但不强制派遣或绕过前置门。
|
|
10
|
+
- `max_parallel_tickets` 仅在实际要求上限时记录,计量 in_progress/review 票据,不计 Agent。父计划、子计划及 change 约束取共同上限,serial 为一票。没有显式上限时不填固定数字,不创建 config。
|
|
11
|
+
- Agent 编排按用户、项目初始化选择和当前 Work/Skill 的要求决定。一张票可以由 Lead、subagent 或团队完成。`concurrent_implementation_limit` 和现有 config 的 `max_concurrent_implementations` 仅约束实际实现者人数,显式存在才生效;不能用票据数量代替人数或反向推导。宿主限制仍须遵守。Lead 从真实工具状态核对活动人数,历史 implementation_owners 名单不代表当前全部在写,静态校验不能认证运行期人数。
|
|
12
|
+
- 未指定工作区时复用 current,不询问默认选择。用户已选的 workspace/branch 持续有效。父计划引用成员选择,不重新安排其工作区。
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## 工作区与写入
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
一个 change 使用一个选定工作区,所有 Ticket、Direct Spec、协作者、修复和验证都在这里完成。`workspace_policy: current` 可为 main、普通分支或已在使用的 worktree;`worktree` 表示本 change 明确选择的独立 checkout。需要新建时调用 <Path>{roots.workflows}/specdev/common/skills/dev-worktree/SKILL.md</Path>,默认 locator 为 `specdev-worktree/<change>`,branch 为 `speculo/<change>`。按实际用户选择复用已有工作区。
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
串并行、Agent 数量、重试、review 均不新增工作区。额外 worktree 或扩大分支范围必须另有具体授权,不从创建一个 change worktree 的要求继承。
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
同一工作区可由多个实现者写互不冲突的授权路径。共享路径、API、迁移序列、端口、数据库、生成输出须明确唯一 owner 或串行阶段;worktree 不提供锁或沙箱。Git index、commit、checkout、merge 和改变公共依赖的操作由 Lead 协调串行,任何执行者都不能暂存他人改动。审查和整体测试使用固定输入,冻结前协调相关 writer 停止写入;未知运行状态先查询,不以无报告/超时推断结束。
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
## 唯一记录与完成
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
实际执行开始时,Lead 在 change README 的 `Execution Context` 锚点保存一次工作区事实、基线、owner 和无计划时的调度选择。完整计划拥有票据策略,README 只保留该 change 的实际上下文;工作区只有 README 一个事实源。格式和恢复检查见 <Path>{roots.workflows}/specdev/common/skills/dev-worktree/references/create.md</Path>,current 同样使用该记录而不调用创建操作。纯只读不造执行记录;既有无票 current 证据可按原快照合同读取。
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
每票原 Evidence 保存自己的 `Workspace Execution Record`,引用 `<Path>{roots.state}/specdev/changes/{change}/README.md</Path>` 的 execution-context 锚点,只记录实际实现者、checkpoint、验证与失败次数;Direct Spec 使用原 evidence/direct-spec.md,不造 Ticket/Map/Goal。使用 <Path>{roots.workflows}/specdev/specdev-i-implement/assets/evidence-template.md</Path>。Lead 是正式状态/Evidence owner,implementation_owners 可有多人。
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
完成以真实改动、AC、独立双轴审查和适用验证为准。未授权提交时使用固定工作副本快照;不要求 empty commit、每票 commit、父分支 result 或额外 candidate checkout。明确承诺的提交、合并、发布等仍按原目标与授权执行;完成声明不得冒充这些动作已发生。整体完成仍按 <Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>。
|
|
29
|
+
|
|
30
|
+
验证尝试上限来自有效计划、change 上下文或项目约定,缺省 3,已有 config 的更严格上限继续生效。重复同一 blocker 无新证据或达到上限时,Lead 保留历史并形成实质变化后才能重试;仅换 Agent 不构成恢复。
|
|
31
|
+
|
|
32
|
+
## 恢复和旧记录
|
|
33
|
+
|
|
34
|
+
恢复重读 README、原计划、Ticket/Evidence、实际 writer、Git branch/base 和工作区;冲突只暂停受影响分支。取消和归档不删除工作区或未决事实,writer 停止仍需真实证据。
|
|
35
|
+
|
|
36
|
+
旧 per-Ticket/source/candidate 执行记录仅作历史只读依据。活动旧记录必须由原 owner 显式整理:停止或交接旧 writer,盘点全部 branch/worktree/checkpoint/未决动作,确认本 change 的唯一工作区;没有合并授权不能收拢代码。将旧记录原字节移存原 Evidence 的历史段并保留引用,经核对后才写新上下文和新记录,重新核验失效的审查/验证。不自动删除旧工作区、不批量改 done,不由安装刷新转换。未处置完毕保持 blocked。
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
11. **本地执行权威**:远程 Issue/PR/URL 只作为来源或完成投影;Spec、Ticket、Map、Goal Plan、Evidence 和状态始终以本地工件为准。
|
|
17
17
|
12. **完成与归档分离**:本地完成按 change completion 合同决定;远程 close 失败不回滚完成,但必须 reconcile 或 waive 后才归档。
|
|
18
18
|
13. **Lead 与隔离正交**:Lead 固定拥有原计划、Evidence 与父分支;是否派遣 任务执行者 由 Lead 动态决定。执行方式与工作区按 <Path>{roots.workflows}/specdev/common/rules/execution-policy.md</Path> 独立选择,执行方式默认当前宿主正常执行,工作区默认 current;无 Goal 时由 I 在原 Evidence 承接,已有选择不重复询问。
|
|
19
|
-
14.
|
|
19
|
+
14. **策略化验收**:按 <Path>{roots.workflows}/specdev/common/rules/execution-policy.md</Path> 在选定 change 工作区冻结真实输入、完成独立审查和验证。票据串并行不决定工作区或 Agent 拓扑,不强制每票提交/合并。
|
|
20
20
|
15. **父子权威隔离**:父实现 change 只拥有 Ready 子 change 的组合 Ticket DAG、serialization、全局 workspace/资源和实现进度投影;子 change 继续拥有全部行为与实现合同。一个未完成子 change 只能属于一个未完成父实现 change。
|
|
21
21
|
|
|
22
22
|
共享规则:
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
## 权威边界
|
|
10
10
|
|
|
11
11
|
- 父 Implementation Map:成员、组合 Ticket inventory、跨 change dependency/serialization 与 revision 的唯一权威投影。
|
|
12
|
-
- 父 Implementation Plan:Lead
|
|
12
|
+
- 父 Implementation Plan:Lead、跨 change ticket_execution、可选票据上限、明确实现者限制、Gate/Wave、serialization 和已授权 Git 交付队列;工作区只引用成员上下文。
|
|
13
13
|
- 子 change:自己的 Spec、Ticket、内部 Goal Gate、workspace、Git、Evidence 和完成状态的唯一权威。
|
|
14
14
|
|
|
15
15
|
父工件不得复制完整子合同。子权威变化时停止旧派单、递增父 Map revision 并重算父 Plan;不能从旧父投影覆盖子工件。
|
|
@@ -20,12 +20,14 @@
|
|
|
20
20
|
|
|
21
21
|
## I-implement 调用
|
|
22
22
|
|
|
23
|
-
父 Plan
|
|
23
|
+
父 Plan 可替代缺失的子 Goal 提供跨 change 调度/Gate 和执行边界;子计划的约束同时遵守。成员实际工作区由各自 README 唯一记录,父计划不得覆盖已有选择;完成或阻塞组合票后返回父 P。
|
|
24
24
|
|
|
25
25
|
## 归档与完成
|
|
26
26
|
|
|
27
27
|
未完成父实现 change 的成员不得归档。成员满足普通 change completion 时可以先 completed,但不自动归档。父 change 只有全部成员 completed、Map/Plan completed、aggregate Evidence 完整且无 active dispatch/candidate/lock 后才能 completed;完成或归档均不自动级联。
|
|
28
28
|
|
|
29
|
+
父完成门逐一重验成员选定工作区的实际交付和最终固定审查输入,不要求先合并成员分支。父聚合双轴审查同时绑定当前 Map、Plan、成员 Spec 与各成员最终 Evidence 的 review-input 锚点;可对这些编排工件使用 source-files 固定快照,但不能替代成员的实现变更审查。成员代码、规格或审查输入变化后,重新核验受影响成员与聚合证据;Git 交付仍只执行具体已授权动作。
|
|
30
|
+
|
|
29
31
|
## 局部阻塞不升级为全局停机
|
|
30
32
|
|
|
31
33
|
父创建前仍全部成员预检且 all-or-nothing。父开始运行后,单票 blocked/deviated、他人资源冲突或必需 Skill 失效只阻塞该票及其依赖闭包,父 Map/Plan 可保持 in_progress 与有效的全局执行门,继续独立已授权 frontier。只有共享的全局门禁失败、计划整体失效或没有合法 frontier 时,才将父运行暂停;不得为继续运行接管其他任务。
|
|
@@ -20,16 +20,18 @@
|
|
|
20
20
|
5. 越界前停止并按 deviation control 提出 ownership change;不得先改后报。
|
|
21
21
|
6. 上游 Ticket 改变目录/合同后,下游基于已集成父分支重新解析路径和 preflight。
|
|
22
22
|
|
|
23
|
-
## 3.
|
|
23
|
+
## 3. change 工作区与协作
|
|
24
24
|
|
|
25
|
-
按 <Path>{roots.workflows}/specdev/common/rules/execution-policy.md</Path>
|
|
25
|
+
按 <Path>{roots.workflows}/specdev/common/rules/execution-policy.md</Path> 独立确定票据调度、Agent 编排与工作区。每个 change 的工作区事实只在 README 执行上下文保存,所有票据和执行者复用;不以同一工作区推导单 writer,也不以并行推导独立 worktree。
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
Ticket owner 负责本票交付,可以安排多个执行者并细分授权写集;Lead 参与实现也遵守相同路径边界。SpecDev 状态、Evidence 和最终验收仍由 Lead 写入。只读任务可以并行,不占票据并发数;当前 Work 的独立 reviewer 要求仍生效。
|
|
28
28
|
|
|
29
|
-
## 4.
|
|
29
|
+
## 4. 并发与验收时序
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
并行候选必须满足依赖、可写路径、shared owner、语义资源和明确并发限制。冲突操作由 owner 排序,不创建额外 worktree 规避共享语义冲突。单票 serial 不限制该票内部 Agent 合作;同一票多个 Agent 的写集仍不得相撞。
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
Git index/提交/切换分支/合并串行协调;不得提交其他票或用户改动。固定审查输入与整体测试前停止相关 writer,记录真实 checkpoint 或工作副本快照,回读发现漂移后使受影响证据失效。Lead 的 E2E Gate 在选定 change 工作区执行。
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
父实现存在时,按组合 ID 协调跨 change 依赖和 serialization;保留每个成员工作区,父票据上限计量 Ticket,已有实现者限制单独执行。跨分支交付若要求合并,按具体授权和 Git 事实串行执行,不由单票 Done 自动触发。
|
|
36
|
+
|
|
37
|
+
**完成标准**:每个写集有唯一票据/实现者归属,所有票据可追溯至该 change 的唯一工作区,审查与验证覆盖真实交付。
|
|
@@ -73,7 +73,7 @@ SpecDev 不假定运行时一定提供项目根变量。Ticket、Evidence、诊
|
|
|
73
73
|
|
|
74
74
|
外部 URL 不能伪装成 SpecDev 内部路径;内部文件也不能用 URL 代替完整 Path 标签。
|
|
75
75
|
|
|
76
|
-
历史会话的只读外部 locator
|
|
76
|
+
历史会话的只读外部 locator 是限定例外:可记录准确确认的原始会话日志绝对路径,按 <Path>{roots.references}/coordination/session-files.md</Path> 检索。它不使用内部 Path 标签,不是可移植项目路径、静态能力依赖或写入授权;新派遣在任务目录的 session-locator.json 中仅记录 path 字段,不复制原日志;既有项目内历史副本保留正常工件路径。
|
|
77
77
|
|
|
78
78
|
## 5. 工件名称与工件引用
|
|
79
79
|
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
|
|
28
28
|
## 复盘与交付路由
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
开发环境/流程复盘、积累独立 RETRO,以及明确要求汇总升级项目 Skills → <Path>{roots.workflows}/specdev/specdev-r-retro/SKILL.md</Path>。代码与参考资料学习 → <Path>{roots.workflows}/specdev/specdev-l-learn/SKILL.md</Path>;可在实现前直接进入,用户未指定 change 时由 L 新建学习载体。Speculo 产品反馈仍为 retro command。CI/安全/PR/包发布 → <Path>{roots.workflows}/specdev/specdev-t-triage/SKILL.md</Path> 的对应模式;确定性修复回到 D/I,不由 T 接管代码。
|
|
31
31
|
|
|
32
32
|
长任务在阶段边界按产物与待决问题选择继续、压缩上下文或 handoff;交接只携带准确 owner、SHA、输入和未闭合动作,不硬编码特定模型的上下文阈值,不自动启动其他会话。
|
|
33
33
|
|
|
@@ -14,7 +14,11 @@ change 的稳定身份是同一项目、领域内的 `YYYY-MM-DD-topic[-NN]` 目
|
|
|
14
14
|
|
|
15
15
|
归档实际位置和原回执表示封存;不在 README 增加 archived、archive_path 或全局 active/archived 列表。新 archive 不嵌套月份。旧历史移动须另有明确计划,验证所有 locator 和 DESIGN 摘要;不可变正文不做路径替换。
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
实际外部派遣的冻结输入、正式报告与可选会话定位文件按 <Path>{roots.references}/coordination/session-files.md</Path> 保存在 <Path>{roots.state}/specdev/changes/{change}/sessions/</Path>,随 change 整体归档并进入原完整性清单;既有历史副本保持原字节,不再创建新的日志副本;归档前仍核对 writer 已停止,不因 REPORT 显示 completed 就移动活动工作区。session 只是交接材料分组,不成为整体 Outcome 或执行状态的第二权威。引用按稳定 change 与对象内 locator 解析,历史原件不回填或清理。
|
|
18
|
+
|
|
19
|
+
## 独立开发复盘
|
|
20
|
+
|
|
21
|
+
RETRO 与升级方案使用 <Path>{roots.state}/specdev/retro/</Path>,与 changes、adr、context 平级;具体日期对象、原文来源、确认和执行回执归 <Path>{roots.workflows}/specdev/specdev-r-retro/references/records.md</Path>。R 不创建复盘专用 change,A 通过 RETRO 窄网关移至该目录的 archive。报告不成为 change 的完成依据或永久知识,不预造目录、不维护全局状态镜像。
|
|
18
22
|
|
|
19
23
|
## 唯一整体结论
|
|
20
24
|
|
|
@@ -32,9 +36,9 @@ Outcome: active
|
|
|
32
36
|
|
|
33
37
|
不默认创建 leadership epoch、空批准槽或每 Work 记录。实际交接、并行、worktree/集成发生时,在原计划、Ticket Evidence 或操作回执记录唯一负责者、获批写集、输入、真实交接与下一步。复杂任务 owner 从原 implementation-plan/goal-plan 的 `lead` 读取。无 Goal 且动作确需 owner 时,README 的 `## Ownership` 内保存 `Owner: <session locator>` 与 `Evidence: <对象内相对路径>[#anchor]`,证据指向实际会话/交接;设计 bootstrap 还保存 `Work: specdev/prototype` 且依据正文绑定该 Work。普通只读不预建所有权记录,字段不创造授权。
|
|
34
38
|
|
|
35
|
-
|
|
39
|
+
change README 的 Execution Context 是工作区、branch、base 与 Lead 的唯一事实源;实际执行才创建。每票原 Evidence 的 Workspace Execution Record 引用该上下文,保存实际实现者、固定输入、验证与失败历史;无票沿原 Direct Spec Evidence。格式和兼容边界见 <Path>{roots.workflows}/specdev/common/rules/execution-policy.md</Path>。父计划只导航,不复制 workspace 结果。
|
|
36
40
|
|
|
37
|
-
|
|
41
|
+
语言、用户工具和数量来自当前请求/既有项目说明。原 Goal/Implementation Plan 的 Execution Policy Source 说明调度来源;票据并发上限与已配置实现者人数限制分别检查。未知 config 独有字段保留;默认 UI 3 个、配置 2–4、明确用户数量覆盖,均不变。
|
|
38
42
|
|
|
39
43
|
## 创建、恢复和历史边界
|
|
40
44
|
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:speculo:specdev:execution-context:v1",
|
|
4
|
+
"title": "SpecDev change Execution Context",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": [
|
|
7
|
+
"schema_version",
|
|
8
|
+
"change",
|
|
9
|
+
"workspace_policy",
|
|
10
|
+
"workspace_ref",
|
|
11
|
+
"branch",
|
|
12
|
+
"base_sha",
|
|
13
|
+
"owner",
|
|
14
|
+
"ticket_execution"
|
|
15
|
+
],
|
|
16
|
+
"properties": {
|
|
17
|
+
"schema_version": {
|
|
18
|
+
"const": 1
|
|
19
|
+
},
|
|
20
|
+
"change": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}-[a-z0-9]+(?:-[a-z0-9]+)*$"
|
|
23
|
+
},
|
|
24
|
+
"workspace_policy": {
|
|
25
|
+
"enum": [
|
|
26
|
+
"current",
|
|
27
|
+
"worktree"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"workspace_ref": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"minLength": 1
|
|
33
|
+
},
|
|
34
|
+
"branch": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"minLength": 1
|
|
37
|
+
},
|
|
38
|
+
"base_sha": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"pattern": "^[a-f0-9]{40}(?:[a-f0-9]{24})?$"
|
|
41
|
+
},
|
|
42
|
+
"owner": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"minLength": 1
|
|
45
|
+
},
|
|
46
|
+
"ticket_execution": {
|
|
47
|
+
"enum": [
|
|
48
|
+
"auto",
|
|
49
|
+
"serial",
|
|
50
|
+
"parallel"
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
"max_parallel_tickets": {
|
|
54
|
+
"type": "integer",
|
|
55
|
+
"minimum": 1
|
|
56
|
+
},
|
|
57
|
+
"concurrent_implementation_limit": {
|
|
58
|
+
"type": "integer",
|
|
59
|
+
"minimum": 1
|
|
60
|
+
},
|
|
61
|
+
"integration_attempt_limit": {
|
|
62
|
+
"type": "integer",
|
|
63
|
+
"minimum": 1
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"additionalProperties": false
|
|
67
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:speculo:specdev:execution-record:v1",
|
|
4
|
+
"title": "SpecDev execution evidence",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": [
|
|
7
|
+
"schema_version",
|
|
8
|
+
"workspace_context",
|
|
9
|
+
"implementation_owners",
|
|
10
|
+
"status",
|
|
11
|
+
"checkpoint",
|
|
12
|
+
"verification",
|
|
13
|
+
"attempts"
|
|
14
|
+
],
|
|
15
|
+
"additionalProperties": false,
|
|
16
|
+
"properties": {
|
|
17
|
+
"schema_version": {
|
|
18
|
+
"const": 1
|
|
19
|
+
},
|
|
20
|
+
"ticket_id": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"pattern": "^T-\\d{2,}$"
|
|
23
|
+
},
|
|
24
|
+
"purpose": {
|
|
25
|
+
"const": "direct-spec"
|
|
26
|
+
},
|
|
27
|
+
"change": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"minLength": 1
|
|
30
|
+
},
|
|
31
|
+
"workspace_context": {
|
|
32
|
+
"const": "README.md#execution-context"
|
|
33
|
+
},
|
|
34
|
+
"implementation_owners": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"minItems": 1,
|
|
37
|
+
"uniqueItems": true,
|
|
38
|
+
"items": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"minLength": 1
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"status": {
|
|
44
|
+
"enum": [
|
|
45
|
+
"active",
|
|
46
|
+
"review",
|
|
47
|
+
"verified",
|
|
48
|
+
"blocked",
|
|
49
|
+
"cancelled"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
"checkpoint": {
|
|
53
|
+
"type": [
|
|
54
|
+
"string",
|
|
55
|
+
"null"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"attempts": {
|
|
59
|
+
"type": "integer",
|
|
60
|
+
"minimum": 0
|
|
61
|
+
},
|
|
62
|
+
"verification": {
|
|
63
|
+
"type": "object",
|
|
64
|
+
"required": [
|
|
65
|
+
"status",
|
|
66
|
+
"evidence",
|
|
67
|
+
"e2e"
|
|
68
|
+
],
|
|
69
|
+
"properties": {
|
|
70
|
+
"status": {
|
|
71
|
+
"enum": [
|
|
72
|
+
"pending",
|
|
73
|
+
"passed",
|
|
74
|
+
"failed"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"evidence": {
|
|
78
|
+
"type": [
|
|
79
|
+
"string",
|
|
80
|
+
"null"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
"e2e": {
|
|
84
|
+
"type": "object",
|
|
85
|
+
"required": [
|
|
86
|
+
"required",
|
|
87
|
+
"status",
|
|
88
|
+
"reason",
|
|
89
|
+
"evidence"
|
|
90
|
+
],
|
|
91
|
+
"properties": {
|
|
92
|
+
"required": {
|
|
93
|
+
"type": "boolean"
|
|
94
|
+
},
|
|
95
|
+
"status": {
|
|
96
|
+
"enum": [
|
|
97
|
+
"pending",
|
|
98
|
+
"passed",
|
|
99
|
+
"failed",
|
|
100
|
+
"not-required"
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
"reason": {
|
|
104
|
+
"type": [
|
|
105
|
+
"string",
|
|
106
|
+
"null"
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
"evidence": {
|
|
110
|
+
"type": [
|
|
111
|
+
"string",
|
|
112
|
+
"null"
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"additionalProperties": false
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
"additionalProperties": false
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"oneOf": [
|
|
123
|
+
{
|
|
124
|
+
"required": [
|
|
125
|
+
"ticket_id"
|
|
126
|
+
],
|
|
127
|
+
"not": {
|
|
128
|
+
"anyOf": [
|
|
129
|
+
{
|
|
130
|
+
"required": [
|
|
131
|
+
"purpose"
|
|
132
|
+
]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"required": [
|
|
136
|
+
"change"
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"required": [
|
|
144
|
+
"purpose",
|
|
145
|
+
"change"
|
|
146
|
+
],
|
|
147
|
+
"not": {
|
|
148
|
+
"required": [
|
|
149
|
+
"ticket_id"
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
]
|
|
154
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "urn:speculo:specdev:goal-plan:
|
|
3
|
+
"$id": "urn:speculo:specdev:goal-plan:v8",
|
|
4
4
|
"title": "SpecDev Goal Plan Frontmatter",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"required": [
|
|
@@ -11,15 +11,13 @@
|
|
|
11
11
|
"modes",
|
|
12
12
|
"orchestration",
|
|
13
13
|
"lead",
|
|
14
|
-
"concurrent_implementation_limit",
|
|
15
14
|
"integration_attempt_limit",
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"ready_for_execution"
|
|
15
|
+
"ready_for_execution",
|
|
16
|
+
"ticket_execution"
|
|
19
17
|
],
|
|
20
18
|
"properties": {
|
|
21
19
|
"schema_version": {
|
|
22
|
-
"const":
|
|
20
|
+
"const": 8
|
|
23
21
|
},
|
|
24
22
|
"artifact": {
|
|
25
23
|
"const": "goal-plan"
|
|
@@ -64,61 +62,23 @@
|
|
|
64
62
|
"type": "integer",
|
|
65
63
|
"minimum": 1
|
|
66
64
|
},
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"current",
|
|
70
|
-
"required"
|
|
71
|
-
]
|
|
65
|
+
"ready_for_execution": {
|
|
66
|
+
"type": "boolean"
|
|
72
67
|
},
|
|
73
|
-
"
|
|
68
|
+
"ticket_execution": {
|
|
74
69
|
"enum": [
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
|
|
70
|
+
"auto",
|
|
71
|
+
"serial",
|
|
72
|
+
"parallel"
|
|
73
|
+
],
|
|
74
|
+
"default": "auto"
|
|
78
75
|
},
|
|
79
|
-
"
|
|
80
|
-
"type": "
|
|
76
|
+
"max_parallel_tickets": {
|
|
77
|
+
"type": "integer",
|
|
78
|
+
"minimum": 1
|
|
81
79
|
}
|
|
82
80
|
},
|
|
83
81
|
"allOf": [
|
|
84
|
-
{
|
|
85
|
-
"if": {
|
|
86
|
-
"properties": {
|
|
87
|
-
"ticket_workspace_policy": {
|
|
88
|
-
"const": "current"
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
"required": [
|
|
92
|
-
"ticket_workspace_policy"
|
|
93
|
-
]
|
|
94
|
-
},
|
|
95
|
-
"then": {
|
|
96
|
-
"properties": {
|
|
97
|
-
"integration_gate": {
|
|
98
|
-
"const": "direct-parent"
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
"if": {
|
|
105
|
-
"properties": {
|
|
106
|
-
"ticket_workspace_policy": {
|
|
107
|
-
"const": "required"
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
"required": [
|
|
111
|
-
"ticket_workspace_policy"
|
|
112
|
-
]
|
|
113
|
-
},
|
|
114
|
-
"then": {
|
|
115
|
-
"properties": {
|
|
116
|
-
"integration_gate": {
|
|
117
|
-
"const": "candidate-merge"
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
82
|
{
|
|
123
83
|
"if": {
|
|
124
84
|
"properties": {
|