@namewta/speculo 0.6.0 → 0.7.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.
Files changed (116) hide show
  1. package/README.md +11 -11
  2. package/dist/src/cli.js +36 -128
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/index.d.ts +2 -4
  5. package/dist/src/index.js +173 -151
  6. package/dist/src/index.js.map +1 -1
  7. package/package.json +6 -4
  8. package/template/.speculo/README.md +4 -0
  9. package/template/canonical/canonical-specdev-engineering-cognitive-mentor.md +133 -141
  10. package/template/canonical/canonical-specdev-goal-plan.md +394 -377
  11. package/template/canonical/canonical-specdev-grill-with-docs.md +241 -178
  12. package/template/canonical/canonical-specdev-spec.md +132 -122
  13. package/template/canonical/canonical-specdev-tickets.md +176 -156
  14. package/template/canonical/canonical-specdev-wayfinder.md +106 -108
  15. package/template/commands/archive-and-consolidate.md +10 -8
  16. package/template/commands/handoff.md +2 -0
  17. package/template/commands/retro.md +3 -3
  18. package/template/commands/status.md +5 -4
  19. package/template/skills/archive-and-consolidate/SKILL.md +5 -9
  20. package/template/skills/archive-and-consolidate/assets/archive-plan-template.md +1 -1
  21. package/template/skills/archive-and-consolidate/references/archive-rules.md +4 -4
  22. package/template/skills/archive-and-consolidate/references/consolidation-rules.md +7 -8
  23. package/template/skills/archive-and-consolidate/references/knowledge-graduation.md +5 -2
  24. package/template/skills/github-npm-ops/SKILL.md +4 -2
  25. package/template/skills/github-npm-ops/references/issue-transport.md +26 -0
  26. package/template/skills/github-npm-ops/references/preflight-checklist.md +1 -1
  27. package/template/skills/github-npm-ops/scripts/issue-transport.mjs +227 -0
  28. package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +31 -145
  29. package/template/workflows/specdev/A-archive-and-consolidate/consolidation-interview.md +4 -6
  30. package/template/workflows/specdev/C-code-review/C-code-review.md +42 -0
  31. package/template/workflows/specdev/C-code-review/code-review-template.md +42 -0
  32. package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +45 -48
  33. package/template/workflows/specdev/D-diagnose-bugs/diagnosis-template.md +44 -40
  34. package/template/workflows/specdev/D-diagnose-bugs/feedback-loop.md +41 -0
  35. package/template/workflows/specdev/D-diagnose-bugs/hypothesis-and-instrumentation.md +32 -0
  36. package/template/workflows/specdev/D-diagnose-bugs/scripts/hitl-loop.template.sh +26 -0
  37. package/template/workflows/specdev/E-engineering-cognitive-mentor/E-engineering-cognitive-mentor.md +3 -3
  38. package/template/workflows/specdev/E-engineering-cognitive-mentor/persistence-and-resume.md +5 -20
  39. package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +17 -10
  40. package/template/workflows/specdev/G-grill-with-docs/adr-format.md +31 -17
  41. package/template/workflows/specdev/G-grill-with-docs/context-format.md +9 -29
  42. package/template/workflows/specdev/G-grill-with-docs/domain-modeling-rules.md +10 -5
  43. package/template/workflows/specdev/G-grill-with-docs/stakeholder-questionnaire.md +45 -0
  44. package/template/workflows/specdev/I-implement/I-implement.md +29 -14
  45. package/template/workflows/specdev/I-implement/delegated-evidence-template.md +11 -0
  46. package/template/workflows/specdev/I-implement/evidence-template.md +24 -10
  47. package/template/workflows/specdev/I-implement/execution-preflight.md +4 -4
  48. package/template/workflows/specdev/I-implement/merge-conflict-protocol.md +20 -0
  49. package/template/workflows/specdev/I-implement/tdd-mocking.md +19 -0
  50. package/template/workflows/specdev/I-implement/tdd-rules.md +14 -12
  51. package/template/workflows/specdev/I-implement/tdd-test-design.md +25 -0
  52. package/template/workflows/specdev/I-init-setup/I-init-setup.md +12 -9
  53. package/template/workflows/specdev/I-init-setup/config-template.json +1 -1
  54. package/template/workflows/specdev/I-init-setup/domain-layout-template.md +2 -2
  55. package/template/workflows/specdev/I-init-setup/status-template.json +2 -3
  56. package/template/workflows/specdev/I-init-setup/tracking-template.md +3 -0
  57. package/template/workflows/specdev/INDEX.md +64 -26
  58. package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +48 -38
  59. package/template/workflows/specdev/P-goal-plan/completion-control.md +19 -53
  60. package/template/workflows/specdev/P-goal-plan/delegated-execution-template.md +33 -0
  61. package/template/workflows/specdev/P-goal-plan/delegated-execution.md +53 -0
  62. package/template/workflows/specdev/P-goal-plan/goal-plan-template.md +9 -40
  63. package/template/workflows/specdev/P-goal-plan/orchestration-protocol.md +16 -68
  64. package/template/workflows/specdev/P-goal-plan/planning-modes.md +20 -48
  65. package/template/workflows/specdev/P-prototype/P-prototype.md +46 -0
  66. package/template/workflows/specdev/P-prototype/logic-prototype.md +24 -0
  67. package/template/workflows/specdev/P-prototype/prototype-record-template.md +46 -0
  68. package/template/workflows/specdev/P-prototype/ui-prototype.md +21 -0
  69. package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +1 -1
  70. package/template/workflows/specdev/S-spec/S-spec.md +2 -1
  71. package/template/workflows/specdev/T-tickets/T-tickets.md +3 -2
  72. package/template/workflows/specdev/T-tickets/ticket-readiness.md +1 -1
  73. package/template/workflows/specdev/T-tickets/ticket-template.md +1 -1
  74. package/template/workflows/specdev/T-tickets/tickets-map-template.md +1 -1
  75. package/template/workflows/specdev/T-triage/T-triage.md +65 -26
  76. package/template/workflows/specdev/T-triage/intake-protocol.md +32 -0
  77. package/template/workflows/specdev/T-triage/reconcile-protocol.md +34 -0
  78. package/template/workflows/specdev/T-triage/source-template.md +30 -0
  79. package/template/workflows/specdev/T-triage/triage-template.md +38 -24
  80. package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +3 -1
  81. package/template/workflows/specdev/_state/status.json +2 -3
  82. package/template/workflows/specdev/common/README.md +9 -2
  83. package/template/workflows/specdev/common/rules/artifact-contract.md +20 -9
  84. package/template/workflows/specdev/common/rules/change-completion.md +33 -0
  85. package/template/workflows/specdev/common/rules/deviation-control.md +2 -2
  86. package/template/workflows/specdev/common/rules/evidence-and-verification.md +1 -1
  87. package/template/workflows/specdev/common/rules/path-ownership.md +3 -3
  88. package/template/workflows/specdev/common/schemas/change-status.schema.json +43 -0
  89. package/template/workflows/specdev/common/schemas/code-review.schema.json +22 -0
  90. package/template/workflows/specdev/common/schemas/diagnosis.schema.json +19 -0
  91. package/template/workflows/specdev/common/schemas/prototype-record.schema.json +24 -0
  92. package/template/workflows/specdev/common/schemas/source.schema.json +20 -0
  93. package/template/workflows/specdev/common/schemas/status.schema.json +20 -78
  94. package/template/workflows/specdev/common/schemas/triage.schema.json +21 -0
  95. package/template/workflows/specdev/common/skills/code-review/SKILL.md +49 -0
  96. package/template/workflows/specdev/common/skills/code-review/references/fowler-smells.md +18 -0
  97. package/template/workflows/specdev/common/skills/code-review/references/reviewer-contracts.md +13 -0
  98. package/template/workflows/specdev/common/skills/code-review/references/source-discovery.md +22 -0
  99. package/template/workflows/specdev/common/skills/dev-worktree/SKILL.md +12 -9
  100. package/template/workflows/specdev/common/skills/dev-worktree/references/create.md +18 -13
  101. package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +8 -6
  102. package/template/workflows/specdev/common/skills/research/SKILL.md +38 -26
  103. package/template/workflows/specdev/common/skills/subagent-delivery/SKILL.md +3 -5
  104. package/template/workflows/specdev/common/tools/README.md +3 -0
  105. package/template/workflows/specdev/common/tools/validate-specdev.mjs +496 -30
  106. package/dist/src/migrate.d.ts +0 -38
  107. package/dist/src/migrate.js +0 -642
  108. package/dist/src/migrate.js.map +0 -1
  109. package/dist/src/skills-mirror.d.ts +0 -38
  110. package/dist/src/skills-mirror.js +0 -160
  111. package/dist/src/skills-mirror.js.map +0 -1
  112. package/template/workflows/specdev/A-archive-and-consolidate/archive-checklist.md +0 -15
  113. package/template/workflows/specdev/A-archive-and-consolidate/knowledge-promotion-rules.md +0 -32
  114. package/template/workflows/specdev/I-implement/code-review-process.md +0 -17
  115. package/template/workflows/specdev/I-implement/tdd-examples.md +0 -14
  116. package/template/workflows/specdev/I-init-setup/status-labels-template.md +0 -55
