@namewta/speculo 1.0.2 → 1.0.4
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 +8 -3
- package/package.json +2 -2
- package/template/AGENTS.md +3 -1
- package/template/canonical/canonical-specdev-goal-plan.md +757 -225
- package/template/canonical/canonical-specdev-grill-with-docs.md +221 -133
- package/template/canonical/canonical-specdev-spec.md +73 -3
- package/template/canonical/canonical-specdev-tickets.md +681 -252
- package/template/canonical/canonical-specdev-wayfinder.md +330 -113
- package/template/commands/archive-and-consolidate.md +39 -3
- package/template/commands/git-history-squash.md +76 -0
- package/template/commands/git-repository-audit.md +3 -602
- package/template/commands/references/git-repository-audit-procedure.md +608 -0
- package/template/skills/archive-and-consolidate/SKILL.md +1 -1
- package/template/skills/archive-and-consolidate/references/entry-procedure.md +11 -3
- package/template/skills/git-history-squash/SKILL.md +2 -0
- package/template/skills/git-history-squash/references/entry-procedure.md +1 -1
- package/template/skills/writing-great-skills/SKILL.md +2 -0
- package/template/skills/writing-great-skills/references/document-contract.md +23 -0
- package/template/workflows/learning/common/rules/activation-and-memory.md +7 -3
- package/template/workflows/ops/common/rules/activation-and-memory.md +7 -3
- package/template/workflows/person/common/rules/activation-and-memory.md +7 -3
- package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +13 -136
- package/template/workflows/specdev/G-grill-with-docs/references/interview-procedure.md +134 -0
- package/template/workflows/specdev/I-implement/I-implement.md +15 -189
- package/template/workflows/specdev/I-implement/evidence-template.md +12 -0
- package/template/workflows/specdev/I-implement/execution-preflight.md +1 -1
- package/template/workflows/specdev/I-implement/references/implementation-procedure.md +192 -0
- package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +28 -143
- package/template/workflows/specdev/P-goal-plan/completion-control.md +1 -1
- package/template/workflows/specdev/P-goal-plan/references/goal-lifecycle.md +35 -0
- package/template/workflows/specdev/P-goal-plan/references/goal-tickets-map-template.md +15 -0
- package/template/workflows/specdev/P-goal-plan/references/map-control.md +28 -0
- package/template/workflows/specdev/{O-orchestrate-implementation/O-orchestrate-implementation.md → P-goal-plan/references/multi-change-plan.md} +21 -33
- package/template/workflows/specdev/P-goal-plan/references/replan-and-recovery.md +21 -0
- package/template/workflows/specdev/P-goal-plan/references/single-change-plan.md +149 -0
- package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +48 -53
- package/template/workflows/specdev/R-review-architecture/architecture-review-template.md +19 -10
- package/template/workflows/specdev/R-review-architecture/proposal-to-ticket.md +3 -1
- package/template/workflows/specdev/R-review-architecture/review-rubric.md +52 -0
- package/template/workflows/specdev/README.md +36 -216
- package/template/workflows/specdev/T-tickets/T-tickets.md +19 -230
- package/template/workflows/specdev/T-tickets/references/planning-procedure.md +233 -0
- package/template/workflows/specdev/T-tickets/ticket-template.md +16 -0
- package/template/workflows/specdev/T-tickets/tickets-map-template.md +14 -0
- package/template/workflows/specdev/T-triage/T-triage.md +3 -1
- package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +24 -118
- package/template/workflows/specdev/W-wayfinder/references/initiative-discovery.md +29 -0
- package/template/workflows/specdev/W-wayfinder/references/initiative-template.json +8 -0
- package/template/workflows/specdev/W-wayfinder/references/map-traversal.md +120 -0
- package/template/workflows/specdev/W-wayfinder/wayfinder-map-template.md +4 -0
- package/template/workflows/specdev/common/README.md +1 -1
- package/template/workflows/specdev/common/rules/activation-and-memory.md +7 -3
- package/template/workflows/specdev/common/rules/artifact-contract.md +10 -2
- package/template/workflows/specdev/common/rules/operating-governance.md +38 -0
- package/template/workflows/specdev/common/rules/parent-implementation-orchestration.md +6 -2
- package/template/workflows/specdev/common/rules/skill-invocation.md +27 -0
- package/template/workflows/specdev/common/rules/workflow-routing.md +24 -0
- package/template/workflows/specdev/common/rules/workflow-state-and-lifecycle.md +93 -0
- package/template/workflows/specdev/common/schemas/goal-tickets-map.schema.json +33 -0
- package/template/workflows/specdev/common/schemas/initiative.schema.json +94 -0
- package/template/workflows/specdev/common/schemas/ticket.schema.json +168 -1
- package/template/workflows/specdev/common/schemas/tickets-map.schema.json +74 -6
- package/template/workflows/specdev/common/skills/code-review/SKILL.md +3 -2
- package/template/workflows/specdev/common/skills/code-review/references/risk-review.md +25 -0
- package/template/workflows/specdev/common/skills/plan-quality-review/SKILL.md +10 -0
- package/template/workflows/specdev/common/skills/plan-quality-review/references/checklist.md +13 -0
- package/template/workflows/specdev/common/skills/subagent-delivery/SKILL.md +5 -83
- package/template/workflows/specdev/common/skills/subagent-delivery/references/dispatch-and-accept.md +87 -0
- package/template/workflows/specdev/common/tools/README.md +14 -2
- package/template/workflows/specdev/common/tools/plan-contract.mjs +256 -0
- package/template/workflows/specdev/common/tools/ticket-control.mjs +251 -0
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +58 -40
- package/template/workflows/specdev/manifest.json +97 -1
- package/template/canonical/canonical-specdev-orchestrate-implementation.md +0 -2839
- package/template/workflows/specdev/O-orchestrate-implementation/implementation-evidence-template.md +0 -39
- package/template/workflows/specdev/O-orchestrate-implementation/implementation-map-template.md +0 -50
- package/template/workflows/specdev/O-orchestrate-implementation/implementation-plan-template.md +0 -61
- package/template/workflows/specdev/R-review-architecture/architecture-report-contract.md +0 -123
- package/template/workflows/specdev/R-review-architecture/architecture-review-report-template.html +0 -106
- /package/template/workflows/specdev/{O-orchestrate-implementation/conflict-and-drift.md → P-goal-plan/references/multi-conflict-and-drift.md} +0 -0
- /package/template/workflows/specdev/{O-orchestrate-implementation/execution-loop.md → P-goal-plan/references/multi-execution-loop.md} +0 -0
- /package/template/workflows/specdev/{O-orchestrate-implementation/input-readiness.md → P-goal-plan/references/multi-input-readiness.md} +0 -0
- /package/template/workflows/specdev/{O-orchestrate-implementation/super-dag.md → P-goal-plan/references/multi-super-dag.md} +0 -0
|
@@ -27,3 +27,7 @@ status: active
|
|
|
27
27
|
## 超出范围
|
|
28
28
|
|
|
29
29
|
<!-- 被裁定在目的地之外的工作;已关闭,永不升级。 -->
|
|
30
|
+
|
|
31
|
+
## Change 边界入口
|
|
32
|
+
|
|
33
|
+
存在多个候选 change 时,W 创建并按需读取 `<Path>{roots.state}/specdev/changes/{change}/initiative.json</Path>`;地图不复制其中的候选或子状态。每个目标 change 的 Grill/Spec/Ticket 独立拥有,交接规则见 `<Path>{roots.workflows}/specdev/W-wayfinder/references/initiative-discovery.md</Path>`。
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
- 校验器说明:`<Path>{roots.workflows}/specdev/common/tools/README.md</Path>`
|
|
50
50
|
- 外部技术研究 Skill:`<Path>{roots.workflows}/specdev/common/skills/research/SKILL.md</Path>`
|
|
51
51
|
- Ticket worktree Skill:`<Path>{roots.workflows}/specdev/common/skills/dev-worktree/SKILL.md</Path>`;仅 required Ticket 使用 source → parent-candidate → parent 状态机,current Ticket 使用 current workspace/direct-parent
|
|
52
|
-
- 动态 Agent 交付合同 Skill:`<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/SKILL.md</Path>`;P-goal-plan 可建立子 change Lead 合同,I-implement
|
|
52
|
+
- 动态 Agent 交付合同 Skill:`<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/SKILL.md</Path>`;P-goal-plan 可建立子 change Lead 合同,I-implement 在执行期派单与验收,Goal 编排的全局门约束
|
|
53
53
|
- 双轴代码审查 Skill:`<Path>{roots.workflows}/specdev/common/skills/code-review/SKILL.md</Path>`
|
|
54
54
|
|
|
55
55
|
## 加载原则
|
|
@@ -5,16 +5,20 @@
|
|
|
5
5
|
## Locate before read
|
|
6
6
|
|
|
7
7
|
1. 先解析当前 workflow 的 roots、状态索引和稳定 ID;不存在时静默跳过,不能凭旧路径猜测。
|
|
8
|
-
2. 根据当前请求、Work
|
|
8
|
+
2. 根据当前请求、Work 分支、关键词、稳定 ID、状态和 provenance,先搜索相关索引行或目录项,再定位最小相关 entry;不把索引全文默认装入上下文。
|
|
9
9
|
3. 只回读命中的 entry 和直接 provenance;需要恢复、冲突裁决、归档、迁移或执行安全证明时,才读取该阶段声明的完整证据集合。
|
|
10
10
|
4. 没有匹配证据时返回缺失证据并停止依赖该结论的分支,不补造事实。
|
|
11
11
|
|
|
12
12
|
## Memory writes
|
|
13
13
|
|
|
14
|
-
正式知识、永久 context、synthesis 或 archive 写入前,先解析唯一 owner 与 gateway,检查 pending transaction、lock、未完成 promotion 和 recovery evidence。gateway
|
|
14
|
+
正式知识、永久 context、synthesis 或 archive 写入前,先解析唯一 owner 与 gateway,检查 pending transaction、lock、未完成 promotion 和 recovery evidence。gateway 不明或事务未闭合时,只阻塞记忆写入,继续独立且已授权的审计、定位、验证和其他工作。
|
|
15
15
|
|
|
16
|
-
每次写入必须记录 source IDs、证据定位、验证时间或 digest
|
|
16
|
+
每次写入必须记录 source IDs、证据定位、验证时间或 digest;写入后定位受影响索引项并重新读取目标 entry,确认 owner、locator、内容和状态投影一致。原始证据不可被派生视图覆盖。
|
|
17
17
|
|
|
18
18
|
## Read budget
|
|
19
19
|
|
|
20
20
|
当前 Work 的权威状态、schema、Map/Plan、当前输入和直接所有权合同可以完整读取;非当前分支的知识树、历史 change、研究库、项目 Skill 和示例只按索引与关键词读取。执行、冲突、恢复和归档 Work 需要完整证据时,以该 Work 的显式合同为准。
|
|
21
|
+
|
|
22
|
+
## 事务与归属隔离
|
|
23
|
+
|
|
24
|
+
启动正式写入前检查原网关未闭合事务与写集。属于本任务的事务按原恢复协议处理;属于其他任务的事务不得接管、解锁、清空或覆盖。只暂停资源重叠的写入与依赖分支,继续独立、已授权工作;事务年龄不构成接管授权。写后按变更 ID 定位受影响的索引项并回读目标原文,不为核验默认整读整库。
|
|
@@ -15,7 +15,7 @@ SpecDev 通过分层工件避免同一决策被多个模型反复重做。每个
|
|
|
15
15
|
| Change 架构决策 | `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` | 已成为本 change 下游合同的架构决策、原因、后果和替代关系 | 永久项目 ADR 或尚未决定的方案集合 |
|
|
16
16
|
| Spec | `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>` | 用户问题、外部行为、范围、验收合同、非功能要求和已锁定实现约束 | 文件级施工步骤 |
|
|
17
17
|
| Ticket | `<Path>{roots.state}/specdev/changes/{change}/ticket/{ticket-file}.md</Path>` | 单一垂直切片的行为、决策、范围、路径所有权、执行路线和验证证据 | 跨 Ticket 里程碑治理 |
|
|
18
|
-
| Tickets Map | `<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>` | 总体实施背景、项目 Skill
|
|
18
|
+
| Tickets Map | `<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>` | 总体实施背景、项目 Skill 最低调用路由、依赖 DAG、合同覆盖、Ready 投影、并行候选和路径冲突 | 单 Ticket 的完整实现契约 |
|
|
19
19
|
| Goal Plan | `<Path>{roots.state}/specdev/changes/{change}/goal-plan.md</Path>` | 跨 Ticket 调度、Gate、共享所有权、迁移顺序、集成和偏差治理 | 复制 Ticket 全文 |
|
|
20
20
|
| Implementation Map | `<Path>{roots.state}/specdev/changes/{change}/implementation-map.md</Path>` | Ready 成员、组合 Ticket inventory、跨 change dependency/serialization 与 revision | 创建或改写子 Spec、Ticket 或实现细节 |
|
|
21
21
|
| Implementation Plan | `<Path>{roots.state}/specdev/changes/{change}/implementation-plan.md</Path>` | 父 Lead、全局 workspace/实现上限、frontier/Wave/locks/integration queue 和可恢复进度投影 | 改写子 change 权威或伪造完成 |
|
|
@@ -28,7 +28,7 @@ SpecDev 通过分层工件避免同一决策被多个模型反复重做。每个
|
|
|
28
28
|
| Wayfinder 地图 | `<Path>{roots.state}/specdev/changes/{change}/wayfinder-map.md</Path>` | 目的地、说明、已关闭决策索引、战争迷雾和范围之外 | 开放 Ticket 正文或答案详情 |
|
|
29
29
|
| Wayfinder Ticket | `<Path>{roots.state}/specdev/changes/{change}/investigation/{investigation-id}.md</Path>` | 一个可精确陈述的问题、类型、阻塞和关闭状态 | 解决方案评论或交付目标 |
|
|
30
30
|
| Wayfinder solution comment | `<Path>{roots.state}/specdev/changes/{change}/investigation/comments/{investigation-id}/NN-solution.md</Path>` | Ticket 的答案、结果事实和资产指针 | 地图索引或产品实现 |
|
|
31
|
-
| 架构审查 | `<Path>{roots.state}/specdev/changes/{change}/architecture-review.md</Path>`
|
|
31
|
+
| 架构审查 | `<Path>{roots.state}/specdev/changes/{change}/architecture-review.md</Path>` | 结构性候选、code-judo 机会、证据、选择和访谈状态 | 未经用户选择的执行契约 |
|
|
32
32
|
|
|
33
33
|
UI 设计包中的 `{design-id}` 由 P-prototype 分配为当前 change 内最小未占用的 `UI-NNN`;设计系统文档是唯一设计权威,comparison 与 final 不建立第二套规则。
|
|
34
34
|
|
|
@@ -78,3 +78,11 @@ Change CONTEXT/ADR 是 active change 内的执行权威,不是 workflow 级永
|
|
|
78
78
|
7. 重新运行 `<Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path>`。
|
|
79
79
|
|
|
80
80
|
不得仅在下游工件中覆盖上游权威。
|
|
81
|
+
|
|
82
|
+
## 5. Initiative 与计划调用扩展
|
|
83
|
+
|
|
84
|
+
W 的 `<Path>{roots.state}/specdev/changes/{change}/initiative.json</Path>` 只拥有候选 change 的边界、未知、依赖和目标指针;每个物化 child 的 Grill、Spec、Ticket 和状态仍独立。候选图不是实施 DAG,也不是共享可写设计树。
|
|
85
|
+
|
|
86
|
+
新 Ticket/普通 Map 保持原 schema_version,并使用 plan_contract_version: 1 扩展。Ticket 拥有经过核实的 Skill 调用绑定、语义资源和执行计划;Map 路由是其投影。规则为 `<Path>{roots.workflows}/specdev/common/rules/skill-invocation.md</Path>`。计划、产物数量与完成证据漂移必须由对应 owner 修订;不能仅改 map 状态。
|
|
87
|
+
|
|
88
|
+
父 `<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>` 是 goal-tickets-map 无状态入口,只引用现有 Implementation Map/Plan;它不能拥有第二份 status、owner 或任务清单。统一 P 拥有生命周期,旧 O 仅保留入口与恢复键。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 运行治理细则
|
|
2
|
+
|
|
3
|
+
规划、写入、并发、恢复、验收或归档时读取。
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
1. **先发现、后询问**:仓库、配置、schema、测试和文档能回答的事实先探索;只询问真正影响行为、架构、风险、范围、迁移或验收的偏好。
|
|
7
|
+
2. **规划深度随风险增长**:Lite、Standard、Deep 由复杂度和事故半径决定,不由文档长度决定。
|
|
8
|
+
3. **Ticket 是微型计划**:每个 Ready Ticket 决策完备,但不展开逐行代码。
|
|
9
|
+
4. **Goal Plan 按需出现**:简单单票可沿用既有 I/Direct Spec;用户要求长期目标、多个 change 或总控时由统一 P 显式生成,不以固定章节数量作为质量标准。
|
|
10
|
+
5. **证据优先**:每个验收合同、Ticket 和 Gate 都必须有可重复验证与 Evidence。
|
|
11
|
+
6. **路径所有权**:并发实现者只能修改授权项目路径;shared path 有唯一 owner。
|
|
12
|
+
7. **偏差显式化**:计划与事实冲突时停止、记录、修订,不静默扩大范围或改写契约。
|
|
13
|
+
8. **状态单一来源**:Ticket frontmatter 是单 Ticket 状态权威;Map 和 Goal Plan 是投影与编排。
|
|
14
|
+
9. **知识以当前真相为目标**:归档保留历史,永久知识只保留仍真实且经实现验证的结论。
|
|
15
|
+
10. **恢复依赖权威工件**:跨 Work 或 Agent 边界时同步 active change 的 `current_work`,成功完成后去重更新 `works_run`,返回下一 Work 和权威工件的完整路径。
|
|
16
|
+
11. **本地执行权威**:远程 Issue/PR/URL 只作为来源或完成投影;Spec、Ticket、Map、Goal Plan、Evidence 和状态始终以本地工件为准。
|
|
17
|
+
12. **完成与归档分离**:本地完成按 change completion 合同决定;远程 close 失败不回滚完成,但必须 reconcile 或 waive 后才归档。
|
|
18
|
+
13. **Lead 与隔离正交**:Lead 固定拥有 SpecDev 状态、Evidence 与父分支;是否派遣 subagent 由 Lead 动态决定。Goal Plan 创建时询问 Ticket 是否开启 worktree,默认不开启;选择只作用于当前 Goal Plan。
|
|
19
|
+
14. **策略化验收**:current 模式使用当前 workspace 严格串行、direct-parent 验证;required 模式使用 source worktree 与 parent-candidate。只有 required 模式创建独立 Ticket worktree。
|
|
20
|
+
15. **父子权威隔离**:父实现 change 只拥有 Ready 子 change 的组合 Ticket DAG、serialization、全局 workspace/资源和实现进度投影;子 change 继续拥有全部行为与实现合同。一个未完成子 change 只能属于一个未完成父实现 change。
|
|
21
|
+
|
|
22
|
+
共享规则:
|
|
23
|
+
|
|
24
|
+
- `<Path>{roots.workflows}/specdev/common/rules/planning-principles.md</Path>`
|
|
25
|
+
- `<Path>{roots.workflows}/specdev/common/rules/artifact-contract.md</Path>`
|
|
26
|
+
- `<Path>{roots.workflows}/specdev/common/rules/readiness-and-depth.md</Path>`
|
|
27
|
+
- `<Path>{roots.workflows}/specdev/common/rules/path-ownership.md</Path>`
|
|
28
|
+
- `<Path>{roots.workflows}/specdev/common/rules/evidence-and-verification.md</Path>`
|
|
29
|
+
- `<Path>{roots.workflows}/specdev/common/rules/deviation-control.md</Path>`
|
|
30
|
+
- `<Path>{roots.workflows}/specdev/common/rules/path-reference-contract.md</Path>`
|
|
31
|
+
- `<Path>{roots.workflows}/specdev/common/rules/codebase-design.md</Path>`
|
|
32
|
+
- `<Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>`
|
|
33
|
+
- `<Path>{roots.workflows}/specdev/common/rules/parent-implementation-orchestration.md</Path>`
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## 保真与局部暂停
|
|
37
|
+
|
|
38
|
+
用户明确的交付数量、默认工具、风险门禁和权限不会因为入口精简而改变;行为变化必须显式列出。真实源优先,保留软链接、必要元数据、许可和用户未提交改动;系统或插件缓存不属于可写源。资源冲突只暂停相关写集及其依赖闭包;不接管他人 owner、锁或未闭合事务。正式知识必须走原网关。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Parent Implementation Orchestration
|
|
2
2
|
|
|
3
|
-
本规则只约束 Ready Spec/Tickets 之后的跨 change
|
|
3
|
+
本规则只约束 Ready Spec/Tickets 之后的跨 change 实现,供统一 P-goal-plan、兼容 P-goal-plan、I-implement 与 A-archive-and-consolidate 读取。
|
|
4
4
|
|
|
5
5
|
## 输入边界
|
|
6
6
|
|
|
@@ -20,8 +20,12 @@
|
|
|
20
20
|
|
|
21
21
|
## I-implement 调用
|
|
22
22
|
|
|
23
|
-
父 Plan 可以替代缺失的子 Goal Plan 提供 workspace/integration 策略和全局执行边界。子 Goal Plan 存在时继续拥有子 change 内 Gate,但不得与父策略冲突。I-implement 完成或阻塞一个组合 Ticket 后返回父 O
|
|
23
|
+
父 Plan 可以替代缺失的子 Goal Plan 提供 workspace/integration 策略和全局执行边界。子 Goal Plan 存在时继续拥有子 change 内 Gate,但不得与父策略冲突。I-implement 完成或阻塞一个组合 Ticket 后返回父 P Goal(旧 O 入口保留恢复键),不要求用户重新激活 change。
|
|
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
|
+
|
|
29
|
+
## 局部阻塞不升级为全局停机
|
|
30
|
+
|
|
31
|
+
父创建前仍全部成员预检且 all-or-nothing。父开始运行后,单票 blocked/deviated、他人资源冲突或必需 Skill 失效只阻塞该票及其依赖闭包,父 Map/Plan 可保持 in_progress 与有效的全局执行门,继续独立已授权 frontier。只有共享的全局门禁失败、计划整体失效或没有合法 frontier 时,才将父运行暂停;不得为继续运行接管其他任务。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 可验证的 Skill 调用契约
|
|
2
|
+
|
|
3
|
+
本规则用于 T 规划、P 调度和 I 执行。Map 维护最低读取路由;每票 `skill_bindings` 才定义本票调用,二者不得互相代替。
|
|
4
|
+
|
|
5
|
+
## 定位与绑定
|
|
6
|
+
|
|
7
|
+
1. 从项目 Agent 指令解析真实 Skill 根,先枚举元数据和触发条件,再读取命中入口及当前阶段要求的参考;不整读所有 Skills。
|
|
8
|
+
2. 保留逻辑路径、解析真实源,检查不存在的路径、越界软链接、缓存和入口 `name`。默认不使用插件缓存或 node_modules 充当项目可维护源;用户维护的项目内软链接保持原状。仓库外技能需要先取得明确源域授权并由项目网关处理,控制器不会自行扩大根目录。
|
|
9
|
+
3. 每个绑定必须包含真实 `id`(SKILL 的 name)、Path 标签 `path`、入口字节 `sha256`、`phase`(plan/implement/verify)、`operation`、非空 `inputs`、`outputs`、`required` 与 `on_failure`。引用较长参考时在 references 字段 中记录明确 Path、sha256 与 `when`;相关参考在调用前按条件回读。
|
|
10
|
+
4. 必需绑定失败固定为 `block-ticket`;可选绑定只有说明 `condition` 与不适用原因才允许 `report-and-continue`。可选标记不能覆盖用户要求或技能自身硬门禁。
|
|
11
|
+
5. 在模板 frontmatter 中,数组对象用单行 JSON;不使用自定义 YAML 对象语法。缺失 Skill、摘要漂移、占位符或入口 ID 不符,票不得进入 ready。没有适用项目 Skill 时 `skill_bindings: []`,`skill_scan` 必须写真实扫描范围与不适用理由,Map 同步无适用项。
|
|
12
|
+
|
|
13
|
+
## 示例形状(生成真实票时全部替换)
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{"id":"project-test","path":"<Path>.agents/skills/project-test/SKILL.md</Path>","sha256":"<真实64位摘要>","phase":"verify","operation":"run-regression","inputs":["当前Ticket与定向diff"],"outputs":["含命令、退出码和验收映射的Evidence"],"required":true,"on_failure":"block-ticket","references":[]}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
此示例不是项目已存在的 Skill,不得复制为可执行绑定。SpecDev 自带技能在 Work 中按明确 Path 调用,不能伪装为项目 Skill。
|
|
20
|
+
|
|
21
|
+
## 执行证据
|
|
22
|
+
|
|
23
|
+
到相应阶段后,实际调用宿主能力或执行该 Skill 明确的步骤。记录技能 ID、phase、operation、所用摘要、输入定位、执行轨迹、输出与结果。仅展示 `@skill`、复制入口、声明“已读”都不是完成证据。
|
|
24
|
+
|
|
25
|
+
新版票 done 前,在本票 `<Path>{roots.state}/specdev/changes/{change}/evidence/{ticket-id}.md</Path>` 增加 `## Skill Execution Records`,紧接一个 JSON 数组代码块。每项有 `id`、`phase`、`operation`、`sha256`、`status`(passed/failed/skipped)、非空 `evidence` 字符串数组。required 项必须 passed;验证器只能检查记录结构与摘要一致,Lead 仍需回读真实工具/过程证据,不能把结构通过称为宿主调用已经被认证。
|
|
26
|
+
|
|
27
|
+
摘要变更先由 Lead 检查影响、更新绑定和 map 后重验;不自动接受最新文件,不回写已完成旧证据。
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# 场景路由
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
| 场景 | 入口 | 正常出口 |
|
|
5
|
+
|---|---|---|
|
|
6
|
+
| 需要冻结外部来源或审计摄入 | T-triage intake | D / G / W / P / S / C / T |
|
|
7
|
+
| 本地 change 完成且来源可关闭 | T-triage reconcile | A |
|
|
8
|
+
| 疑难 bug 或性能回归 | D-diagnose-bugs | S / T / I / R / W |
|
|
9
|
+
| 模糊但可通过决策访谈收敛 | G-grill-with-docs | P / S / T / W |
|
|
10
|
+
| 大需求包含多个未界定 change 或未知路径 | W-wayfinder | G / P / D / S / T |
|
|
11
|
+
| 需要检测项目 UI、选择设计方向并生成可运行设计包 | P-prototype | G / S / T / I |
|
|
12
|
+
| 固定点 diff、branch 或 PR review | C-code-review | completed / T / S / G |
|
|
13
|
+
| 外部行为已清楚 | S-spec | T-tickets |
|
|
14
|
+
| Ready Spec 需要垂直切片 | T-tickets | P-goal-plan / I |
|
|
15
|
+
| 单个或多个 Ready change 的 Goal 规划、持续实现与恢复 | P-goal-plan | I / verify / completed / blocked |
|
|
16
|
+
| 旧 O 调用或恢复键 | P-goal-plan | 统一 P 多 change 模式 |
|
|
17
|
+
| Ready 执行 | I-implement | Triage / A / blocked / deviation |
|
|
18
|
+
| 开发完成后需要理解当前 change 或追问实现 | L-learn-change | 返回用户 / 继续提问 / Triage / A |
|
|
19
|
+
| 架构健康扫描 | R-review-architecture | G / T |
|
|
20
|
+
|
|
21
|
+
同 change 下一阶段需要当前一手推理且上下文健康时继续;切换 repo/person/harness 或旁路时使用 `<Path>{roots.commands}/handoff.md</Path>`;严格限定且可独立派单时使用 Dispatch Packet;其他长上下文以权威工件路径恢复。平台不支持 clear/compact 时不虚构操作。
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
本地已清晰请求不强制绕行 Triage。G 是单 change Grill,P-prototype 是 UI 设计,不与统一 P-goal-plan 混淆。W 发现候选后逐个交 G/S/T;只有清晰且 Ready 的 child 才交 P。原缺陷诊断 D、风险分诊和远程 reconcile 职责不删除。
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# 状态、持久化与恢复细则
|
|
2
|
+
|
|
3
|
+
创建、恢复、迁移、关闭或归档 change 时读取;普通路由只读激活合同。
|
|
4
|
+
|
|
5
|
+
## 持久化约定
|
|
6
|
+
|
|
7
|
+
`speculo init` 创建固定状态骨架:
|
|
8
|
+
|
|
9
|
+
- 全局状态:`<Path>{roots.state}/specdev/status.json</Path>`
|
|
10
|
+
- 活跃 change:`<Path>{roots.state}/specdev/changes/</Path>`
|
|
11
|
+
- 历史归档:`<Path>{roots.state}/specdev/archive/</Path>`
|
|
12
|
+
|
|
13
|
+
刷新时 CLI 依据 `<Path>{roots.workflows}/specdev/runtime-contract.json</Path>` 处理持久化数据:配置使用 baseline 三方合并,登记的状态 schema 使用显式 migrator,其他 runtime 文件按字节保留。只有字段删除或结构迁移时才在 `<Path>{roots.state}/back/</Path>` 写入 targeted backup;冲突在替换 active 安装前阻塞。`<Path>{roots.state}/back/</Path>`、`<Path>{roots.state}/install.json</Path>`、`<Path>{roots.state}/managed.json</Path>` 与 `<Path>{roots.state}/baselines/</Path>` 均不属于 SpecDev 写入 namespace。
|
|
14
|
+
|
|
15
|
+
初始化设置 work 首次运行时生成配置并创建空的永久 namespace:
|
|
16
|
+
|
|
17
|
+
- 全局配置:`<Path>{roots.state}/specdev/config.json</Path>`
|
|
18
|
+
- 追踪规则:`<Path>{roots.state}/specdev/.config/tracking.md</Path>`
|
|
19
|
+
- 领域布局:`<Path>{roots.state}/specdev/.config/domain-layout.md</Path>`
|
|
20
|
+
- 永久 ADR:`<Path>{roots.state}/specdev/adr/</Path>`
|
|
21
|
+
- 永久领域上下文:`<Path>{roots.state}/specdev/context/</Path>`
|
|
22
|
+
- 永久研究:`<Path>{roots.state}/specdev/research/</Path>`
|
|
23
|
+
|
|
24
|
+
初始化只保证永久目录存在,不写知识内容。只有 A-archive-and-consolidate 在 change 完成、实现证据验证、毕业评估和用户确认后,才能创建、合并或改写这些永久 namespace 中的内容;其他 Works 只读。
|
|
25
|
+
|
|
26
|
+
单个 change 可以包含:
|
|
27
|
+
|
|
28
|
+
- `<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>`
|
|
29
|
+
- `<Path>{roots.state}/specdev/changes/{change}/source.md</Path>`
|
|
30
|
+
- `<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>`
|
|
31
|
+
- `<Path>{roots.state}/specdev/changes/{change}/diagnosis.md</Path>`
|
|
32
|
+
- `<Path>{roots.state}/specdev/changes/{change}/diagnostics/</Path>`
|
|
33
|
+
- `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`
|
|
34
|
+
- `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`
|
|
35
|
+
- `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>`
|
|
36
|
+
- `<Path>{roots.state}/specdev/changes/{change}/design-tree.json</Path>`
|
|
37
|
+
- `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`
|
|
38
|
+
- `<Path>{roots.state}/specdev/changes/{change}/ticket/</Path>`
|
|
39
|
+
- `<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>`
|
|
40
|
+
- `<Path>{roots.state}/specdev/changes/{change}/goal-plan.md</Path>`
|
|
41
|
+
- `<Path>{roots.state}/specdev/changes/{change}/implementation-map.md</Path>`
|
|
42
|
+
- `<Path>{roots.state}/specdev/changes/{change}/implementation-plan.md</Path>`
|
|
43
|
+
- `<Path>{roots.state}/specdev/changes/{change}/wayfinder-map.md</Path>`
|
|
44
|
+
- `<Path>{roots.state}/specdev/changes/{change}/investigation/</Path>`
|
|
45
|
+
- `<Path>{roots.state}/specdev/changes/{change}/investigation/comments/</Path>`
|
|
46
|
+
- `<Path>{roots.state}/specdev/changes/{change}/architecture-review.md</Path>`
|
|
47
|
+
- `<Path>{roots.state}/specdev/changes/{change}/evidence/</Path>`
|
|
48
|
+
- `<Path>{roots.state}/specdev/changes/{change}/reviews/</Path>`
|
|
49
|
+
- `<Path>{roots.state}/specdev/changes/{change}/prototypes/{design-id}/design-system.md</Path>`
|
|
50
|
+
- `<Path>{roots.state}/specdev/changes/{change}/prototypes/{design-id}/comparison/</Path>`
|
|
51
|
+
- `<Path>{roots.state}/specdev/changes/{change}/prototypes/{design-id}/final/</Path>`
|
|
52
|
+
- `<Path>{roots.state}/specdev/changes/{change}/questionnaires/</Path>`
|
|
53
|
+
- `<Path>{roots.state}/specdev/changes/{change}/learning/index.md</Path>` 与 `<Path>{roots.state}/specdev/changes/{change}/learning/{number}_{topic}.md</Path>`
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
## 状态字段
|
|
58
|
+
|
|
59
|
+
`<Path>{roots.state}/specdev/status.json</Path>` 使用全局 schema v5;Spec/Ticket/Tickets Map 保留各自 schema v3;新 Ticket/Map 使用附加 plan_contract_version: 1,config 使用 schema v5,Goal Plan 使用 schema v6,Implementation Map/Plan 使用 schema v1,`<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>` 使用 schema v6:
|
|
60
|
+
|
|
61
|
+
- `schema_version`(数字):全局状态 schema 版本,固定为 `5`。
|
|
62
|
+
- `workflow`(字符串):workflow 标识,固定为 `"specdev"`。
|
|
63
|
+
- `active`(对象数组):当前活跃 change 的严格索引;每项只能包含 `change`,格式 `"YYYY-MM-DD-<kebab-topic>"`。
|
|
64
|
+
- `archived`(去重字符串数组):已归档 change 名称。详细归档时间、路径和 promotion 摘要只存在于 `<Path>{roots.state}/specdev/archive/YYYY-MM/{change}/.status.json</Path>`。
|
|
65
|
+
|
|
66
|
+
`active[].change` 必须唯一,且不得同时出现在 `archived`。`current_work`、`works_run` 和 `claimed_investigations` 只存在于 change 自有 `<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>`:开始 Work 时设置 `current_work`;暂停或可恢复阻塞时保留;成功完成时加入 `works_run` 并清空;取消时清空但不加入。逐次时间、结果和审计证据由 change 自有状态、Work 主产物、Evidence 或 LOG 承载,不写入全局索引。
|
|
67
|
+
|
|
68
|
+
`<Path>{roots.state}/specdev/config.json</Path>` 的 `execution.max_implementation_agents`、`max_integration_attempts` 和 planning UI 设计候选字段均为可配置正整数;候选默认值与上限必须落在 2-4 且默认值不大于上限。仅 implementation subagent 受前者约束且不含 Lead,current workspace 仍保持单 writer 串行安全不变量;只读 review/research/test-observation agent 不设 SpecDev 数字上限。
|
|
69
|
+
|
|
70
|
+
`<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>` 的 `worktrees` 保存 Ticket 级 `base_sha`、父分支、workspace/implementation/integration owner、workspace locator、implementation/source checkpoint、适用 candidate/result SHA、验证、E2E disposition 与生命周期状态。current 记录使用 `workspace_ref=current` 和 direct-parent;required 记录使用 source/parent-candidate。每个实现 Ticket 都有一条记录;父分支只有在对应策略的验证通过后推进。`removed` 是 required 集成后来源 branch/worktree 完成清理的终态,必须保留全部集成与 E2E 证据。
|
|
71
|
+
|
|
72
|
+
领域状态枚举:
|
|
73
|
+
|
|
74
|
+
- change:`active | blocked | completed | archived`
|
|
75
|
+
- Ticket:`draft | ready | in_progress | blocked | review | done | deviated | cancelled`
|
|
76
|
+
- Investigation status:`open | closed`
|
|
77
|
+
- Investigation resolution:`answered | out-of-scope | superseded | cancelled | null`
|
|
78
|
+
- Planning Depth:`lite | standard | deep`
|
|
79
|
+
- Worktree:`planned | active | review | integrating | integrated | removed | blocked`
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
## 路径分配
|
|
84
|
+
|
|
85
|
+
1. workflow 运行状态写入 `<Path>{roots.state}/specdev/</Path>`。
|
|
86
|
+
2. change 产物写入 `<Path>{roots.state}/specdev/changes/{change}/</Path>`。
|
|
87
|
+
3. 项目代码、测试和用户要求的项目文档写入项目路径;Evidence 仅保存项目相对指针。
|
|
88
|
+
4. 长期知识候选先在 change 内形成;只有 A 在完成证据、毕业评估和用户确认全部通过后,才提升到对应永久 namespace。
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
## 扩展工件与兼容
|
|
92
|
+
|
|
93
|
+
W 可写 `<Path>{roots.state}/specdev/changes/{change}/initiative.json</Path>`:它只拥有候选 change 边界与目标指针,不复制各 child 的状态。父 Goal 的 `<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>` 使用 goal-tickets-map 指针合同,权威仍是父 Implementation Map/Plan。旧 O restore key 不变;旧票继续可读,未完成旧票在新执行前由 Lead 显式补全调用绑定、交付约束并重新过门禁,不自动迁移、重置状态或改写他人事务。
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:speculo:specdev:goal-tickets-map:v1",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": [
|
|
6
|
+
"schema_version",
|
|
7
|
+
"artifact",
|
|
8
|
+
"change",
|
|
9
|
+
"implementation_map",
|
|
10
|
+
"implementation_plan"
|
|
11
|
+
],
|
|
12
|
+
"properties": {
|
|
13
|
+
"schema_version": {
|
|
14
|
+
"const": 1
|
|
15
|
+
},
|
|
16
|
+
"artifact": {
|
|
17
|
+
"const": "goal-tickets-map"
|
|
18
|
+
},
|
|
19
|
+
"change": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"minLength": 1
|
|
22
|
+
},
|
|
23
|
+
"implementation_map": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"pattern": "^<Path>\\{roots.state\\}/specdev/changes/[^/]+/implementation-map\\.md</Path>$"
|
|
26
|
+
},
|
|
27
|
+
"implementation_plan": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"pattern": "^<Path>\\{roots.state\\}/specdev/changes/[^/]+/implementation-plan\\.md</Path>$"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"additionalProperties": false
|
|
33
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:speculo:specdev:initiative:v1",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": [
|
|
6
|
+
"schema_version",
|
|
7
|
+
"artifact",
|
|
8
|
+
"change",
|
|
9
|
+
"revision",
|
|
10
|
+
"destination",
|
|
11
|
+
"changes"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"schema_version": {
|
|
15
|
+
"const": 1
|
|
16
|
+
},
|
|
17
|
+
"artifact": {
|
|
18
|
+
"const": "initiative"
|
|
19
|
+
},
|
|
20
|
+
"change": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"minLength": 1
|
|
23
|
+
},
|
|
24
|
+
"revision": {
|
|
25
|
+
"type": "integer",
|
|
26
|
+
"minimum": 1
|
|
27
|
+
},
|
|
28
|
+
"destination": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"minLength": 1
|
|
31
|
+
},
|
|
32
|
+
"changes": {
|
|
33
|
+
"type": "array",
|
|
34
|
+
"items": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"required": [
|
|
37
|
+
"id",
|
|
38
|
+
"name",
|
|
39
|
+
"background",
|
|
40
|
+
"scope",
|
|
41
|
+
"non_goals",
|
|
42
|
+
"unknowns",
|
|
43
|
+
"depends_on",
|
|
44
|
+
"target"
|
|
45
|
+
],
|
|
46
|
+
"properties": {
|
|
47
|
+
"id": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
|
|
50
|
+
},
|
|
51
|
+
"name": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"minLength": 1
|
|
54
|
+
},
|
|
55
|
+
"background": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"minLength": 1
|
|
58
|
+
},
|
|
59
|
+
"scope": {
|
|
60
|
+
"type": "string",
|
|
61
|
+
"minLength": 1
|
|
62
|
+
},
|
|
63
|
+
"non_goals": {
|
|
64
|
+
"type": "array",
|
|
65
|
+
"items": {
|
|
66
|
+
"type": "string"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"unknowns": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"items": {
|
|
72
|
+
"type": "string"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"depends_on": {
|
|
76
|
+
"type": "array",
|
|
77
|
+
"items": {
|
|
78
|
+
"type": "string"
|
|
79
|
+
},
|
|
80
|
+
"uniqueItems": true
|
|
81
|
+
},
|
|
82
|
+
"target": {
|
|
83
|
+
"type": [
|
|
84
|
+
"string",
|
|
85
|
+
"null"
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"additionalProperties": false
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"additionalProperties": false
|
|
94
|
+
}
|
|
@@ -114,6 +114,157 @@
|
|
|
114
114
|
"pattern": "^<Path>[^<]+</Path>\\s*=>\\s*[^=].+$"
|
|
115
115
|
},
|
|
116
116
|
"uniqueItems": true
|
|
117
|
+
},
|
|
118
|
+
"plan_contract_version": {
|
|
119
|
+
"const": 1
|
|
120
|
+
},
|
|
121
|
+
"skill_scan": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"minLength": 1
|
|
124
|
+
},
|
|
125
|
+
"skill_bindings": {
|
|
126
|
+
"type": "array",
|
|
127
|
+
"items": {
|
|
128
|
+
"type": "object",
|
|
129
|
+
"required": [
|
|
130
|
+
"id",
|
|
131
|
+
"path",
|
|
132
|
+
"sha256",
|
|
133
|
+
"phase",
|
|
134
|
+
"operation",
|
|
135
|
+
"inputs",
|
|
136
|
+
"outputs",
|
|
137
|
+
"required",
|
|
138
|
+
"on_failure"
|
|
139
|
+
],
|
|
140
|
+
"properties": {
|
|
141
|
+
"id": {
|
|
142
|
+
"type": "string",
|
|
143
|
+
"minLength": 1
|
|
144
|
+
},
|
|
145
|
+
"path": {
|
|
146
|
+
"type": "string",
|
|
147
|
+
"pattern": "^<Path>[^<]+/SKILL\\.md</Path>$"
|
|
148
|
+
},
|
|
149
|
+
"sha256": {
|
|
150
|
+
"type": "string",
|
|
151
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
152
|
+
},
|
|
153
|
+
"phase": {
|
|
154
|
+
"enum": [
|
|
155
|
+
"plan",
|
|
156
|
+
"implement",
|
|
157
|
+
"verify"
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
"operation": {
|
|
161
|
+
"type": "string",
|
|
162
|
+
"minLength": 1
|
|
163
|
+
},
|
|
164
|
+
"inputs": {
|
|
165
|
+
"type": "array",
|
|
166
|
+
"minItems": 1,
|
|
167
|
+
"items": {
|
|
168
|
+
"type": "string",
|
|
169
|
+
"minLength": 1
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"outputs": {
|
|
173
|
+
"type": "array",
|
|
174
|
+
"minItems": 1,
|
|
175
|
+
"items": {
|
|
176
|
+
"type": "string",
|
|
177
|
+
"minLength": 1
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
"required": {
|
|
181
|
+
"type": "boolean"
|
|
182
|
+
},
|
|
183
|
+
"on_failure": {
|
|
184
|
+
"enum": [
|
|
185
|
+
"block-ticket",
|
|
186
|
+
"report-and-continue"
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
"condition": {
|
|
190
|
+
"type": "string",
|
|
191
|
+
"minLength": 1
|
|
192
|
+
},
|
|
193
|
+
"references": {
|
|
194
|
+
"type": "array",
|
|
195
|
+
"items": {
|
|
196
|
+
"type": "object",
|
|
197
|
+
"required": [
|
|
198
|
+
"path",
|
|
199
|
+
"sha256",
|
|
200
|
+
"when"
|
|
201
|
+
],
|
|
202
|
+
"properties": {
|
|
203
|
+
"path": {
|
|
204
|
+
"type": "string",
|
|
205
|
+
"pattern": "^<Path>[^<]+</Path>$"
|
|
206
|
+
},
|
|
207
|
+
"sha256": {
|
|
208
|
+
"type": "string",
|
|
209
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
210
|
+
},
|
|
211
|
+
"when": {
|
|
212
|
+
"type": "string",
|
|
213
|
+
"minLength": 1
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"additionalProperties": false
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
"allOf": [
|
|
221
|
+
{
|
|
222
|
+
"if": {
|
|
223
|
+
"properties": {
|
|
224
|
+
"required": {
|
|
225
|
+
"const": true
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
"required": [
|
|
229
|
+
"required"
|
|
230
|
+
]
|
|
231
|
+
},
|
|
232
|
+
"then": {
|
|
233
|
+
"properties": {
|
|
234
|
+
"on_failure": {
|
|
235
|
+
"const": "block-ticket"
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"if": {
|
|
242
|
+
"properties": {
|
|
243
|
+
"required": {
|
|
244
|
+
"const": false
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
"required": [
|
|
248
|
+
"required"
|
|
249
|
+
]
|
|
250
|
+
},
|
|
251
|
+
"then": {
|
|
252
|
+
"required": [
|
|
253
|
+
"condition"
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
],
|
|
258
|
+
"additionalProperties": false
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
"resource_claims": {
|
|
262
|
+
"type": "array",
|
|
263
|
+
"items": {
|
|
264
|
+
"type": "string",
|
|
265
|
+
"minLength": 1
|
|
266
|
+
},
|
|
267
|
+
"uniqueItems": true
|
|
117
268
|
}
|
|
118
269
|
},
|
|
119
270
|
"$defs": {
|
|
@@ -126,5 +277,21 @@
|
|
|
126
277
|
"uniqueItems": true
|
|
127
278
|
}
|
|
128
279
|
},
|
|
129
|
-
"additionalProperties": true
|
|
280
|
+
"additionalProperties": true,
|
|
281
|
+
"allOf": [
|
|
282
|
+
{
|
|
283
|
+
"if": {
|
|
284
|
+
"required": [
|
|
285
|
+
"plan_contract_version"
|
|
286
|
+
]
|
|
287
|
+
},
|
|
288
|
+
"then": {
|
|
289
|
+
"required": [
|
|
290
|
+
"skill_scan",
|
|
291
|
+
"skill_bindings",
|
|
292
|
+
"resource_claims"
|
|
293
|
+
]
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
]
|
|
130
297
|
}
|