@namewta/speculo 1.0.19 → 1.0.21

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 (194) hide show
  1. package/README.md +8 -7
  2. package/THIRD-PARTY-NOTICES.md +33 -0
  3. package/dist/src/agent-files.js +2 -2
  4. package/dist/src/agent-files.js.map +1 -1
  5. package/dist/src/agent-skills.d.ts +81 -0
  6. package/dist/src/agent-skills.js +530 -0
  7. package/dist/src/agent-skills.js.map +1 -0
  8. package/dist/src/cli.js +11 -3
  9. package/dist/src/cli.js.map +1 -1
  10. package/dist/src/config.js +5 -3
  11. package/dist/src/config.js.map +1 -1
  12. package/dist/src/doctor.js +7 -2
  13. package/dist/src/doctor.js.map +1 -1
  14. package/dist/src/index.d.ts +8 -0
  15. package/dist/src/index.js +23 -3
  16. package/dist/src/index.js.map +1 -1
  17. package/dist/src/manifest.d.ts +9 -0
  18. package/dist/src/manifest.js +45 -7
  19. package/dist/src/manifest.js.map +1 -1
  20. package/dist/src/refresh.js +40 -0
  21. package/dist/src/refresh.js.map +1 -1
  22. package/dist/src/structured.js +15 -4
  23. package/dist/src/structured.js.map +1 -1
  24. package/dist/src/transaction.d.ts +24 -3
  25. package/dist/src/transaction.js +191 -12
  26. package/dist/src/transaction.js.map +1 -1
  27. package/package.json +7 -4
  28. package/scripts/validate-skills.mjs +56 -0
  29. package/template/AGENTS.md +1 -1
  30. package/template/CLAUDE.md +1 -1
  31. package/template/canonical/canonical-specdev-goal-plan.md +156 -28
  32. package/template/canonical/canonical-specdev-grill-with-docs.md +153 -31
  33. package/template/canonical/canonical-specdev-spec.md +153 -27
  34. package/template/canonical/canonical-specdev-tickets.md +153 -27
  35. package/template/canonical/canonical-specdev-wayfinder.md +142 -27
  36. package/template/commands/retro.md +11 -9
  37. package/template/skills/archive-and-consolidate/SKILL.md +163 -7
  38. package/template/skills/archive-and-consolidate/references/cleanup-rules.md +1 -1
  39. package/template/skills/docs-sync/references/agents/claude-redirect.md +8 -8
  40. package/template/skills/docs-sync/references/agents/content-contract.md +1 -1
  41. package/template/skills/docs-sync/references/agents/manifest-discovery.md +7 -7
  42. package/template/skills/docs-sync/references/agents/role-classification.md +4 -4
  43. package/template/skills/docs-sync/references/agents-contract.md +1 -1
  44. package/template/skills/engineering-standards-builder/SKILL.md +149 -9
  45. package/template/skills/engineering-standards-builder/agents/openai.yaml +2 -0
  46. package/template/skills/engineering-standards-builder/manifest.txt +2 -1
  47. package/template/skills/engineering-standards-builder/references/rules/09-mechanical-guardrails.md +9 -0
  48. package/template/skills/engineering-standards-builder/scripts/validate-builder.mjs +4 -7
  49. package/template/skills/git-history-squash/SKILL.md +87 -11
  50. package/template/skills/git-history-squash/agents/openai.yaml +2 -0
  51. package/template/skills/optimize-codex-config/SKILL.md +71 -11
  52. package/template/skills/{speculo-retro/references/entry-procedure.md → retrospective/SKILL.md} +12 -8
  53. package/template/skills/{speculo-retro → retrospective}/references/friction-taxonomy.md +22 -13
  54. package/template/skills/{speculo-retro → retrospective}/references/issue-drafting-sop.md +10 -20
  55. package/template/skills/source-code-zip/SKILL.md +44 -8
  56. package/template/skills/source-code-zip/references/{entry-procedure.md → cli-reference.md} +0 -43
  57. package/template/skills/upstream-fork-sync/SKILL.md +71 -8
  58. package/template/skills/{writing-great-skills → writing-for-agents}/GLOSSARY.md +1 -1
  59. package/template/skills/writing-for-agents/SKILL.md +22 -0
  60. package/template/skills/writing-for-agents/agents/openai.yaml +2 -0
  61. package/template/skills/{writing-great-skills/references/entry-procedure.md → writing-for-agents/references/authoring-principles.md} +2 -9
  62. package/template/workflows/ops/D-project-deploy/D-project-deploy.md +1 -1
  63. package/template/workflows/ops/H-host-manage/H-host-manage.md +4 -0
  64. package/template/workflows/ops/H-host-manage/references/host-profiles.md +4 -0
  65. package/template/workflows/ops/I-initialize/I-initialize.md +1 -1
  66. package/template/workflows/ops/INDEX.md +2 -0
  67. package/template/workflows/ops/README.md +7 -3
  68. package/template/workflows/ops/S-server-connect/S-server-connect.md +5 -5
  69. package/template/workflows/ops/V-inventory-view/V-inventory-view.md +2 -0
  70. package/template/workflows/ops/common/CAPABILITIES.md +2 -0
  71. package/template/workflows/ops/common/USAGE.md +5 -5
  72. package/template/workflows/ops/common/WORKSPACE-USAGE.md +29 -2
  73. package/template/workflows/ops/common/examples/README.md +1 -1
  74. package/template/workflows/ops/common/examples/register.example.json +7 -3
  75. package/template/workflows/ops/common/examples/server-connection.example.json +11 -0
  76. package/template/workflows/ops/common/rules/deployment-layout.md +1 -1
  77. package/template/workflows/ops/common/rules/host-root-and-onboarding.md +47 -0
  78. package/template/workflows/ops/common/rules/persistence-and-secrets.md +1 -1
  79. package/template/workflows/ops/common/rules/research-and-decisions.md +8 -0
  80. package/template/workflows/ops/common/rules/server-onboarding.md +3 -3
  81. package/template/workflows/ops/common/rules/workspace-and-authorization.md +2 -2
  82. package/template/workflows/ops/common/schemas/fleet-view.schema.json +64 -0
  83. package/template/workflows/ops/common/schemas/host.schema.json +19 -0
  84. package/template/workflows/ops/common/schemas/plan.schema.json +57 -0
  85. package/template/workflows/ops/common/schemas/root-confirmation.schema.json +118 -0
  86. package/template/workflows/ops/common/schemas/server-connection.schema.json +67 -0
  87. package/template/workflows/ops/common/schemas/server-discovery.schema.json +171 -0
  88. package/template/workflows/ops/common/schemas/spec.schema.json +19 -0
  89. package/template/workflows/ops/common/schemas/status.schema.json +19 -0
  90. package/template/workflows/ops/common/templates/FLEET.html +1 -1
  91. package/template/workflows/ops/common/templates/HOST-README.md +3 -1
  92. package/template/workflows/ops/common/tests/test_ops.mjs +8 -11
  93. package/template/workflows/ops/common/tests/test_ops_bootstrap.mjs +101 -16
  94. package/template/workflows/ops/common/tests/test_ops_onboarding.mjs +225 -0
  95. package/template/workflows/ops/common/tests/test_ops_workspace.mjs +17 -8
  96. package/template/workflows/ops/common/tools/demo-local.mjs +4 -0
  97. package/template/workflows/ops/common/tools/opslib/agent.mjs +26 -0
  98. package/template/workflows/ops/common/tools/opslib/bootstrap.mjs +52 -26
  99. package/template/workflows/ops/common/tools/opslib/cli.mjs +1 -0
  100. package/template/workflows/ops/common/tools/opslib/core.mjs +1 -1
  101. package/template/workflows/ops/common/tools/opslib/docs.mjs +1 -0
  102. package/template/workflows/ops/common/tools/opslib/execution.mjs +4 -0
  103. package/template/workflows/ops/common/tools/opslib/fleet.mjs +26 -4
  104. package/template/workflows/ops/common/tools/opslib/host_recipes.mjs +34 -0
  105. package/template/workflows/ops/common/tools/opslib/model.mjs +6 -0
  106. package/template/workflows/ops/common/tools/opslib/onboarding.mjs +215 -0
  107. package/template/workflows/ops/common/tools/opslib/planner.mjs +3 -0
  108. package/template/workflows/ops/common/tools/opslib/transport.mjs +10 -6
  109. package/template/workflows/ops/common/tools/opslib/workspace_cli.mjs +20 -1
  110. package/template/workflows/ops/common/tools/server-discover.sh +65 -0
  111. package/template/workflows/ops/common/tools/validate-ops.mjs +1 -1
  112. package/template/workflows/ops/manifest.json +12 -5
  113. package/template/workflows/specdev/A-archive-and-consolidate/consolidation-interview.md +3 -3
  114. package/template/workflows/specdev/C-code-review/C-code-review.md +1 -1
  115. package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +6 -0
  116. package/template/workflows/specdev/G-grill-with-docs/references/interview-procedure.md +6 -6
  117. package/template/workflows/specdev/I-implement/references/implementation-procedure.md +1 -1
  118. package/template/workflows/specdev/I-implement/tdd-rules.md +4 -0
  119. package/template/workflows/specdev/I-init-setup/config-template.json +5 -1
  120. package/template/workflows/specdev/INDEX.md +2 -2
  121. package/template/workflows/specdev/P-goal-plan/planning-modes.md +1 -1
  122. package/template/workflows/specdev/P-prototype/P-prototype.md +7 -3
  123. package/template/workflows/specdev/P-prototype/logic-protocol.md +11 -0
  124. package/template/workflows/specdev/P-prototype/logic-template.md +27 -0
  125. package/template/workflows/specdev/P-prototype/project-preview-protocol.md +9 -0
  126. package/template/workflows/specdev/R-retro/R-retro.md +26 -0
  127. package/template/workflows/specdev/R-retro/retro-template.md +27 -0
  128. package/template/workflows/specdev/R-review-architecture/references/selected-design.md +1 -1
  129. package/template/workflows/specdev/README.md +13 -2
  130. package/template/workflows/specdev/S-spec/S-spec.md +4 -0
  131. package/template/workflows/specdev/T-tickets/T-tickets.md +4 -0
  132. package/template/workflows/specdev/T-triage/T-triage.md +31 -25
  133. package/template/workflows/specdev/T-triage/capture-protocol.md +1 -1
  134. package/template/workflows/specdev/T-triage/ci-security-protocol.md +11 -0
  135. package/template/workflows/specdev/T-triage/intake-protocol.md +10 -4
  136. package/template/workflows/specdev/T-triage/pr-delivery-protocol.md +13 -0
  137. package/template/workflows/specdev/T-triage/pr-record-template.md +39 -0
  138. package/template/workflows/specdev/T-triage/publish-protocol.md +1 -1
  139. package/template/workflows/specdev/T-triage/queue-protocol.md +7 -0
  140. package/template/workflows/specdev/T-triage/reconcile-protocol.md +1 -1
  141. package/template/workflows/specdev/T-triage/references/issue-pr-policy.md +23 -0
  142. package/template/workflows/specdev/T-triage/references/release-authentication.md +9 -0
  143. package/template/workflows/specdev/T-triage/references/release-notes-injection.md +21 -0
  144. package/template/workflows/specdev/T-triage/references/workflow-yaml-reference.md +37 -0
  145. package/template/workflows/specdev/T-triage/release-preflight.md +13 -0
  146. package/template/workflows/specdev/T-triage/release-protocol.md +12 -0
  147. package/template/workflows/specdev/T-triage/release-recovery.md +18 -0
  148. package/template/workflows/specdev/T-triage/remote-operations.md +25 -0
  149. package/template/workflows/specdev/T-triage/scripts/github-transport.mjs +208 -0
  150. package/template/workflows/specdev/T-triage/source-template.md +7 -0
  151. package/template/workflows/specdev/T-triage/triage-run-template.md +34 -0
  152. package/template/workflows/specdev/T-triage/triage-template.md +4 -1
  153. package/template/workflows/specdev/common/rules/artifact-contract.md +7 -0
  154. package/template/workflows/specdev/common/rules/change-completion.md +6 -0
  155. package/template/workflows/specdev/common/rules/workflow-routing.md +6 -0
  156. package/template/workflows/specdev/common/rules/workflow-state-and-lifecycle.md +1 -1
  157. package/template/workflows/specdev/common/schemas/config.schema.json +137 -26
  158. package/template/workflows/specdev/common/schemas/logic-prototype.schema.json +62 -0
  159. package/template/workflows/specdev/common/schemas/pull-request.schema.json +90 -0
  160. package/template/workflows/specdev/common/schemas/retrospective.schema.json +58 -0
  161. package/template/workflows/specdev/common/schemas/triage-run.schema.json +149 -0
  162. package/template/workflows/specdev/common/schemas/triage.schema.json +117 -15
  163. package/template/workflows/specdev/common/tools/delivery-artifacts.mjs +95 -0
  164. package/template/workflows/specdev/common/tools/validate-specdev.mjs +60 -19
  165. package/template/workflows/specdev/runtime-contract.json +4 -2
  166. package/template/skills/archive-and-consolidate/references/entry-procedure.md +0 -178
  167. package/template/skills/docs-sync/references/entry-procedure.md +0 -3
  168. package/template/skills/engineering-standards-builder/references/entry-procedure.md +0 -154
  169. package/template/skills/git-history-squash/references/entry-procedure.md +0 -94
  170. package/template/skills/github-npm-ops/SKILL.md +0 -19
  171. package/template/skills/github-npm-ops/references/ci-and-security-ops.md +0 -178
  172. package/template/skills/github-npm-ops/references/entry-procedure.md +0 -25
  173. package/template/skills/github-npm-ops/references/failure-recovery.md +0 -123
  174. package/template/skills/github-npm-ops/references/issue-pr-triage.md +0 -227
  175. package/template/skills/github-npm-ops/references/issue-transport.md +0 -26
  176. package/template/skills/github-npm-ops/references/package-json-checklist.md +0 -171
  177. package/template/skills/github-npm-ops/references/preflight-checklist.md +0 -39
  178. package/template/skills/github-npm-ops/references/publish-detection.md +0 -68
  179. package/template/skills/github-npm-ops/references/release-notes-injection.md +0 -238
  180. package/template/skills/github-npm-ops/references/release-pipeline.md +0 -108
  181. package/template/skills/github-npm-ops/references/setup-npm-token.md +0 -63
  182. package/template/skills/github-npm-ops/references/troubleshooting-playbook.md +0 -293
  183. package/template/skills/github-npm-ops/references/version-bump-flow.md +0 -217
  184. package/template/skills/github-npm-ops/references/workflow-yaml-reference.md +0 -268
  185. package/template/skills/github-npm-ops/scripts/issue-transport.mjs +0 -227
  186. package/template/skills/optimize-codex-config/references/entry-procedure.md +0 -78
  187. package/template/skills/speculo-retro/SKILL.md +0 -19
  188. package/template/skills/upstream-fork-sync/references/entry-procedure.md +0 -78
  189. package/template/skills/writing-great-skills/SKILL.md +0 -23
  190. /package/template/skills/{writing-great-skills → writing-for-agents}/references/document-contract.md +0 -0
  191. /package/template/workflows/specdev/{G-grill-with-docs → common/rules}/adr-format.md +0 -0
  192. /package/template/workflows/specdev/{G-grill-with-docs → common/rules}/context-format.md +0 -0
  193. /package/template/workflows/specdev/{I-implement → common/rules}/design-it-twice.md +0 -0
  194. /package/template/workflows/specdev/{G-grill-with-docs/domain-modeling-rules.md → common/rules/domain-modeling.md} +0 -0