@@ -21,7 +21,7 @@ Spec 决定“为什么、为谁、系统应表现为何”。它可以锁定影
21
21
 
22
22
  按存在情况读取:
23
23
 
24
- - `specdev/changes/{change}/source-issue.md`
24
+ - `specdev/changes/{change}/source.md`
25
25
  - `specdev/changes/{change}/triage.md`
26
26
  - `specdev/changes/{change}/diagnosis.md`
27
27
  - `specdev/changes/{change}/LOG.md`
@@ -123,8 +123,11 @@ Spec 决定“为什么、为谁、系统应表现为何”。它可以锁定影
123
123
  1. 对照 下方 `<spec-schema>` 标签;
124
124
  2. 运行:
125
125
 
126
- > **结构校验:** 本地项目若已安装 Speculo,使用其 Node 校验器检查当前 change;
127
- > 纯网页环境逐项核对本文内联的 schema、Ready 清单和完成标准,并记录自动校验未运行。
126
+ ```bash
127
+ node Speculo Node 校验器 \
128
+ --stage spec \
129
+ specdev/changes/{change}
130
+ ```
128
131
 
129
132
  3. 更新 `specdev/status.json` 与 `specdev/changes/{change}/.status.json`;
130
133
  4. 汇报主要用户故事、验收合同、范围、验证接缝、风险和 Ready 状态;
@@ -351,33 +354,44 @@ SpecDev 通过分层工件避免同一决策被多个模型反复重做。每个
351
354
 
352
355
  | 工件 | 具体位置 | 必须决定 | 不应决定 |
353
356
  |---|---|---|---|
354
- | 分诊 | `specdev/changes/{change}/triage.md` | 请求类别、影响、风险、缺失输入和下一 work | 详细实现方案 |
357
+ | 来源快照 | `specdev/changes/{change}/source.md` | 原始请求、捕获时间、locator、hash 和关闭能力 | 当前产品合同或实现状态 |
358
+ | 分诊 | `specdev/changes/{change}/triage.md` | 请求类别、影响、风险、缺失输入、下一 work 和远程 reconcile 状态 | 详细实现方案或开发进度 |
355
359
  | 诊断 | `specdev/changes/{change}/diagnosis.md` | 复现、证据、根因、修复不变量和回归契约 | 未经验证的修复实现 |
356
360
  | 设计日志 | `specdev/changes/{change}/LOG.md` | 讨论轨迹、确认、延后、替代与废弃结论 | 当前架构权威摘要 |
357
361
  | 设计树 | `specdev/changes/{change}/design-tree.json` | 决策节点、依赖、当前 frontier、轮次与共识状态 | 领域真相或架构决定正文 |
358
- | 领域上下文 | `specdev/changes/{change}/CONTEXT.md` | 当前领域术语、语义和稳定不变量 | 临时会议记录 |
359
- | 架构决策 | `specdev/changes/{change}/ADR.md` | 已接受架构决策、原因、后果和替代关系 | 尚未决定的方案集合 |
362
+ | Change 领域上下文 | `specdev/changes/{change}/CONTEXT.md` | change 已确认、供下游使用的领域术语和语义 | 永久领域知识或临时会议记录 |
363
+ | Change 架构决策 | `specdev/changes/{change}/ADR.md` | 已成为本 change 下游合同的架构决策、原因、后果和替代关系 | 永久项目 ADR 或尚未决定的方案集合 |
360
364
  | Spec | `specdev/changes/{change}/spec.md` | 用户问题、外部行为、范围、验收合同、非功能要求和已锁定实现约束 | 文件级施工步骤 |
361
365
  | Ticket | `specdev/changes/{change}/ticket/NN-<ticket-name>.md` | 单一垂直切片的行为、决策、范围、路径所有权、执行路线和验证证据 | 跨 Ticket 里程碑治理 |