@@ -34,6 +34,10 @@ node Speculo Node 校验器 --stage spec --repo <project-root> specdev/changes/{
34
34
 
35
35
  只有用户请求或工作流已显式串联时才进入 “拆分 Tickets 阶段”;产出 Ready Spec 本身不授权实施。
36
36
 
37
+ ## 原型证据
38
+
39
+ 可以引用已验证 LOGIC/UI 原型中的行为、边界与已确认决定,记录具体 locator 和验证证据;源码片段可承载设计选择,但不自动成为生产实现。未闭合高影响产品决定返回 G,S 综合已确认设计而不重新开启无关访谈。
40
+
37
41
  ---
38
42
 
39
43
  ## 参考内容
@@ -320,6 +324,13 @@ W 的 `specdev/changes/{change}/initiative.json` 只拥有候选 change 的边
320
324
 
321
325
  父 `specdev/changes/{change}/tickets-map.md` 是 goal-tickets-map 无状态入口,只引用现有 Implementation Map/Plan;它不能拥有第二份 status、owner 或任务清单。统一 P 拥有生命周期,旧 O 仅保留入口与恢复键。
322
326
 
327
+ ## 新增工件 owner
328
+
329
+ - T:specdev/changes/{change}/pull-requests/PR-###.md 拥有 PR 交付回执;specdev/triage-runs/TRI-###.md 拥有独立远程操作,绝不复用 external_action/publish_action/capture。
330
+ - R-retro:specdev/changes/{change}/retro/RETRO-###.md 拥有活动复盘建议和来源;不成为永久知识。
331
+ - P:specdev/changes/{change}/prototypes/LOGIC-NNN/logic.md 记录逻辑模型与浏览器证据;index.html 是可运行原型,ready 时 hash 与记录一致。
332
+ - 来源更新:specdev/changes/{change}/source.md 冻结后保持不变。T 将后续读取写入 specdev/changes/{change}/sources/SRC-###.md,记录 replaces、固定 SHA/hash、完整性和原 locator,triage 正文选择有效快照;不得把新远程事实自动升级为已接受 Spec。
333
+
323
334
  </artifact-contract>
324
335
 
325
336
  <readiness-and-depth>
@@ -547,7 +558,7 @@ Evidence 原文不出仓库。对 GitHub 的公共投影由 T-triage publish 按
547
558
 
548
559
  ```json
549
560
  {
550
- "schema_version": 5,
561
+ "schema_version": 6,
551
562
  "interaction_language": "zh-CN",
552
563
  "artifact_language": "zh-CN",
553
564
  "git": {
@@ -571,6 +582,10 @@ Evidence 原文不出仓库。对 GitHub 的公共投影由 T-triage publish 按
571
582
  "require_evidence": true,
572
583
  "ui_design_default_candidates": 3,
573
584
  "ui_design_max_candidates": 4
585
+ },
586
+ "github": {
587
+ "include_external_prs": false,
588
+ "labels": {}
574
589
  }
575
590
  }
576
591
  ```
@@ -582,60 +597,171 @@ Evidence 原文不出仓库。对 GitHub 的公共投影由 T-triage publish 按
582
597
  ```json
583
598
  {
584
599
  "$schema": "https://json-schema.org/draft/2020-12/schema",
585
- "$id": "urn:speculo:specdev:config:v5",
600
+ "$id": "urn:speculo:specdev:config:v6",
586
601
  "title": "SpecDev Configuration",
587
602
  "type": "object",
588
- "required": ["schema_version", "interaction_language", "artifact_language", "git", "execution", "verification", "planning"],
603
+ "required": [
604
+ "schema_version",
605
+ "interaction_language",
606
+ "artifact_language",
607
+ "git",
608
+ "execution",
609
+ "verification",
610
+ "planning",
611
+ "github"
612
+ ],
589
613
  "properties": {
590
- "schema_version": {"const": 5},
591
- "interaction_language": {"type": "string", "minLength": 1},
592
- "artifact_language": {"type": "string", "minLength": 1},
614
+ "schema_version": {
615
+ "const": 6
616
+ },
617
+ "interaction_language": {
618
+ "type": "string",
619
+ "minLength": 1
620
+ },
621
+ "artifact_language": {
622
+ "type": "string",
623
+ "minLength": 1
624
+ },
593
625
  "git": {
594
626
  "type": "object",
595
- "required": ["default_branch"],
627
+ "required": [
628
+ "default_branch"
629
+ ],
596
630
  "properties": {
597
- "default_branch": {"type": ["string", "null"]}
631
+ "default_branch": {
632
+ "type": [
633
+ "string",
634
+ "null"
635
+ ]
636
+ }
598
637
  },
599
638
  "additionalProperties": false
600
639
  },
601
640
  "execution": {
602
641
  "type": "object",
603
- "required": ["max_implementation_agents", "max_integration_attempts", "deep_ticket_human_approval", "shared_path_owner"],
642
+ "required": [
643
+ "max_implementation_agents",
644
+ "max_integration_attempts",
645
+ "deep_ticket_human_approval",
646
+ "shared_path_owner"
647
+ ],
604
648
  "properties": {
605
- "max_implementation_agents": {"type": "integer", "minimum": 1},
606
- "max_integration_attempts": {"type": "integer", "minimum": 1},
607
- "deep_ticket_human_approval": {"type": "boolean"},
608
- "shared_path_owner": {"type": "string", "minLength": 1}
649
+ "max_implementation_agents": {
650
+ "type": "integer",
651
+ "minimum": 1
652
+ },
653
+ "max_integration_attempts": {
654
+ "type": "integer",
655
+ "minimum": 1
656
+ },
657
+ "deep_ticket_human_approval": {
658
+ "type": "boolean"
659
+ },
660
+ "shared_path_owner": {
661
+ "type": "string",
662
+ "minLength": 1
663
+ }
609
664
  },
610
665
  "additionalProperties": false
611
666
  },
612
667
  "verification": {
613
668
  "type": "object",
614
- "required": ["test", "typecheck", "lint", "build"],
669
+ "required": [
670
+ "test",
671
+ "typecheck",
672
+ "lint",
673
+ "build"
674
+ ],
615
675
  "properties": {
616
- "test": {"type": ["string", "null"]},
617
- "typecheck": {"type": ["string", "null"]},
618
- "lint": {"type": ["string", "null"]},
619
- "build": {"type": ["string", "null"]}
676
+ "test": {
677
+ "type": [
678
+ "string",
679
+ "null"
680
+ ]
681
+ },
682
+ "typecheck": {
683
+ "type": [
684
+ "string",
685
+ "null"
686
+ ]
687
+ },
688
+ "lint": {
689
+ "type": [
690
+ "string",
691
+ "null"
692
+ ]
693
+ },
694
+ "build": {
695
+ "type": [
696
+ "string",
697
+ "null"
698
+ ]
699
+ }
620
700
  },
621
701
  "additionalProperties": true
622
702
  },
623
703
  "planning": {
624
704
  "type": "object",
625
- "required": ["default_depth", "require_ready_gate", "require_evidence", "ui_design_default_candidates", "ui_design_max_candidates"],
705
+ "required": [
706
+ "default_depth",
707
+ "require_ready_gate",
708
+ "require_evidence",
709
+ "ui_design_default_candidates",
710
+ "ui_design_max_candidates"
711
+ ],
626
712
  "properties": {
627
- "default_depth": {"enum": ["lite", "standard", "deep"]},
628
- "require_ready_gate": {"type": "boolean"},
629
- "require_evidence": {"type": "boolean"},
630
- "ui_design_default_candidates": {"type": "integer", "minimum": 2, "maximum": 4},
631
- "ui_design_max_candidates": {"type": "integer", "minimum": 2, "maximum": 4}
713
+ "default_depth": {
714
+ "enum": [
715
+ "lite",
716
+ "standard",
717
+ "deep"
718
+ ]
719
+ },
720
+ "require_ready_gate": {
721
+ "type": "boolean"
722
+ },
723
+ "require_evidence": {
724
+ "type": "boolean"
725
+ },
726
+ "ui_design_default_candidates": {
727
+ "type": "integer",
728
+ "minimum": 2,
729
+ "maximum": 4
730
+ },
731
+ "ui_design_max_candidates": {
732
+ "type": "integer",
733
+ "minimum": 2,
734
+ "maximum": 4
735
+ }
632
736
  },
633
737
  "additionalProperties": true
738
+ },
739
+ "github": {
740
+ "type": "object",
741
+ "required": [
742
+ "include_external_prs",
743
+ "labels"
744
+ ],
745
+ "properties": {
746
+ "include_external_prs": {
747
+ "type": "boolean"
748
+ },
749
+ "labels": {
750
+ "type": "object",
751
+ "additionalProperties": {
752
+ "type": "string",
753
+ "minLength": 1
754
+ }
755
+ }
756
+ },
757
+ "additionalProperties": false
634
758
  }
635
759
  },
636
- "allOf": [{
637
- "$comment": "ui_design_default_candidates <= ui_design_max_candidates is enforced by validate-specdev.mjs because JSON Schema cannot compare sibling numeric values."
638
- }],
760
+ "allOf": [
761
+ {
762
+ "$comment": "ui_design_default_candidates <= ui_design_max_candidates is enforced by validate-specdev.mjs because JSON Schema cannot compare sibling numeric values."
763
+ }
764
+ ],
639
765
  "additionalProperties": false
640
766
  }
641
767
  ```
@@ -40,6 +40,10 @@ node 本地只读 Goal 控制器(不含于网页快照) --map specdev/change
40
40
 
41
41
  需要正式 Goal、多 change、迁移或跨票 Gate 时交给 “目标规划阶段”;少量线性票可从 map 按已授权范围调用 “实现阶段”。不得以“精简”为理由静默更换默认工具或少交付。
42
42
 
43
+ ## 原型证据
44
+
45
+ 可以引用已验证 LOGIC/UI 原型中的行为、边界与已确认决定,记录具体 locator 和验证证据;源码片段可承载设计选择,但不自动成为生产实现。未闭合高影响产品决定返回 G,S 综合已确认设计而不重新开启无关访谈。
46
+
43
47
  ---
44
48
 
45
49
  ## 参考内容
@@ -588,6 +592,13 @@ W 的 `specdev/changes/{change}/initiative.json` 只拥有候选 change 的边
588
592
 
589
593
  父 `specdev/changes/{change}/tickets-map.md` 是 goal-tickets-map 无状态入口,只引用现有 Implementation Map/Plan;它不能拥有第二份 status、owner 或任务清单。统一 P 拥有生命周期,旧 O 仅保留入口与恢复键。
590
594
 
595
+ ## 新增工件 owner
596
+
597
+ - T:specdev/changes/{change}/pull-requests/PR-###.md 拥有 PR 交付回执;specdev/triage-runs/TRI-###.md 拥有独立远程操作,绝不复用 external_action/publish_action/capture。
598
+ - R-retro:specdev/changes/{change}/retro/RETRO-###.md 拥有活动复盘建议和来源;不成为永久知识。
599
+ - P:specdev/changes/{change}/prototypes/LOGIC-NNN/logic.md 记录逻辑模型与浏览器证据;index.html 是可运行原型,ready 时 hash 与记录一致。
600
+ - 来源更新:specdev/changes/{change}/source.md 冻结后保持不变。T 将后续读取写入 specdev/changes/{change}/sources/SRC-###.md,记录 replaces、固定 SHA/hash、完整性和原 locator,triage 正文选择有效快照;不得把新远程事实自动升级为已接受 Spec。
601
+
591
602
  </artifact-contract>
592
603
 
593
604
  <readiness-and-depth>
@@ -1098,7 +1109,7 @@ implementation owner 只在来源 worktree 修改授权项目路径,运行 Tic
1098
1109
 
1099
1110
  ```json
1100
1111
  {
1101
- "schema_version": 5,
1112
+ "schema_version": 6,
1102
1113
  "interaction_language": "zh-CN",
1103
1114
  "artifact_language": "zh-CN",
1104
1115
  "git": {
@@ -1122,6 +1133,10 @@ implementation owner 只在来源 worktree 修改授权项目路径,运行 Tic
1122
1133
  "require_evidence": true,
1123
1134
  "ui_design_default_candidates": 3,
1124
1135
  "ui_design_max_candidates": 4
1136
+ },
1137
+ "github": {
1138
+ "include_external_prs": false,
1139
+ "labels": {}
1125
1140
  }
1126
1141
  }
1127
1142
  ```
@@ -1133,60 +1148,171 @@ implementation owner 只在来源 worktree 修改授权项目路径,运行 Tic
1133
1148
  ```json
1134
1149
  {
1135
1150
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1136
- "$id": "urn:speculo:specdev:config:v5",
1151
+ "$id": "urn:speculo:specdev:config:v6",
1137
1152
  "title": "SpecDev Configuration",
1138
1153
  "type": "object",
1139
- "required": ["schema_version", "interaction_language", "artifact_language", "git", "execution", "verification", "planning"],
1154
+ "required": [
1155
+ "schema_version",
1156
+ "interaction_language",
1157
+ "artifact_language",
1158
+ "git",
1159
+ "execution",
1160
+ "verification",
1161
+ "planning",
1162
+ "github"
1163
+ ],
1140
1164
  "properties": {
1141
- "schema_version": {"const": 5},
1142
- "interaction_language": {"type": "string", "minLength": 1},
1143
- "artifact_language": {"type": "string", "minLength": 1},
1165
+ "schema_version": {
1166
+ "const": 6
1167
+ },
1168
+ "interaction_language": {
1169
+ "type": "string",
1170
+ "minLength": 1
1171
+ },
1172
+ "artifact_language": {
1173
+ "type": "string",
1174
+ "minLength": 1
1175
+ },
1144
1176
  "git": {
1145
1177
  "type": "object",
1146
- "required": ["default_branch"],
1178
+ "required": [
1179
+ "default_branch"
1180
+ ],
1147
1181
  "properties": {
1148
- "default_branch": {"type": ["string", "null"]}
1182
+ "default_branch": {
1183
+ "type": [
1184
+ "string",
1185
+ "null"
1186
+ ]
1187
+ }
1149
1188
  },
1150
1189
  "additionalProperties": false
1151
1190
  },
1152
1191
  "execution": {
1153
1192
  "type": "object",
1154
- "required": ["max_implementation_agents", "max_integration_attempts", "deep_ticket_human_approval", "shared_path_owner"],
1193
+ "required": [
1194
+ "max_implementation_agents",
1195
+ "max_integration_attempts",
1196
+ "deep_ticket_human_approval",
1197
+ "shared_path_owner"
1198
+ ],
1155
1199
  "properties": {
1156
- "max_implementation_agents": {"type": "integer", "minimum": 1},
1157
- "max_integration_attempts": {"type": "integer", "minimum": 1},
1158
- "deep_ticket_human_approval": {"type": "boolean"},
1159
- "shared_path_owner": {"type": "string", "minLength": 1}
1200
+ "max_implementation_agents": {
1201
+ "type": "integer",
1202
+ "minimum": 1
1203
+ },
1204
+ "max_integration_attempts": {
1205
+ "type": "integer",
1206
+ "minimum": 1
1207
+ },
1208
+ "deep_ticket_human_approval": {
1209
+ "type": "boolean"
1210
+ },
1211
+ "shared_path_owner": {
1212
+ "type": "string",
1213
+ "minLength": 1
1214
+ }
1160
1215
  },
1161
1216
  "additionalProperties": false
1162
1217
  },
1163
1218
  "verification": {
1164
1219
  "type": "object",
1165
- "required": ["test", "typecheck", "lint", "build"],
1220
+ "required": [
1221
+ "test",
1222
+ "typecheck",
1223
+ "lint",
1224
+ "build"
1225
+ ],
1166
1226
  "properties": {
1167
- "test": {"type": ["string", "null"]},
1168
- "typecheck": {"type": ["string", "null"]},
1169
- "lint": {"type": ["string", "null"]},
1170
- "build": {"type": ["string", "null"]}
1227
+ "test": {
1228
+ "type": [
1229
+ "string",
1230
+ "null"
1231
+ ]
1232
+ },
1233
+ "typecheck": {
1234
+ "type": [
1235
+ "string",
1236
+ "null"
1237
+ ]
1238
+ },
1239
+ "lint": {
1240
+ "type": [
1241
+ "string",
1242
+ "null"
1243
+ ]
1244
+ },
1245
+ "build": {
1246
+ "type": [
1247
+ "string",
1248
+ "null"
1249
+ ]
1250
+ }
1171
1251
  },
1172
1252
  "additionalProperties": true
1173
1253
  },
1174
1254
  "planning": {
1175
1255
  "type": "object",
1176
- "required": ["default_depth", "require_ready_gate", "require_evidence", "ui_design_default_candidates", "ui_design_max_candidates"],
1256
+ "required": [
1257
+ "default_depth",
1258
+ "require_ready_gate",
1259
+ "require_evidence",
1260
+ "ui_design_default_candidates",
1261
+ "ui_design_max_candidates"
1262
+ ],
1177
1263
  "properties": {
1178
- "default_depth": {"enum": ["lite", "standard", "deep"]},
1179
- "require_ready_gate": {"type": "boolean"},
1180
- "require_evidence": {"type": "boolean"},
1181
- "ui_design_default_candidates": {"type": "integer", "minimum": 2, "maximum": 4},
1182
- "ui_design_max_candidates": {"type": "integer", "minimum": 2, "maximum": 4}
1264
+ "default_depth": {
1265
+ "enum": [
1266
+ "lite",
1267
+ "standard",
1268
+ "deep"
1269
+ ]
1270
+ },
1271
+ "require_ready_gate": {
1272
+ "type": "boolean"
1273
+ },
1274
+ "require_evidence": {
1275
+ "type": "boolean"
1276
+ },
1277
+ "ui_design_default_candidates": {
1278
+ "type": "integer",
1279
+ "minimum": 2,
1280
+ "maximum": 4
1281
+ },
1282
+ "ui_design_max_candidates": {
1283
+ "type": "integer",
1284
+ "minimum": 2,
1285
+ "maximum": 4
1286
+ }
1183
1287
  },
1184
1288
  "additionalProperties": true
1289
+ },
1290
+ "github": {
1291
+ "type": "object",
1292
+ "required": [
1293
+ "include_external_prs",
1294
+ "labels"
1295
+ ],
1296
+ "properties": {
1297
+ "include_external_prs": {
1298
+ "type": "boolean"
1299
+ },
1300
+ "labels": {
1301
+ "type": "object",
1302
+ "additionalProperties": {
1303
+ "type": "string",
1304
+ "minLength": 1
1305
+ }
1306
+ }
1307
+ },
1308
+ "additionalProperties": false
1185
1309
  }
1186
1310
  },
1187
- "allOf": [{
1188
- "$comment": "ui_design_default_candidates <= ui_design_max_candidates is enforced by validate-specdev.mjs because JSON Schema cannot compare sibling numeric values."
1189
- }],
1311
+ "allOf": [
1312
+ {
1313
+ "$comment": "ui_design_default_candidates <= ui_design_max_candidates is enforced by validate-specdev.mjs because JSON Schema cannot compare sibling numeric values."
1314
+ }
1315
+ ],
1190
1316
  "additionalProperties": false
1191
1317
  }
1192
1318
  ```