362
366
  | Tickets Map | `specdev/changes/{change}/tickets-map.md` | 依赖 DAG、合同覆盖、Ready 投影、并行候选和路径冲突 | 单 Ticket 的完整实现契约 |
363
367
  | Goal Plan | `specdev/changes/{change}/goal-plan.md` | 跨 Ticket 调度、Gate、共享所有权、迁移顺序、集成和偏差治理 | 复制 Ticket 全文 |
364
368
  | Evidence | `specdev/changes/{change}/evidence/T-NN.md` | 实际修改、命令、结果、验收映射、偏差、风险和提交引用 | 新的产品或架构决策 |
369
+ | 代码审查 | `specdev/changes/{change}/reviews/CR-###.md` | 固定点、标准轴和规范轴 finding | 实施修复或合并两轴排名 |
370
+ | 原型记录 | `specdev/changes/{change}/prototypes/{prototype-id}/record.md` | 一个问题、分支、资产、答案、promotion 和清理 | 生产实现或多个问题的计划 |
371
+ | Stakeholder 问卷 | `specdev/changes/{change}/questionnaires/{slug}.md` | 第三方原始回答和恢复条件 | 未经转录确认的产品/架构决定 |
365
372
  | Wayfinder 地图 | `specdev/changes/{change}/wayfinder-map.md` | 目的地、说明、已关闭决策索引、战争迷雾和范围之外 | 开放 Ticket 正文或答案详情 |
366
373
  | Wayfinder Ticket | `specdev/changes/{change}/investigation/{investigation-id}.md` | 一个可精确陈述的问题、类型、阻塞和关闭状态 | 解决方案评论或交付目标 |
367
374
  | Wayfinder solution comment | `specdev/changes/{change}/investigation/comments/{investigation-id}/NN-solution.md` | Ticket 的答案、结果事实和资产指针 | 地图索引或产品实现 |
368
375
  | 架构审查 | `specdev/changes/{change}/architecture-review.md` 与 `specdev/changes/{change}/architecture-review.html` | 深化候选、证据、可视化、选择和访谈状态 | 未经用户选择的执行契约 |
369
376
 
377
+ Change CONTEXT/ADR 是 active change 内的执行权威,不是 workflow 级永久知识。G 和其他设计/执行 Works 只读 `specdev/context/` 与 `specdev/adr/`;只有 A 在 change 完成、实现证据验证、毕业评估和用户确认后才能写入永久 namespace。未毕业内容随归档 change 保留,不能从 change 工件消失。
378
+
370
379
  ## 2. 权威顺序
371
380
 
372
381
  同一事项冲突时按下列顺序裁决:
373
382
 
374
383
  1. 用户最新明确决定;
375
- 2. 当前已接受架构决策:`specdev/changes/{change}/ADR.md`;
376
- 3. 当前外部行为权威:`specdev/changes/{change}/spec.md`;
377
- 4. 当前 Ticket 契约:`specdev/changes/{change}/ticket/NN-<ticket-name>.md`;
378
- 5. 当前跨 Ticket 编排:`specdev/changes/{change}/goal-plan.md`;
379
- 6. 当前代码与运行事实;
380
- 7. 旧计划、旧日志和未经确认的推断。
384
+ 2. 当前 change 已接受的架构决策:`specdev/changes/{change}/ADR.md`;
385
+ 3. 永久 ADR 与领域上下文:`specdev/adr/`、`specdev/context/`;
386
+ 4. 当前外部行为权威:`specdev/changes/{change}/spec.md`;
387
+ 5. 当前 Ticket 契约:`specdev/changes/{change}/ticket/NN-<ticket-name>.md`;
388
+ 6. 当前跨 Ticket 编排:`specdev/changes/{change}/goal-plan.md`;
389
+ 7. 当前代码与运行事实;
390
+ 8. 旧计划、旧日志和未经确认的推断。
391
+
392
+ 当前 change 决定与永久知识冲突时,必须在 LOG/ADR 中显式说明替代关系;它只约束当前 change,直到 A 决定是否提升并更新永久版本。
393
+
394
+ `specdev/changes/{change}/source.md` 只对“原始输入是什么”具有权威;后续用户决定、ADR 和 Spec 可以显式演进该意图。远程来源在摄入后发生变化不会自动改写本地合同,必须重新 Triage。
381
395
 
382
396
  代码事实可以证明计划已过时,但不能静默改写用户目标或已接受契约。出现这种情况时,按 下方 `<deviation-control>` 标签 退回相应工件修订。
383
397
 
@@ -492,7 +506,7 @@ Ticket 只有同时满足以下适用条件才可设置 `ready: true`:
492
506
  4. 可重复手动步骤、截图或查询结果;
493
507
  5. 代码阅读推断。
494
508
 
495
- E2E 仅在变更影响用户界面交互时加入验证矩阵,并且只由 Lead 在集成阶段执行。Worker 只记录场景、预期结果和待执行状态。API、CLI、后端、库或数据变更默认使用其稳定接缝,不追加 E2E。
509
+ E2E 仅在变更影响用户界面交互时加入验证矩阵。普通执行由当前实现或集成 owner 运行;委派执行中 Worker 只记录场景、预期结果和待执行状态,由 Lead 在集成阶段运行。API、CLI、后端、库或数据变更默认使用其稳定接缝,不追加 E2E。
496
510
 
497
511
  低层证据不能替代明确要求的用户行为证据。高风险迁移还需要 dry-run、调用点扫描、数据核对、监控信号或回滚演练。
498
512
 
@@ -535,7 +549,7 @@ E2E 仅在变更影响用户界面交互时加入验证矩阵,并且只由 Lea
535
549
  ## 1. 偏差等级
536
550
 
537
551
  - **local**:只改变局部实现,不改变 Ticket 的行为、范围、公共契约、路径所有权或验证;记录到 Evidence 后可继续。
538
- - **ticket**:改变 Ticket 的执行路线、可写范围、局部契约或验收映射,但不改变 Spec;必须停止相关修改、更新 Ticket 并获得 owner Lead 批准。
552
+ - **ticket**:改变 Ticket 的执行路线、可写范围、局部契约或验收映射,但不改变 Spec;必须停止相关修改、更新 Ticket 并获得该 Ticket 或计划明确的批准 owner 同意。
539
553
  - **spec**:改变外部行为、范围、用户故事、验收合同或非功能要求;必须返回 “编写 Spec 阶段”。
540
554
  - **architecture**:改变已接受架构决策或公共架构约束;必须返回 “设计访谈能力” 并更新 `specdev/changes/{change}/ADR.md`。
541
555
  - **release**:改变迁移、兼容窗口、发布门禁、回滚或不可逆批准点;必须停止并获得明确人工批准。
@@ -570,7 +584,7 @@ E2E 仅在变更影响用户界面交互时加入验证矩阵,并且只由 Lea
570
584
 
571
585
  - 未批准的 ticket、spec、architecture 或 release 偏差不得继续实现。
572
586
  - 不得通过扩大 `writable_paths`、删除测试、降低断言或把风险改写成“已知限制”来绕过停止。
573
- - 偏差影响并发 Agent 时,Lead 必须暂停受影响 Wave,重新计算路径所有权、依赖和 Gate
587
+ - 偏差影响普通并行执行时,当前集成 owner 必须暂停受影响 Wave,重新计算路径所有权、依赖和 Gate;委派执行由 Lead 承担同一责任。
574
588
 
575
589
  </deviation-control>
576
590
 
@@ -578,42 +592,54 @@ E2E 仅在变更影响用户界面交互时加入验证矩阵,并且只由 Lea
578
592
 
579
593
  # SpecDev Research
580
594
 
581
- ## 触发
595
+ ## 输入
596
+
597
+ - `decision`:研究要支持的一个具体决定;
598
+ - `questions`:需要回答的穷尽问题集;
599
+ - `stop_condition`:何时证据已足够;
600
+ - `caller`:D、G、S、W、R、T 或 I;
601
+ - `target_artifact`:调用方拥有且将接收结果的完整 Path。
582
602
 
583
- 当外部 API、库版本、协议、法规、产品能力或最佳实践会改变设计/实现决策,且当前材料不足时使用。
603
+ 缺少 owner 或 target 时返回阻塞,不创建 `{change}/research/` 等共享 namespace。
584
604
 
585
605
  ## 流程
586
606
 
587
- 1. 写清楚要支持的具体决策和停止条件。
588
- 2. 优先官方文档、规范、源代码、论文或维护者材料;技术问题优先一手来源。
589
- 3. 核对版本、发布日期、适用环境和已知限制。
590
- 4. 区分:来源明确事实、代码库事实、推断、建议。
591
- 5. 对关键结论至少交叉验证;来源冲突时并列呈现,不强行调和。
592
- 6. 记录摘要、证据、置信度、对 ADR/Spec/Ticket 的影响和仍未知项。
593
- 7. 长期有效且经实现验证后才可由 Archive 提升到永久 research。
607
+ 1. 固定问题、版本、环境和停止条件。
608
+ 2. 优先官方文档、规范、源代码、论文或维护者材料;技术问题使用一手来源。
609
+ 3. 核对发布日期、版本、适用环境、限制和已知冲突。
610
+ 4. 对每个会改变决定的实质声明就近给出来源;关键结论交叉验证,来源冲突时并列呈现。
611
+ 5. 区分来源事实、代码库事实、推断、建议和未知项。
612
+ 6. 返回一个 Markdown block,由 caller 原子写入 `target_artifact`;本 Skill 不自行写 state。
594
613
 
595
- ## 输出模板
614
+ ## 输出
596
615
 
597
616
  ```markdown
598
- # Research: <问题>
599
- - 决策用途:
600
- - 范围/版本:
601
- - 停止条件:
617
+ ## Research: <问题>
618
+ - Decision / target:
619
+ - Scope / version:
620
+ - Stop condition:
602
621
 
603
- ## Findings
604
622
  ### R-001
605
- - 结论:
606
- - 类型:官方事实 / 代码事实 / 推断 / 建议
607
- - 来源:
608
- - 置信度:high / medium / low
609
- - 适用限制:
610
- - 对工件影响:
611
-
612
- ## Conflicts and Unknowns
613
- ## Recommendation
623
+ - Claim:
624
+ - Type: official fact / code fact / inference / recommendation
625
+ - Source:
626
+ - Confidence:
627
+ - Limits:
628
+ - Artifact impact:
629
+
630
+ ### Conflicts and Unknowns
631
+ ### Recommendation
614
632
  ```
615
633
 
616
- 不得长篇复制受版权保护的来源;使用短引文和自己的准确摘要。
634
+ 不得长篇复制受版权保护内容。长期有效且经实现验证的结论只能由 Archive 从调用方工件提升到永久 research。
635
+
636
+ ## 完成标准
637
+
638
+ - 每个输入问题有答案或明确未知;
639
+ - 每个实质声明就近引用一手来源;
640
+ - 版本、限制、冲突和置信度已记录;
641
+ - 结果有唯一 owning artifact;
642
+ - 本 Skill 没有创建自己的 state 路径。
617
643
 
618
644
  </research>
619
645
 
@@ -632,7 +658,7 @@ E2E 仅在变更影响用户界面交互时加入验证矩阵,并且只由 Lea
632
658
  "execution": {
633
659
  "max_parallel": 3,
634
660
  "deep_ticket_human_approval": true,
635
- "shared_path_owner": "lead"
661
+ "shared_path_owner": "explicit"
636
662
  },
637
663
  "verification": {
638
664
  "test": null,
@@ -715,11 +741,10 @@ E2E 仅在变更影响用户界面交互时加入验证矩阵,并且只由 Lea
715
741
 
716
742
  ```json
717
743
  {
718
- "schema_version": 3,
744
+ "schema_version": 4,
719
745
  "workflow": "specdev",
720
746
  "active": [],
721
- "work_history": [],
722
- "completed": []
747
+ "archived": []
723
748
  }
724
749
  ```
725
750
 
@@ -730,19 +755,18 @@ E2E 仅在变更影响用户界面交互时加入验证矩阵,并且只由 Lea
730
755
  ```json
731
756
  {
732
757
  "$schema": "https://json-schema.org/draft/2020-12/schema",
733
- "$id": "urn:speculo:specdev:status:v3",
758
+ "$id": "urn:speculo:specdev:status:v4",
734
759
  "title": "SpecDev Global Status",
735
760
  "type": "object",
736
761
  "required": [
737
762
  "schema_version",
738
763
  "workflow",
739
764
  "active",
740
- "work_history",
741
- "completed"
765
+ "archived"
742
766
  ],
743
767
  "properties": {
744
768
  "schema_version": {
745
- "const": 3
769
+ "const": 4
746
770
  },
747
771
  "workflow": {
748
772
  "const": "specdev"
@@ -754,30 +778,27 @@ E2E 仅在变更影响用户界面交互时加入验证矩阵,并且只由 Lea
754
778
  "required": [
755
779
  "change",
756
780
  "current_work",
757
- "works_run",
758
- "result"
781
+ "works_run"
759
782
  ],
760
783
  "properties": {
761
784
  "change": {
762
- "type": "string"
785
+ "type": "string",
786
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*$"
763
787
  },
764
788
  "current_work": {
765
789
  "type": [
766
790
  "string",
767
791
  "null"
768
- ]
792
+ ],
793
+ "pattern": "^specdev/"
769
794
  },
770
795
  "works_run": {
771
796
  "type": "array",
772
797
  "items": {
773
- "type": "string"
774
- }
775
- },
776
- "result": {
777
- "type": [
778
- "string",
779
- "null"
780
- ]
798
+ "type": "string",
799
+ "pattern": "^specdev/"
800
+ },
801
+ "uniqueItems": true
781
802
  },
782
803
  "claimed_investigations": {
783
804
  "type": "array",
@@ -805,77 +826,23 @@ E2E 仅在变更影响用户界面交互时加入验证矩阵,并且只由 Lea
805
826
  "type": "string"
806
827
  }
807
828
  },
808
- "additionalProperties": true
829
+ "additionalProperties": false
809
830
  }
810
831
  }
811
832
  },
812
- "additionalProperties": true
813
- }
814
- },
815
- "work_history": {
816
- "type": "array",
817
- "items": {
818
- "type": "object",
819
- "required": [
820
- "change",
821
- "work_id",
822
- "started_at",
823
- "completed_at",
824
- "result"
825
- ],
826
- "properties": {
827
- "change": {
828
- "type": "string"
829
- },
830
- "work_id": {
831
- "type": "string",
832
- "pattern": "^specdev/"
833
- },
834
- "started_at": {
835
- "type": "string"
836
- },
837
- "completed_at": {
838
- "type": [
839
- "string",
840
- "null"
841
- ]
842
- },
843
- "result": {
844
- "type": [
845
- "string",
846
- "null"
847
- ]
848
- }
849
- },
850
- "additionalProperties": true
833
+ "additionalProperties": false
851
834
  }
852
835
  },
853
- "completed": {
836
+ "archived": {
854
837
  "type": "array",
855
838
  "items": {
856
- "type": "object",
857
- "required": [
858
- "change",
859
- "archived_at",
860
- "archive_path"
861
- ],
862
- "properties": {
863
- "change": {
864
- "type": "string"
865
- },
866
- "archived_at": {
867
- "type": "string"
868
- },
869
- "archive_path": {
870
- "type": "string",
871
- "pattern": "^specdev/archive/[0-9]{4}-[0-9]{2}/.+/$"
872
- }
873
- },
874
- "additionalProperties": true
875
- }
839
+ "type": "string",
840
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*$"
841
+ },
842
+ "uniqueItems": true
876
843
  }
877
844
  },
878
- "additionalProperties": true
845
+ "additionalProperties": false
879
846
  }
880
847
  ```
881
848
 
@@ -1053,6 +1020,49 @@ E2E 仅在变更影响用户界面交互时加入验证矩阵,并且只由 Lea
1053
1020
  }
1054
1021
  },
1055
1022
  "allOf": [
1023
+ {
1024
+ "if": {
1025
+ "properties": {
1026
+ "worktrees": {
1027
+ "contains": {
1028
+ "properties": {
1029
+ "provider": {
1030
+ "const": "git"
1031
+ }
1032
+ },
1033
+ "required": [
1034
+ "provider"
1035
+ ]
1036
+ }
1037
+ }
1038
+ }
1039
+ },
1040
+ "then": {
1041
+ "properties": {
1042
+ "worktrees": {
1043
+ "items": {
1044
+ "if": {
1045
+ "properties": {
1046
+ "provider": {
1047
+ "const": "git"
1048
+ }
1049
+ },
1050
+ "required": [
1051
+ "provider"
1052
+ ]
1053
+ },
1054
+ "then": {
1055
+ "properties": {
1056
+ "workspace_ref": {
1057
+ "pattern": "^specdev-worktree/T-[0-9]{2,}$"
1058
+ }
1059
+ }
1060
+ }
1061
+ }
1062
+ }
1063
+ }
1064
+ }
1065
+ },
1056
1066
  {
1057
1067
  "if": {
1058
1068
  "properties": {