@namewta/speculo 1.0.18 → 1.0.20

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 (195) 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 +10 -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 +158 -30
  32. package/template/canonical/canonical-specdev-grill-with-docs.md +155 -33
  33. package/template/canonical/canonical-specdev-spec.md +162 -161
  34. package/template/canonical/canonical-specdev-tickets.md +155 -29
  35. package/template/canonical/canonical-specdev-wayfinder.md +144 -29
  36. package/template/commands/handoff.md +16 -0
  37. package/template/commands/retro.md +12 -10
  38. package/template/skills/archive-and-consolidate/SKILL.md +163 -7
  39. package/template/skills/archive-and-consolidate/references/cleanup-rules.md +1 -1
  40. package/template/skills/docs-sync/references/agents/claude-redirect.md +8 -8
  41. package/template/skills/docs-sync/references/agents/content-contract.md +1 -1
  42. package/template/skills/docs-sync/references/agents/manifest-discovery.md +7 -7
  43. package/template/skills/docs-sync/references/agents/role-classification.md +4 -4
  44. package/template/skills/docs-sync/references/agents-contract.md +1 -1
  45. package/template/skills/engineering-standards-builder/SKILL.md +149 -9
  46. package/template/skills/engineering-standards-builder/agents/openai.yaml +2 -0
  47. package/template/skills/engineering-standards-builder/manifest.txt +2 -1
  48. package/template/skills/engineering-standards-builder/references/rules/09-mechanical-guardrails.md +9 -0
  49. package/template/skills/engineering-standards-builder/scripts/validate-builder.mjs +4 -7
  50. package/template/skills/git-history-squash/SKILL.md +87 -11
  51. package/template/skills/git-history-squash/agents/openai.yaml +2 -0
  52. package/template/skills/optimize-codex-config/SKILL.md +71 -11
  53. package/template/skills/retrospective/SKILL.md +43 -0
  54. package/template/skills/{speculo-retro → retrospective}/references/friction-taxonomy.md +22 -13
  55. package/template/skills/{speculo-retro → retrospective}/references/issue-drafting-sop.md +13 -21
  56. package/template/skills/source-code-zip/SKILL.md +44 -8
  57. package/template/skills/source-code-zip/references/{entry-procedure.md → cli-reference.md} +0 -43
  58. package/template/skills/upstream-fork-sync/SKILL.md +71 -8
  59. package/template/skills/{writing-great-skills → writing-for-agents}/GLOSSARY.md +1 -1
  60. package/template/skills/writing-for-agents/SKILL.md +22 -0
  61. package/template/skills/writing-for-agents/agents/openai.yaml +2 -0
  62. package/template/skills/{writing-great-skills/references/entry-procedure.md → writing-for-agents/references/authoring-principles.md} +2 -9
  63. package/template/workflows/learning/A-archive/A-archive.md +2 -5
  64. package/template/workflows/learning/A-assess-and-plan/A-assess-and-plan.md +2 -5
  65. package/template/workflows/learning/C-consolidate/C-consolidate.md +2 -5
  66. package/template/workflows/learning/G-goal/G-goal.md +5 -23
  67. package/template/workflows/learning/H-homework/H-homework.md +2 -5
  68. package/template/workflows/learning/I-init-setup/I-init-setup.md +4 -9
  69. package/template/workflows/learning/L-lesson/L-lesson.md +2 -5
  70. package/template/workflows/learning/Q-question/Q-question.md +16 -8
  71. package/template/workflows/learning/Q-question/inquiry-template.md +2 -0
  72. package/template/workflows/learning/Q-question/tools/validate-inquiry.mjs +112 -0
  73. package/template/workflows/learning/R-review/R-review.md +3 -6
  74. package/template/workflows/learning/README.md +2 -2
  75. package/template/workflows/learning/common/rules/knowledge-organization.md +1 -1
  76. package/template/workflows/learning/common/rules/mastery-policy.md +1 -1
  77. package/template/workflows/learning/common/skills/socratic-questioning/SKILL.md +1 -1
  78. package/template/workflows/ops/D-project-deploy/D-project-deploy.md +6 -2
  79. package/template/workflows/ops/H-host-manage/H-host-manage.md +10 -18
  80. package/template/workflows/ops/H-host-manage/references/host-profiles.md +21 -0
  81. package/template/workflows/ops/I-initialize/I-initialize.md +4 -4
  82. package/template/workflows/ops/README.md +22 -84
  83. package/template/workflows/ops/S-server-connect/S-server-connect.md +3 -3
  84. package/template/workflows/ops/V-inventory-view/V-inventory-view.md +2 -2
  85. package/template/workflows/ops/common/rules/deployment-layout.md +51 -0
  86. package/template/workflows/ops/common/rules/recovery.md +6 -0
  87. package/template/workflows/ops/common/rules/server-onboarding.md +6 -0
  88. package/template/workflows/ops/common/tests/test_ops.mjs +5 -8
  89. package/template/workflows/ops/common/tests/test_ops_bootstrap.mjs +71 -14
  90. package/template/workflows/ops/common/tests/test_ops_workspace.mjs +17 -8
  91. package/template/workflows/ops/common/tools/opslib/bootstrap.mjs +4 -4
  92. package/template/workflows/ops/common/tools/opslib/transport.mjs +3 -3
  93. package/template/workflows/person/M-mao-zedong-cognitive-os/M-mao-zedong-cognitive-os.md +13 -68
  94. package/template/workflows/person/S-steelman-deliberation/S-steelman-deliberation.md +11 -123
  95. package/template/workflows/person/S-steelman-deliberation/references/state-and-publication.md +86 -0
  96. package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +2 -17
  97. package/template/workflows/specdev/A-archive-and-consolidate/consolidation-interview.md +13 -4
  98. package/template/workflows/specdev/C-code-review/C-code-review.md +4 -15
  99. package/template/workflows/specdev/C-code-review/code-review-template.md +4 -0
  100. package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +4 -20
  101. package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +2 -2
  102. package/template/workflows/specdev/G-grill-with-docs/references/interview-procedure.md +6 -6
  103. package/template/workflows/specdev/I-implement/I-implement.md +2 -2
  104. package/template/workflows/specdev/I-implement/evidence-template.md +8 -0
  105. package/template/workflows/specdev/I-implement/references/implementation-procedure.md +9 -43
  106. package/template/workflows/specdev/I-implement/tdd-rules.md +4 -0
  107. package/template/workflows/specdev/I-init-setup/I-init-setup.md +16 -117
  108. package/template/workflows/specdev/I-init-setup/config-template.json +5 -1
  109. package/template/workflows/specdev/I-init-setup/references/first-setup.md +46 -0
  110. package/template/workflows/specdev/INDEX.md +2 -2
  111. package/template/workflows/specdev/L-learn-change/L-learn-change.md +11 -89
  112. package/template/workflows/specdev/L-learn-change/references/lesson-format.md +47 -0
  113. package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +2 -2
  114. package/template/workflows/specdev/P-goal-plan/planning-modes.md +1 -1
  115. package/template/workflows/specdev/P-prototype/P-prototype.md +7 -17
  116. package/template/workflows/specdev/P-prototype/logic-protocol.md +11 -0
  117. package/template/workflows/specdev/P-prototype/logic-template.md +27 -0
  118. package/template/workflows/specdev/P-prototype/project-preview-protocol.md +9 -0
  119. package/template/workflows/specdev/R-retro/R-retro.md +26 -0
  120. package/template/workflows/specdev/R-retro/retro-template.md +27 -0
  121. package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +19 -57
  122. package/template/workflows/specdev/R-review-architecture/architecture-review-template.md +2 -1
  123. package/template/workflows/specdev/R-review-architecture/references/selected-design.md +23 -0
  124. package/template/workflows/specdev/R-review-architecture/review-rubric.md +2 -2
  125. package/template/workflows/specdev/README.md +17 -6
  126. package/template/workflows/specdev/S-spec/S-spec.md +13 -136
  127. package/template/workflows/specdev/T-tickets/T-tickets.md +6 -2
  128. package/template/workflows/specdev/T-triage/T-triage.md +32 -141
  129. package/template/workflows/specdev/T-triage/capture-protocol.md +1 -1
  130. package/template/workflows/specdev/T-triage/ci-security-protocol.md +11 -0
  131. package/template/workflows/specdev/T-triage/intake-protocol.md +29 -4
  132. package/template/workflows/specdev/T-triage/pr-delivery-protocol.md +13 -0
  133. package/template/workflows/specdev/T-triage/pr-record-template.md +39 -0
  134. package/template/workflows/specdev/T-triage/publish-protocol.md +1 -1
  135. package/template/workflows/specdev/T-triage/queue-protocol.md +7 -0
  136. package/template/workflows/specdev/T-triage/reconcile-protocol.md +1 -1
  137. package/template/workflows/specdev/T-triage/references/issue-pr-policy.md +23 -0
  138. package/template/workflows/specdev/T-triage/references/release-authentication.md +9 -0
  139. package/template/workflows/specdev/T-triage/references/release-notes-injection.md +21 -0
  140. package/template/workflows/specdev/T-triage/references/workflow-yaml-reference.md +37 -0
  141. package/template/workflows/specdev/T-triage/release-preflight.md +13 -0
  142. package/template/workflows/specdev/T-triage/release-protocol.md +12 -0
  143. package/template/workflows/specdev/T-triage/release-recovery.md +18 -0
  144. package/template/workflows/specdev/T-triage/remote-operations.md +25 -0
  145. package/template/workflows/specdev/T-triage/scripts/github-transport.mjs +208 -0
  146. package/template/workflows/specdev/T-triage/source-template.md +7 -0
  147. package/template/workflows/specdev/T-triage/triage-run-template.md +34 -0
  148. package/template/workflows/specdev/T-triage/triage-template.md +4 -1
  149. package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +2 -2
  150. package/template/workflows/specdev/common/rules/artifact-contract.md +7 -0
  151. package/template/workflows/specdev/common/rules/change-completion.md +6 -0
  152. package/template/workflows/specdev/common/rules/deployment-handoff.md +23 -0
  153. package/template/workflows/specdev/common/rules/workflow-routing.md +6 -0
  154. package/template/workflows/specdev/common/rules/workflow-state-and-lifecycle.md +1 -1
  155. package/template/workflows/specdev/common/schemas/config.schema.json +137 -26
  156. package/template/workflows/specdev/common/schemas/logic-prototype.schema.json +62 -0
  157. package/template/workflows/specdev/common/schemas/pull-request.schema.json +90 -0
  158. package/template/workflows/specdev/common/schemas/retrospective.schema.json +58 -0
  159. package/template/workflows/specdev/common/schemas/triage-run.schema.json +149 -0
  160. package/template/workflows/specdev/common/schemas/triage.schema.json +117 -15
  161. package/template/workflows/specdev/common/skills/code-review/SKILL.md +5 -4
  162. package/template/workflows/specdev/common/skills/code-review/references/result-reuse.md +15 -0
  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 -219
  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/speculo-retro/references/entry-procedure.md +0 -23
  189. package/template/skills/upstream-fork-sync/references/entry-procedure.md +0 -78
  190. package/template/skills/writing-great-skills/SKILL.md +0 -23
  191. /package/template/skills/{writing-great-skills → writing-for-agents}/references/document-contract.md +0 -0
  192. /package/template/workflows/specdev/{G-grill-with-docs → common/rules}/adr-format.md +0 -0
  193. /package/template/workflows/specdev/{G-grill-with-docs → common/rules}/context-format.md +0 -0
  194. /package/template/workflows/specdev/{I-implement → common/rules}/design-it-twice.md +0 -0
  195. /package/template/workflows/specdev/{G-grill-with-docs/domain-modeling-rules.md → common/rules/domain-modeling.md} +0 -0
@@ -14,7 +14,7 @@
14
14
 
15
15
  Ticket frontmatter 拥有本票状态、依赖、写集与 Skill 调用绑定;普通 map 是背景/路由/图投影;Goal Plan 拥有 Gate、workspace 和恢复决策。多 change 父 tickets-map 只指向原 Implementation Map/Plan,不复制状态。一个未完成 child 仍只能归属于一个未完成父 Goal。
16
16
 
17
- 具体职责与冲突裁决读取 `<Path>{roots.workflows}/specdev/common/rules/artifact-contract.md</Path>`;新增调用合同读取 `<Path>{roots.workflows}/specdev/common/rules/skill-invocation.md</Path>`。
17
+ 发生职责或事实冲突时读取 `<Path>{roots.workflows}/specdev/common/rules/artifact-contract.md</Path>`;T 绑定、P 调度或 I 执行 Skill 时读取 `<Path>{roots.workflows}/specdev/common/rules/skill-invocation.md</Path>`。
18
18
 
19
19
  ## 持久化约定
20
20
 
@@ -24,9 +24,9 @@ CLI 初始化和刷新保持原 namespace、三方配置合并、schema migrator
24
24
 
25
25
  ## 启动协议
26
26
 
27
- 1. 先打开 `<Path>{roots.state}/workspace.json</Path>` 解析 roots,再读取 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`;定位相关 entry 后回读必要原文,不默认整读索引。不得把状态根默认展开成项目根 `.speculo`;项目根 `.speculo/specdev` 非法。
27
+ 1. 先打开 `<Path>{roots.state}/workspace.json</Path>` 解析 roots,再读取 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`;定位相关 entry 后回读必要原文,不默认整读索引。
28
28
  2. 读取 `<Path>{roots.state}/specdev/config.json</Path>`;不存在时使用 `<Path>{roots.workflows}/specdev/I-init-setup/I-init-setup.md</Path>`。保留已知配置,不重复询问。
29
- 3. 从 `<Path>{roots.state}/specdev/status.json</Path>` 定位用户指定或唯一 active change;多个候选需要真实消歧,无候选按原规则创建。
29
+ 3. 纯初始化和 T-triage capture 按各自无 change 分支执行;其他 Work 从 `<Path>{roots.state}/specdev/status.json</Path>` 定位用户指定或唯一 active change;多个候选需要真实消歧,无候选按原规则创建。
30
30
  4. 读取 `<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>`;恢复、创建或状态修改时加载上述状态细则。child 归属未完成父 Goal 时读取对应父 Map/Plan,不接管或覆盖其 owner。
31
31
  5. current_work 非空则恢复或显式 handoff;暂停保留恢复键,成功才去重更新 works_run 并清空。其他任务冲突只暂停受影响分支,继续独立、已授权工作。
32
32
  6. 按 Work/模式读取必要参考,完成产物、运行验证、回读真实源与状态后再推进。全局状态仅更新本任务 active/archived 索引。
@@ -62,11 +62,12 @@ CLI 初始化和刷新保持原 namespace、三方配置合并、schema migrator
62
62
  - **I-init-setup** — 初始化设置:初始化 SpecDev 的语言、配置、全局状态、本地 change 追踪、领域知识布局、验证命令和并发治理。
63
63
  - **L-learn-change** — Change 学习:在开发完成后围绕当前 SpecDev change 回答问题,并用面向零专业背景读者的 Markdown 与 ASCII 图解持续记录理解。
64
64
  - **P-goal-plan** — Goal 规划与执行:为单个已拆票 change 或多个 Ready change 规划、执行或恢复 Goal;只在用户要求交付编排或已有 map 需推进时使用,不代替需求探索和 Ticket 编写。
65
- - **P-prototype** — UI 设计原型:检测现有项目的 UI 事实,按产品任务推荐并逐步选择设计风格,生成持久化设计系统文档、多风格 HTML 对照和可运行 HTML/CSS/JS 原型。
65
+ - **P-prototype** — 逻辑与 UI 原型:按需验证离线逻辑模型,或检测现有项目的 UI 事实,按产品任务推荐并逐步选择设计风格,生成持久化设计系统文档、多风格 HTML 对照和可运行 HTML/CSS/JS 原型。
66
+ - **R-retro** — 开发复盘:对指定开发活动、环境或协作流程的已观察摩擦做证据化复盘,形成根因、改进 owner 与可检验提案;代码讲解使用 L-learn-change,Speculo 产品反馈使用 retro 命令。
66
67
  - **R-review-architecture** — 架构审查:从用户指定范围或 Git 热点扫描代码库中的结构性坏味道、代码 judo 机会和维护性风险,以中文 Markdown 记录高置信候选,并对用户选择的一个方案运行设计树访谈。
67
68
  - **S-spec** — 编写 Spec:综合已知事实、设计决定、诊断与代码现状,产出以外部行为和验收合同为权威的 Ready Spec。
68
69
  - **T-tickets** — 编写计划型 Tickets:将已澄清的 Spec 或等价获批计划拆为可验收的实施 Ticket,并绑定真实项目 Skill;不用于探索未知需求或执行代码。
69
- - **T-triage** — 请求分诊:需要冻结外部来源、审计摄入、对 completed change 回写来源 Issue、把已完成 Ticket 投影为带分类标签的 GitHub Issue,或把尚未成 Change 的记事项写成仍 open 的 GitHub Issue 时使用;已清晰的本地需求不必为了路由而经本入口。
70
+ - **T-triage** — 请求分诊与 GitHub 交付:摄入与核验外部请求、投影本地完成事实、交付 PR,或按明确目标处理 CI、安全告警、npm/GitHub Release 预检、发布和恢复;清晰的本地需求直接进入对应 Work。
70
71
  - **W-wayfinder** — 探索大需求与 Change 边界:大需求的 change 边界或实施路线尚不可见时建立探索地图,并分别澄清各 change;已有清晰 Spec 时不触发。
71
72
 
72
73
  <!-- AUTO-INDEX-END -->
@@ -83,4 +84,14 @@ node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> --
83
84
  node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> --self-check
84
85
  ```
85
86
 
86
- 支持 triage、diagnosis、grill、spec、tickets、goal-plan、implement、learn-change、review、prototype、wayfinder、complete。Goal 总控通过 P 的 map-control 参考使用只读控制器;它不授权或自动执行。完成转换必须读取 `<Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>`,票全 done 不替代整体验收。
87
+ 支持 triage、diagnosis、grill、spec、tickets、goal-plan、implement、learn-change、review、prototype、wayfinder、complete。Goal 总控通过 P 的 map-control 参考使用只读控制器;它不授权或自动执行。只有进行完成转换时必须读取 `<Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>`,票全 done 不替代整体验收。
88
+
89
+ ## 远程交付、逻辑原型与复盘
90
+
91
+ T 拥有 <Path>{roots.state}/specdev/triage-runs/TRI-###.md</Path>,首次独立 CI/安全/发布操作时按模板建立,恢复更新原记录。此 namespace 不占用 change.current_work、不写开发状态、不参与默认归档门。其他入口只复用 T 的 remote-operations 时,原调用方仍拥有报告,不创建 TRI 或 change。
92
+
93
+ PR 由 T 写入 <Path>{roots.state}/specdev/changes/{change}/pull-requests/PR-###.md</Path>;R-retro 写入 <Path>{roots.state}/specdev/changes/{change}/retro/RETRO-###.md</Path>;P 的逻辑原型写入 <Path>{roots.state}/specdev/changes/{change}/prototypes/LOGIC-NNN/</Path>。均首次按最小未用 ID 创建,更新原子写入并重读;schema 在 common/schemas,验证由 common/tools/validate-specdev.mjs 负责。
94
+
95
+ config schema v6 增加 github.include_external_prs(boolean,默认 false)与 github.labels(语义名→仓库标签的字符串映射,默认空)。I 初始化,CLI 从合法 v5 通过 staging 升级;已有语言、执行、验证与规划配置保留。标签缺失只阻塞对应远程写操作。全局 status v5 与 change status v6 不变。
96
+
97
+ 入口选择:需要活动复盘进入 <Path>{roots.workflows}/specdev/R-retro/R-retro.md</Path>;包发布进入 T 的 release,Ticket→Issue 仍为 publish。Completed/archived 对象的复盘建立独立 review-only change,不修改原完成状态。新工件版本均为 v1,triage 新写入为 v2;旧 v1 仅历史只读,活动分支由 T 明确重验后转换,不由 CLI 批改。
@@ -9,149 +9,26 @@ keywords: [spec, PRD, 用户故事, 验收合同, 接缝, 范围, readiness]
9
9
 
10
10
  # 编写 Spec
11
11
 
12
- > 激活本 Work 后,先读取 `<Path>{roots.workflows}/specdev/README.md</Path>`,再执行本入口。
12
+ 激活后读取 `<Path>{roots.workflows}/specdev/README.md</Path>` 与 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`。本 Work 综合已有事实,定义为什么、为谁、系统应表现为何,不另开宽泛访谈,也不写逐文件施工计划。
13
13
 
14
- 本 work 以“综合已有上下文”为主,不启动宽泛访谈。它保留原有的代码库探索、领域词汇、ADR 约束、测试接缝设计和用户确认能力,但将确认限制为真正影响外部行为或验证的高价值问题。
14
+ ## 形成行为合同
15
15
 
16
- Spec 决定“为什么、为谁、系统应表现为何”。它可以锁定影响公共接口、数据、兼容、安全或验收的实现约束,但不写逐文件施工计划。
16
+ 1. **Grounding**:定位用户目标与当前代码、测试、接口、schema、配置和运行事实。按存在情况定位 change 的来源、分诊、诊断、LOG、CONTEXT、ADR 及相关永久领域词汇/决策;只回读命中原文,可选工件缺失静默跳过,不当作已确认事实。按 `<Path>{roots.workflows}/specdev/common/rules/planning-principles.md</Path>` 区分可发现事实、高影响偏好和可逆实现细节;冲突按 `<Path>{roots.workflows}/specdev/common/rules/artifact-contract.md</Path>` 返回权威 owner。
17
+ 2. **关闭必要决定**:只确认会改变外部行为、接口、数据、兼容、安全、迁移、发布或验收的高价值问题。广泛取舍未定时返回 `<Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path>`;陌生外部依赖或版本行为通过 `<Path>{roots.workflows}/specdev/common/skills/research/SKILL.md</Path>` 查证。不虚构错误码、性能阈值、法规或迁移政策。
18
+ 3. **写入合同**:以 `<Path>{roots.workflows}/specdev/S-spec/spec-template.md</Path>` 写入 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`。模板拥有问题/用户/成功、正常/边界/失败/角色/状态行为、IN/REUSE/OUT、保持项、接口数据与 NFR 的完整结构及 `US-### / AC-### / NFR-### / DEC-### / OOS-###` 稳定编号。实现约束仅锁定会影响公共合同、兼容、安全或验收的决定。
19
+ 4. **绑定验证接缝**:优先复用稳定接缝,通常从用户端到端行为、公共 API/CLI、事件/集成、稳定单元接缝选择;按实际风险与项目先例决定,不机械追求最高测试层级。每个接缝注明入口类型/位置、触发方式、可观察结果、覆盖 AC 和实际测试先例/命令。选择显著改变可测试性、事故半径或范围时聚焦确认;可由已有代码推导时记录依据即可。证据遵守 `<Path>{roots.workflows}/specdev/common/rules/evidence-and-verification.md</Path>`。
20
+ 5. **Readiness**:对照 `<Path>{roots.workflows}/specdev/S-spec/spec-readiness.md</Path>` 与 `<Path>{roots.workflows}/specdev/common/schemas/spec.schema.json</Path>`。高影响未决问题使 `ready_for_tickets: false`;低影响、可逆默认值可作为带验证方式的显式假设。每个 AC 必须可观察、可判定、绑定接缝;不适用影响写明理由。
17
21
 
18
- ## 读取范围
19
-
20
- 1. 先读取 `<Path>{roots.workflows}/specdev/README.md</Path>` 与当前 Work 的状态入口。
21
- 2. 再读取 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`,按当前分支、状态和关键词定位最小相关工件。
22
- 3. 只在本 Work 明确要求恢复、冲突、执行安全或归档证据时扩展为全量读取;缺少匹配证据或 owner/gateway 时停止受影响分支。
23
-
24
-
25
- ## 输入
26
-
27
- 按存在情况读取:
28
-
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}/LOG.md</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/context/</Path>`
36
- - `<Path>{roots.state}/specdev/adr/</Path>`
37
- - 当前代码、测试、接口、schema、配置和运行事实。
38
-
39
- 不存在的可选工件静默跳过,不得把缺失内容当作已确认事实。
40
-
41
- ## 流程
42
-
43
- ### 1. Grounding 与事实探索
44
-
45
- 1. 汇总用户目标、受众、问题、限制和已有决定;
46
- 2. 只读探索相关代码、测试、配置、schema 和相邻实现;
47
- 3. 使用 `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>` 与 `<Path>{roots.state}/specdev/context/</Path>` 的术语,不自创冲突名称;
48
- 4. 使用 `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` 与 `<Path>{roots.state}/specdev/adr/</Path>` 的已接受决策;
49
- 5. 按 `<Path>{roots.workflows}/specdev/common/rules/planning-principles.md</Path>` 区分可发现事实、高影响偏好和低影响实现细节;
50
- 6. 按 `<Path>{roots.workflows}/specdev/common/rules/artifact-contract.md</Path>` 处理冲突;
51
- 7. 外部依赖、标准或版本行为不清楚时使用 `<Path>{roots.workflows}/specdev/common/skills/research/SKILL.md</Path>`。
52
-
53
- 广泛的产品或架构取舍仍未确定时,返回 `<Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path>`;不要在 Spec 中用猜测补齐。
54
-
55
- ### 2. 定义问题、用户和成功
56
-
57
- 从用户或调用者视角写明:
58
-
59
- - 当前问题与影响;
60
- - 目标用户、调用者或运营角色;
61
- - 主要场景和现有痛点;
62
- - 成功状态与可观察结果;
63
- - 明确非目标。
64
-
65
- 目标不能只写“新增模块”“修改接口”或“完成 Ticket”。
66
-
67
- ### 3. 定义外部行为与范围
68
-
69
- 写明:
70
-
71
- - 解决方案摘要;
72
- - 正常路径;
73
- - 边界和失败路径;
74
- - 稳定错误行为;
75
- - 状态转换和不变量;
76
- - IN、REUSE、OUT;
77
- - 需要保持的既有行为;
78
- - 公共接口、数据、安全、迁移和运维影响。
79
-
80
- 局部文件组织、辅助函数和逐行实现不进入 Spec。
81
-
82
- ### 4. 设计验证接缝
83
-
84
- 优先复用现有稳定接缝。通常优先顺序是用户端到端行为、公共 API 或 CLI、事件或集成接缝、稳定单元接缝;实际层级由风险和项目先例决定,不机械追求最高层测试。
85
-
86
- 每个接缝写明:
87
-
88
- - 入口位置和类型;
89
- - 触发方式;
90
- - 可观察结果;
91
- - 覆盖哪些验收合同;
92
- - 现有测试先例或命令。
93
-
94
- 若接缝选择会显著改变可测试性、事故半径或实现范围,向用户做一次聚焦确认;接缝可由代码和已有测试明确推导时,直接采用并记录依据,不为形式提问。
95
-
96
- 证据规则见 `<Path>{roots.workflows}/specdev/common/rules/evidence-and-verification.md</Path>`。
97
-
98
- ### 5. 编写 Spec
99
-
100
- 使用 `<Path>{roots.workflows}/specdev/S-spec/spec-template.md</Path>` 写入 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`。
101
-
102
- 稳定编号:
103
-
104
- - `US-###`:用户故事;
105
- - `AC-###`:验收合同;
106
- - `NFR-###`:非功能要求;
107
- - `DEC-###`:已锁定实现约束;
108
- - `OOS-###`:明确超出范围。
109
-
110
- 不得虚构错误码、性能阈值、schema、迁移政策、法规或合规要求。项目代码证据使用项目相对 Path 标签。
111
-
112
- ### 6. Readiness Review
113
-
114
- 加载 `<Path>{roots.workflows}/specdev/S-spec/spec-readiness.md</Path>` 检查 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`。
115
-
116
- 任何会改变以下内容的未决问题都会使 `ready_for_tickets: false`:
117
-
118
- - 外部行为和范围;
119
- - 公共接口或数据;
120
- - 安全、隐私、资金或数据完整性;
121
- - 兼容、迁移和发布约束;
122
- - 验收合同或验证接缝。
123
-
124
- 低影响、可逆实现默认值可以作为显式假设,但必须有验证方式。
125
-
126
- ### 7. 发布与路由
127
-
128
- 1. 对照 `<Path>{roots.workflows}/specdev/common/schemas/spec.schema.json</Path>`;
129
- 2. 运行:
22
+ ## 验证、状态与交接
130
23
 
131
24
  ```bash
132
- node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> \
133
- --stage spec \
134
- <Path>{roots.state}/specdev/changes/{change}</Path>
25
+ node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> --stage spec --repo <project-root> <Path>{roots.state}/specdev/changes/{change}</Path>
135
26
  ```
136
27
 
137
- 3. 更新 `<Path>{roots.state}/specdev/status.json</Path>` 与 `<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>`;
138
- 4. 汇报主要用户故事、验收合同、范围、验证接缝、风险和 Ready 状态;
139
- 5. 返回 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`、Ready 状态及下一 Work 的完整路径;
140
- 6. 只有用户请求或工作流显式串联时,进入 `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`。
141
-
142
- ## 完成标准
28
+ 回读真实 Spec、Ready 结论与状态,按激活合同只更新本 change 与全局索引的所属项。返回 Spec 完整路径、主要行为/验收合同、范围、验证接缝、风险、高影响缺口和验证结果。成功完成本 Work 才更新 `works_run` 并清空 `current_work`;可恢复失败保留入口。
143
29
 
144
- - `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>` 已按模板写入;
145
- - 问题、目标用户、外部行为、范围和非目标明确;
146
- - 用户故事覆盖主要、边界、错误、角色和状态场景;
147
- - 每个验收合同可观察、可判定并绑定验证接缝;
148
- - 公共接口、数据、兼容、安全和迁移已决定或明确不适用;
149
- - 高影响未决问题与 `ready_for_tickets` 一致;
150
- - 不包含逐文件施工计划;
151
- - Spec、Ready 状态和下一 Work 路径已返回;
152
- - 状态和用户摘要已更新。
30
+ 只有用户请求或工作流已显式串联时才进入 `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`;产出 Ready Spec 本身不授权实施。
153
31
 
154
- ## 子文件引用
32
+ ## 原型证据
155
33
 
156
- - Spec 模板:`<Path>{roots.workflows}/specdev/S-spec/spec-template.md</Path>`
157
- - Ready 检查:`<Path>{roots.workflows}/specdev/S-spec/spec-readiness.md</Path>`
34
+ 可以引用已验证 LOGIC/UI 原型中的行为、边界与已确认决定,记录具体 locator 和验证证据;源码片段可承载设计选择,但不自动成为生产实现。未闭合高影响产品决定返回 G,S 综合已确认设计而不重新开启无关访谈。
@@ -17,13 +17,13 @@ keywords: [ticket, Plan Mode, 垂直切片, Skill绑定, DAG]
17
17
 
18
18
  先读 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`;按相关条目定位上游 Spec/ADR/CONTEXT、代码与项目 Agent 指令,再回读当前拆分所需原文。只枚举 Skill 的元数据与触发路由,不默认展开全部技能。
19
19
 
20
- ## 主流程
20
+ ## 从合同到可执行票
21
21
 
22
22
  1. **输入与范围**:确认目标、非目标、用户指定数量、验收合同和未知项。高影响未决问题回到 G;无 Ready Spec 时,只有用户材料已等价覆盖全部合同才可规划。
23
23
  2. **地形与绑定**:定位真实可维护源、调用方、测试接缝和 Skill 根。按 `<Path>{roots.workflows}/specdev/common/rules/skill-invocation.md</Path>` 为每票解析实际 Skill ID、入口摘要、调用阶段、输入、产出与失败动作;没有适用项目 Skill 时记录扫描证据,不造名称。
24
24
  3. **垂直切片**:需要具体拆分时读取 `<Path>{roots.workflows}/specdev/T-tickets/references/planning-procedure.md</Path>` 与 `<Path>{roots.workflows}/specdev/T-tickets/decomposition-rules.md</Path>`。保留 Prefactor、Expand → Migrate → Contract 和真实 DAG,不按技术层制造空价值任务。
25
25
  4. **写 Plan**:使用 `<Path>{roots.workflows}/specdev/T-tickets/ticket-template.md</Path>`。Lite 仅减少不适用说明,不删用户数量、权限、验收或停止条件。所有新增票使用 `plan_contract_version: 1`,旧票按迁移协议补齐后再执行。
26
- 5. **写总控**:使用 `<Path>{roots.workflows}/specdev/T-tickets/tickets-map-template.md</Path>`,记录共同背景、Skill 最低路由、合同覆盖、依赖和明确控制入口;状态仍从票投影。依赖、路径与语义共享资源都需检查。
26
+ 5. **写总控**:使用 `<Path>{roots.workflows}/specdev/T-tickets/tickets-map-template.md</Path>`,记录共同背景、Skill 最低路由、合同覆盖、依赖和明确控制入口;状态仍从票投影。按 AC 反查至少一个负责验证的 Ticket,暴露未覆盖和重复所有权;依赖环、路径重叠与语义共享资源分别检查,不能用“可并行”文字替代实际 DAG/写集。
27
27
  6. **Definition of Ready**:读取 `<Path>{roots.workflows}/specdev/T-tickets/ticket-readiness.md</Path>`,并调用 `<Path>{roots.workflows}/specdev/common/skills/plan-quality-review/SKILL.md</Path>`。缺失引用、必需 Skill、可运行验收或权限边界,当前票不可 ready。
28
28
  7. **与用户核对**:展示全部票、可观察产物、依赖、深度、风险、Skill 和未决问题。保留用户要求的交付数量;已授权自主规划且无关键未知时不重复请求形式确认。
29
29
  8. **验证、回读和交付**:按下述命令检查,再回读真实 Ticket/Map,报告修改、验证结果和未完成项。规划完成不自动进入实现。
@@ -34,3 +34,7 @@ node <Path>{roots.workflows}/specdev/common/tools/ticket-control.mjs</Path> --ma
34
34
  ```
35
35
 
36
36
  需要正式 Goal、多 change、迁移或跨票 Gate 时交给 `<Path>{roots.workflows}/specdev/P-goal-plan/P-goal-plan.md</Path>`;少量线性票可从 map 按已授权范围调用 `<Path>{roots.workflows}/specdev/I-implement/I-implement.md</Path>`。不得以“精简”为理由静默更换默认工具或少交付。
37
+
38
+ ## 原型证据
39
+
40
+ 可以引用已验证 LOGIC/UI 原型中的行为、边界与已确认决定,记录具体 locator 和验证证据;源码片段可承载设计选择,但不自动成为生产实现。未闭合高影响产品决定返回 G,S 综合已确认设计而不重新开启无关访谈。
@@ -2,159 +2,50 @@
2
2
  id: specdev/triage
3
3
  type: workflow-entry
4
4
  workflow: specdev
5
- name: 请求分诊
6
- description: 需要冻结外部来源、审计摄入、对 completed change 回写来源 Issue、把已完成 Ticket 投影为带分类标签的 GitHub Issue,或把尚未成 Change 的记事项写成仍 open 的 GitHub Issue 时使用;已清晰的本地需求不必为了路由而经本入口。
7
- keywords: [triage, 摄入, import, issue, reconcile, publish, capture, close, 风险, 路由]
5
+ name: 请求分诊与 GitHub 交付
6
+ description: 摄入与核验外部请求、投影本地完成事实、交付 PR,或按明确目标处理 CI、安全告警、npm/GitHub Release 预检、发布和恢复;清晰的本地需求直接进入对应 Work。
7
+ keywords: [triage, issue, PR, intake, reconcile, publish, capture, queue, release, npm, CI, security, recover]
8
8
  ---
9
9
 
10
- # 请求分诊
10
+ # 请求分诊与 GitHub 交付
11
11
 
12
- > 激活本 Work 后,先读取 `<Path>{roots.workflows}/specdev/README.md</Path>`,再执行本入口。
12
+ 激活后读取 <Path>{roots.workflows}/specdev/README.md</Path> 与 <Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>。本地 Spec/Ticket/Map/Goal/Evidence 始终是开发权威,GitHub 不成为开发 tracker。
13
13
 
14
- Triage 是 SpecDev 唯一的远程摄入、关闭、发布投影与记事项捕获边界。开发期间,change 级 `<Path>{roots.state}/specdev/changes/{change}/source.md</Path>`、`<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>`、`<Path>{roots.state}/specdev/changes/{change}/publish.md</Path>`、Spec、Ticket、Map、Goal Plan、Evidence 和状态文件是开发唯一权威;workspace 级 `<Path>{roots.state}/specdev/capture.md</Path>` 是尚未成 Change 的 inbox 计数权威(缺失合法)。远程系统只保存原始请求、经确认后的完成通知、票级发布记录,以及仍 open 的记事项。GitHub 不是 tracker,也不是开发权威。
14
+ ## 选择模式
15
15
 
16
- ## 读取范围
16
+ 只读取选中分支,publish 专指 Ticket→Issue,release 专指包/GitHub Release。
17
17
 
18
- 1. 先读取 `<Path>{roots.workflows}/specdev/README.md</Path>` 与当前 Work 的状态入口。
19
- 2. 再读取 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`,按当前分支、状态和关键词定位最小相关工件。
20
- 3. 只在本 Work 明确要求恢复、冲突、执行安全或归档证据时扩展为全量读取;缺少匹配证据或 owner/gateway 时停止受影响分支。
18
+ | 模式 | 协议 | owner 与结果 |
19
+ |---|---|---|
20
+ | queue | <Path>{roots.workflows}/specdev/T-triage/queue-protocol.md</Path> | 只读候选,不创建 change |
21
+ | intake | <Path>{roots.workflows}/specdev/T-triage/intake-protocol.md</Path> | 冻结 source/triage,验证与路由 |
22
+ | reconcile | <Path>{roots.workflows}/specdev/T-triage/reconcile-protocol.md</Path> | 来源 Issue 的 external_action |
23
+ | publish | <Path>{roots.workflows}/specdev/T-triage/publish-protocol.md</Path> | 已完成 Ticket 的 publish 账本 |
24
+ | capture | <Path>{roots.workflows}/specdev/T-triage/capture-protocol.md</Path> | workspace capture,保持 Issue open |
25
+ | pr-delivery | <Path>{roots.workflows}/specdev/T-triage/pr-delivery-protocol.md</Path> | change 的 PR 记录 |
26
+ | ci-security | <Path>{roots.workflows}/specdev/T-triage/ci-security-protocol.md</Path> | 独立 TRI 操作记录 |
27
+ | release-preflight | <Path>{roots.workflows}/specdev/T-triage/release-preflight.md</Path> | 只读预检与 TRI 记录 |
28
+ | release | <Path>{roots.workflows}/specdev/T-triage/release-protocol.md</Path> | 已授权发布及逐目标回执 |
29
+ | recover | <Path>{roots.workflows}/specdev/T-triage/release-recovery.md</Path> | 恢复指定原记录 |
21
30
 
22
- 普通本地请求直接进入适用 Work,不为了完成路由额外创建来源工件。用户明确要求来源审计时仍执行完整 intake;缺陷根因诊断仍交 D,不删除风险分诊与远程回写能力。完成后要记账才选 publish。尚未成 Change、只想先在 GitHub 留一条仍 open 的记录时才选 capture。
31
+ 远程原语统一见 <Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path>。其他调用方可直接复用该协议,不激活 T,也不初始化 SpecDev。
23
32
 
24
- ## 模式
33
+ ## 定位与状态
25
34
 
26
- - **intake**:冻结输入、创建或恢复 change、分类并返回下一 Work。
27
- - **reconcile**:本地 change 已完成后,确认远程完成摘要并关闭支持的 GitHub 来源 Issue;不重新分诊或修改开发契约。
28
- - **publish**:本地 change 已完成后,把计划内 Ticket 投影为带分类标签的 GitHub Issue,用脱敏 Evidence 关闭它们,并留下 `<Path>{roots.state}/specdev/changes/{change}/publish.md</Path>` 账本。标签必须包含 `specdev:published`。
29
- - **capture**:尚未有 Change 时,把记事项写成仍 open 的 GitHub Issue,并留下 `<Path>{roots.state}/specdev/capture.md</Path>`。标签必须包含 `specdev:captured`。不创建 change,不写 change 级 triage 工件,`mode=capture` 不得出现在 `<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>`。
35
+ 从 workspace 解析 roots。intake 可创建/恢复 change;reconcile/publish 只选择满足 <Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path> 的现有 change。多个候选先消歧;冻结来源不覆盖。
30
36
 
31
- ## 共同启动
37
+ capture 不创建也不选择 change,不写 current_work,只使用 <Path>{roots.state}/specdev/capture.md</Path>。queue 只返回候选。CI/发布独立记录写入 <Path>{roots.state}/specdev/triage-runs/TRI-###.md</Path>;T 在首次具体操作时选最小未用 ID,按 <Path>{roots.workflows}/specdev/T-triage/triage-run-template.md</Path> 原子写入并重读,不占用 change 状态。recover 使用原账本 owner。
32
38
 
33
- 1. 解析 roots,按 `<Path>{roots.workflows}/specdev/README.md</Path>` 读取全局状态和 change 状态。
34
- 2. Intake 可以创建 change;reconcile 与 publish 必须选择一个已存在的 change。publish 的对象必须已 completed。capture 既不创建也不选择 change,不写 `current_work`,不加载 `<Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>`。
35
- 3. 仅 intake、reconcile 与 publish:若该 change 的 `current_work` 为 null,设置为 `specdev/triage`;指向其他 Work 时先恢复或完成显式 handoff。capture 跳过本步。
36
- 4. 重读已有 `<Path>{roots.state}/specdev/changes/{change}/source.md</Path>` 与 `<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>`,不覆盖已冻结的来源。publish 在本地源缺失这些文件时可以按协议补建轻量快照,仍不得虚构 GitHub locator。capture 不读、不写这些文件。
39
+ 尚未完成 change 的 intake 在 current_work 为空时登记 specdev/triage,他项占用先恢复或 handoff;成功去重追加 works_run 并清空 current_work,可恢复失败保留。已完成 change 的 reconcile/publish 和 PR 交付只更新各自账本,不占用 current_work,不重开实现状态。PR 不能修改来源关闭、Ticket publish 或 capture 状态。远程失败不能把已完成代码状态改回未完成。
37
40
 
38
- `external_action` 只描述源 Issue。`publish_action` 只描述票级发布投影。capture 行 state 只描述 inbox 记录。三者互不覆盖。未授权时远程写入为零。
41
+ ## 验证与返回
39
42
 
40
- ## Intake
43
+ 使用 <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path>:
41
44
 
42
- 输入为远程 Issue、URL、项目相对文件、用户粘贴内容或当前对话时,加载 `<Path>{roots.workflows}/specdev/T-triage/intake-protocol.md</Path>`:
45
+ - intake/reconcile/publish:--stage triage,输入当前 change。
46
+ - pr-delivery:--stage pr-delivery,输入当前 change。
47
+ - capture:仅账本存在时 --capture,不为验证创建账本。
48
+ - 独立 TRI:--triage-run,输入原记录。
49
+ - queue:报告检索范围、分页、未知项,不制造完成证据。
43
50
 
44
- 1. 按协议解析来源、查重、脱敏、冻结并计算内容 hash;使用 `<Path>{roots.workflows}/specdev/T-triage/source-template.md</Path>` 原子写入 `<Path>{roots.state}/specdev/changes/{change}/source.md</Path>`。
45
- 2. 按需读取永久 ADR/CONTEXT、当前 change 工件和相关代码事实;缺失的可选输入静默跳过。相似的已归档拒绝或 ADR 只展示,不自动 wontfix,也不回写源 Issue 标签。
46
- 3. 分类为 bug、feature、refactor、investigation、operations、documentation、review 或 mixed。对照见 `<Path>{roots.workflows}/specdev/T-triage/references/classification-map.md</Path>`。
47
- 4. 评估影响、紧急度、事故半径、安全、数据、迁移和人工批准;把未知项分为可发现事实、decision-needed 和低影响实现细节。
48
- 5. 使用 `<Path>{roots.workflows}/specdev/T-triage/triage-template.md</Path>` 写入 `<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>`。
49
- 6. 运行阶段校验并返回最小正确路线:
50
- - 根因未知的 bug → `<Path>{roots.workflows}/specdev/D-diagnose-bugs/D-diagnose-bugs.md</Path>`;
51
- - 产品或架构决定未锁定 → `<Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path>`;
52
- - 路径超出单次上下文 → `<Path>{roots.workflows}/specdev/W-wayfinder/W-wayfinder.md</Path>`;
53
- - 需要检测项目 UI、比较风格候选并固化可运行设计包 → `<Path>{roots.workflows}/specdev/P-prototype/P-prototype.md</Path>`;
54
- - 外部行为明确 → `<Path>{roots.workflows}/specdev/S-spec/S-spec.md</Path>`;
55
- - 固定点 diff 或 PR 审查 → `<Path>{roots.workflows}/specdev/C-code-review/C-code-review.md</Path>`;
56
- - 小型明确变更 → `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>` 或获批 Direct Spec。
57
-
58
- 只有目标、范围、验证、路径和风险全部明确且用户批准 Direct Spec 时,`ready_for_implementation` 才能为 true。
59
-
60
- ## Reconcile
61
-
62
- 本地 change 完成并需要关闭来源 Issue 时,加载:
63
-
64
- - `<Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>`;
65
- - `<Path>{roots.workflows}/specdev/T-triage/reconcile-protocol.md</Path>`;
66
- - `<Path>{roots.workflows}/specdev/T-triage/references/public-projection.md</Path>`。
67
-
68
- 按协议重验本地完成、生成最小外部摘要、展示准确目标和动作、取得本次明确授权,再调用 `<Path>{roots.skills}/github-npm-ops/SKILL.md</Path>`。成功时把 `external_action` 更新为 `closed`;部分或完全失败为 `close-failed` 并保留可重试检查点;用户明确不关闭时为 `waived`。任何结果都不改写本地完成事实。
69
-
70
- Reconcile 成功或 waived 后返回 `<Path>{roots.workflows}/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md</Path>`。不支持关闭的来源使用 `not-applicable`,无需虚构 provider。若用户同时要求 publish,源 Issue 仍不是票 Issue。
71
-
72
- ## Publish
73
-
74
- 本地 change 完成、用户指定该 change 并要求把 Ticket 记到 GitHub 时,加载:
75
-
76
- - `<Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>`;
77
- - `<Path>{roots.workflows}/specdev/T-triage/publish-protocol.md</Path>`;
78
- - `<Path>{roots.workflows}/specdev/T-triage/references/classification-map.md</Path>`;
79
- - `<Path>{roots.workflows}/specdev/T-triage/references/public-projection.md</Path>`。
80
-
81
- 按协议走硬门、确认表、dry-run,再调用 github-npm-ops 的 `issue-search` / `issue-create` / `issue-comment-close`。账本写 `<Path>{roots.state}/specdev/changes/{change}/publish.md</Path>`。Issue 正文用 `<Path>{roots.workflows}/specdev/T-triage/issue-body-template.md</Path>`,关闭评论用 `<Path>{roots.workflows}/specdev/T-triage/close-comment-template.md</Path>`。
82
-
83
- 成功 `published`、用户放弃 `waived`,或从未请求的 `not-requested` 才允许归档。`pending` 与 `publish-failed` 挡住 Archive。下一站由用户指定:reconcile、A,或停止。
84
-
85
- workspace 计数:
86
-
87
- ```bash
88
- node <Path>{roots.workflows}/specdev/T-triage/tools/publish-status.mjs</Path> \
89
- --state-root <Path>{roots.state}/specdev</Path>
90
- ```
91
-
92
- ## Capture
93
-
94
- 尚未成 Change、用户要求先把记事项写到 GitHub 时,加载:
95
-
96
- - `<Path>{roots.workflows}/specdev/T-triage/capture-protocol.md</Path>`;
97
- - `<Path>{roots.workflows}/specdev/T-triage/references/classification-map.md</Path>`;
98
- - `<Path>{roots.workflows}/specdev/T-triage/references/public-projection.md</Path>`。
99
-
100
- 按协议走硬门、确认表、dry-run,再调用 github-npm-ops 的 `issue-search` / `issue-create`。不调用 `issue-comment-close`。账本写 `<Path>{roots.state}/specdev/capture.md</Path>`。Issue 正文用 `<Path>{roots.workflows}/specdev/T-triage/issue-record-template.md</Path>`。默认 1 条记录对应一次未来 intake / 一个未来 Change。攒多了再处理:批量 capture,然后逐条 intake 或先走 W;不把多条 locator 写入同一个 source。
101
-
102
- 成功留下仍 open 的 inbox Issue。intake 消费到同一 locator 时把对应行标为 `intaken`。用户放弃为 `waived`。capture 不挡 Archive,因为没有 change 可归档。
103
-
104
- workspace inbox 计数:
105
-
106
- ```bash
107
- node <Path>{roots.workflows}/specdev/T-triage/tools/capture-status.mjs</Path> \
108
- --state-root <Path>{roots.state}/specdev</Path>
109
- ```
110
-
111
- ## 状态与验证
112
-
113
- intake、reconcile 或 publish 运行:
114
-
115
- ```bash
116
- node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> \
117
- --stage triage \
118
- <Path>{roots.state}/specdev/changes/{change}</Path>
119
- ```
120
-
121
- capture 在账本存在时运行:
122
-
123
- ```bash
124
- node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> \
125
- --capture <Path>{roots.state}/specdev/capture.md</Path>
126
- ```
127
-
128
- 缺失 `<Path>{roots.state}/specdev/capture.md</Path>` 合法,不要为了校验去创建它。
129
-
130
- 验证通过后,intake / reconcile / publish 原子重读 source、triage、publish(若请求过)和 change 状态;成功时将 `specdev/triage` 去重加入 `works_run` 并清空 `current_work`;可恢复失败保留 `current_work` 和具体 blocker。capture 不改任何 change 状态。
131
-
132
- ## 完成标准
133
-
134
- - 来源已冻结为本地工件,原意未被改写,敏感值未持久化;
135
- - 相同 locator 不会静默创建重复 change或覆盖已有快照;
136
- - 分类、影响、风险、未知项和下一 Work 有证据;
137
- - 开发权威完全位于本地 state;
138
- - 未授权时远程写入为零;
139
- - Reconcile 可从失败检查点幂等恢复;
140
- - Publish 可从 `<Path>{roots.state}/specdev/changes/{change}/publish.md</Path>` 失败行幂等恢复,cancelled 默认 skip,本地源计入发布数;
141
- - Capture 可从 `<Path>{roots.state}/specdev/capture.md</Path>` 失败行幂等恢复,Issue 保持 open,不创建 Change;
142
- - 状态、验证结果和下一 Work 完整路径已返回。
143
-
144
- ## 子文件引用
145
-
146
- - Intake:`<Path>{roots.workflows}/specdev/T-triage/intake-protocol.md</Path>`
147
- - Reconcile:`<Path>{roots.workflows}/specdev/T-triage/reconcile-protocol.md</Path>`
148
- - Publish:`<Path>{roots.workflows}/specdev/T-triage/publish-protocol.md</Path>`
149
- - Capture:`<Path>{roots.workflows}/specdev/T-triage/capture-protocol.md</Path>`
150
- - Source 模板:`<Path>{roots.workflows}/specdev/T-triage/source-template.md</Path>`
151
- - Triage 模板:`<Path>{roots.workflows}/specdev/T-triage/triage-template.md</Path>`
152
- - Publish 模板:`<Path>{roots.workflows}/specdev/T-triage/publish-template.md</Path>`
153
- - Capture 模板:`<Path>{roots.workflows}/specdev/T-triage/capture-template.md</Path>`
154
- - 分类映射:`<Path>{roots.workflows}/specdev/T-triage/references/classification-map.md</Path>`
155
- - 公共投影:`<Path>{roots.workflows}/specdev/T-triage/references/public-projection.md</Path>`
156
- - Issue 正文:`<Path>{roots.workflows}/specdev/T-triage/issue-body-template.md</Path>`
157
- - 记事项正文:`<Path>{roots.workflows}/specdev/T-triage/issue-record-template.md</Path>`
158
- - 关闭评论:`<Path>{roots.workflows}/specdev/T-triage/close-comment-template.md</Path>`
159
- - 发布计数:`<Path>{roots.workflows}/specdev/T-triage/tools/publish-status.mjs</Path>`
160
- - inbox 计数:`<Path>{roots.workflows}/specdev/T-triage/tools/capture-status.mjs</Path>`
51
+ 回读真实工件、账本和远程回执,返回结果、未完成项、验证命令及完整恢复位置。external_action 的 closed/waived/not-applicable 与 publish_action 的 not-requested/published/waived 各自满足归档门;pending/failed 恢复原模式。PR 仅 requested=true 的未闭合交付挡门,独立发布不自动挡 change 归档。归档交 <Path>{roots.workflows}/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md</Path>。
@@ -29,7 +29,7 @@ capture **不得**:
29
29
  失败即停,零远程写入。已有账本行保持原 state。
30
30
 
31
31
  1. 每条纳入记录有 id(`YYYY-MM-DD-<kebab>`)、现在时摘要、且 `kind` 为 bug、feature、refactor、investigation、operations、documentation 或 review。禁止 `mixed`。
32
- 2. 调用 `<Path>{roots.skills}/github-npm-ops/SKILL.md</Path>` 能读目标 repo、能 dry-run `issue-create`。本协议只用 `issue-search` / `issue-create`。
32
+ 2. 调用 `<Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path>` 能读目标 repo、能 dry-run `issue-create`。本协议只用 `issue-search` / `issue-create`。
33
33
  3. 分类映射见 `<Path>{roots.workflows}/specdev/T-triage/references/classification-map.md</Path>`。缺 type 标签时 dry-run 表列出将创建的标签,授权后才 `gh label create`。
34
34
  4. 用户看见完整 dry-run 表(id、标题、标签、正文、reason)并给出 **本次** 明确确认。
35
35
 
@@ -0,0 +1,11 @@
1
+ # CI 与安全告警
2
+
3
+ 读取 <Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path> 和 <Path>{roots.workflows}/specdev/T-triage/triage-run-template.md</Path>。独立运行记录由 T 写入 <Path>{roots.state}/specdev/triage-runs/TRI-###.md</Path>,不创建 change 或占用 current_work。
4
+
5
+ 固定 repo、run/alert ID、commit SHA、workflow、时间和可见权限,使用 gh run view / gh api 读取日志与分页结果。先脱敏再持久化。
6
+
7
+ CI:区分代码/类型/测试、工具版本、依赖、构建产物与临时环境问题。依据同 SHA 的复现、日志、历史与环境差异判断;两次失败不是“非 flaky”的证明。rerun 必须有授权和验证假设,不能靠反复重跑掩盖失败。修复交 <Path>{roots.workflows}/specdev/D-diagnose-bugs/D-diagnose-bugs.md</Path> / <Path>{roots.workflows}/specdev/I-implement/I-implement.md</Path>,记录关联 change 后恢复原 run。
8
+
9
+ 安全:按项目政策读取 Dependabot、secret scanning、code scanning 的事实与影响。凭据泄露优先提出撤销/轮换方案,敏感细节保留在受控渠道;公开回复、关闭/删除内容、撤销凭据和修改配置须有准确动作授权。权限不足记 unknown,不能把无法读取当作零告警。修复后依据真实证据关闭,CI 绿不等于依赖安全。
10
+
11
+ 不设默认周期或统一 SLA,不自动合并、安装工具或创建监控。返回分类、证据、待授权动作、路由和恢复位置;只有记录完整并通过 --triage-run 校验才标 completed。
@@ -1,10 +1,10 @@
1
1
  # Intake Protocol
2
2
 
3
- 仅在 Triage `mode=intake` 时加载。本协议把外部输入转换为不可静默覆盖的本地来源快照。v1 不回写源 Issue 标签。
3
+ 仅在 Triage `mode=intake` 时加载。本协议把外部输入转换为不可静默覆盖的本地来源快照。默认不回写源 Issue 标签;显式要求的标签更新按远程协议单独授权、记录并重读。
4
4
 
5
5
  ## 1. 解析来源
6
6
 
7
- 按以下优先级确定 `source_type`:GitHub Issue/PR URL、普通 URL、项目相对文件、用户粘贴内容、当前对话。来源为 GitHub 时调用 `<Path>{roots.skills}/github-npm-ops/SKILL.md</Path>` 的 `issue-read` 或 `pr-read`;其他 URL 使用当前环境可用的只读读取能力。读取失败时保持 blocked,并请求用户提供导出或粘贴内容。
7
+ 按以下优先级确定 `source_type`:GitHub Issue/PR URL、普通 URL、项目相对文件、用户粘贴内容、当前对话。来源为 GitHub 时调用 `<Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path>` 的 `issue-read` 或 `pr-read`;其他 URL 使用当前环境可用的只读读取能力。读取失败时保持 blocked,并请求用户提供导出或粘贴内容。
8
8
 
9
9
  只记录规范化 URL、项目相对 Path 或 null;不保存机器绝对路径、认证信息、Cookie 或令牌。
10
10
 
@@ -13,7 +13,7 @@
13
13
  在 active 和 archive 的 `<Path>{roots.state}/specdev/changes/{change}/source.md</Path>` 或对应归档 Source 中查询相同 `canonical_locator`:
14
14
 
15
15
  - locator 与 hash 相同:恢复已有 change,不创建副本;
16
- - locator 相同但 hash 不同:展示漂移,不覆盖原快照;只有用户确认后才创建新 change,并在新 source 中记录 `supersedes_source`;
16
+ - locator 相同但 hash 不同:展示漂移,不覆盖原快照;仍属当前活动 change 的请求写入 sources/SRC-###.md,supersedes_source 指向前一快照,并更新 triage.source 指向有效版本。已完成/归档或目标范围改变时创建新 change,引用原来源;不重开归档原件;
17
17
  - 没有稳定 locator:按用户指定 change 或新 change 继续。
18
18
 
19
19
  若 `<Path>{roots.state}/specdev/capture.md</Path>` 存在,且某行 `url` 或 marker 对应当前 `canonical_locator`:将该行标为 `intaken`。不得把多条 capture 行合并进同一个 source。默认一条 capture 记录对应一次未来 intake / 一个 Change。相关但目标不清时先走 `<Path>{roots.workflows}/specdev/W-wayfinder/W-wayfinder.md</Path>`。缺失捕获账本不影响 intake。
@@ -35,4 +35,29 @@ GitHub 来源保存 title、body、author、state、labels、created/updated 和
35
35
  - 重复和漂移分支有唯一结果;
36
36
  - 相似归档/ADR 项已展示或明确无匹配;
37
37
  - 失败没有生成伪造或不完整的 Ready source;
38
- - 源 Issue 标签未被本协议修改。
38
+ - 未请求标签回写时无远程写入;已请求动作有独立授权与回执。
39
+
40
+
41
+ ## 分诊与交接
42
+
43
+ 来源冻结后,按命中条目读取永久 ADR/CONTEXT、当前 change 工件和代码事实;可选输入缺失不补造。使用 `<Path>{roots.workflows}/specdev/T-triage/references/classification-map.md</Path>` 分类为 bug、feature、refactor、investigation、operations、documentation、review 或 mixed。评估影响、紧急度、事故半径、安全、数据、迁移与人工批准,把未知项区分为可发现事实、待用户决定和低影响实现细节。
44
+
45
+ 使用 `<Path>{roots.workflows}/specdev/T-triage/triage-template.md</Path>` 写入 `<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>`。按以下条件选择下一 Work,而不是要求每个请求经过全链:
46
+
47
+ | 条件 | 下一 Work |
48
+ |---|---|
49
+ | 根因未知的 bug | `<Path>{roots.workflows}/specdev/D-diagnose-bugs/D-diagnose-bugs.md</Path>` |
50
+ | 产品或架构高影响决定未锁定 | `<Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path>` |
51
+ | 大需求的 change 边界或路线尚不清晰 | `<Path>{roots.workflows}/specdev/W-wayfinder/W-wayfinder.md</Path>` |
52
+ | 检测 UI、比较风格并固化设计包 | `<Path>{roots.workflows}/specdev/P-prototype/P-prototype.md</Path>` |
53
+ | 外部行为明确,需要验收合同 | `<Path>{roots.workflows}/specdev/S-spec/S-spec.md</Path>` |
54
+ | 固定点 diff 或 PR 审查 | `<Path>{roots.workflows}/specdev/C-code-review/C-code-review.md</Path>` |
55
+ | 小型明确变更 | `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`,或获批 Direct Spec |
56
+
57
+ 只有目标、范围、验证、路径和风险全部明确且用户批准 Direct Spec,`ready_for_implementation` 才能为 true。相似的归档拒绝或 ADR 只作为决策证据,不自动 wontfix 或回写远程标签。
58
+
59
+ ## v2 核验与快照演进
60
+
61
+ 摄入时读取 <Path>{roots.workflows}/specdev/T-triage/references/issue-pr-policy.md</Path>。填写 disposition、verification、remote_actions;ready-for-agent 仅在 verification=passed 时使用,仍不代替 Ticket Ready。读取 PR 必须获得完整分页、reviews/review comments/diff、base/head SHA 和 fetched_at,缺失或漂移保持 blocked。
62
+
63
+ <Path>{roots.state}/specdev/changes/{change}/source.md</Path> 不覆盖;后续快照写 sources/SRC-###.md,明确 replaces 和有效版本,按 <Path>{roots.workflows}/specdev/common/rules/artifact-contract.md</Path> 管理。活动 triage v1 只在用户选择该 T 分支后,以原始内容为证据补齐 v2 字段和验证;保留旧版本证据,不自动批量迁移。裸编号先查询对象类型;已有实现、重复、明确拒绝分别记录,已有 PR 输出剩余工作 brief。
@@ -0,0 +1,13 @@
1
+ # PR 交付
2
+
3
+ 读取 <Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path> 与 <Path>{roots.workflows}/specdev/T-triage/references/issue-pr-policy.md</Path>。选择明确 change、目标 repo、base/head,确认相关代码与本地验证 Evidence;不自动提交或 push。
4
+
5
+ 按 <Path>{roots.workflows}/specdev/T-triage/pr-record-template.md</Path> 创建 <Path>{roots.state}/specdev/changes/{change}/pull-requests/PR-###.md</Path>,ID 取最小未用正整数。delivery_target 按请求登记 draft 或 ready;要求 ready 时创建 draft 只是中间步骤,仍挡交付门。T 拥有该记录;不修改 external_action、publish_action 或 capture。
6
+
7
+ 1. 固定远程 base/head SHA,核对本地提交对象。未推送的 head 先报告所需独立 push 动作。
8
+ 2. 读取目标仓库 PR 模板,形成 Summary、Evidence、Before/After(适用时)、Merge Risk/rollback;记录 AI 协助。Evidence 必须可追溯,未验证项目明确列出。
9
+ 3. 固定 marker=specdev:<change>:PR-###,冻结正文摘要。更新已有 PR 前读取 expected-body-sha256 与 SHA,人工变更需比较并重新形成更新内容。
10
+ 4. 执行 pr-create/pr-update 的 dry-run,展示精确动作;授权后执行 --apply。默认创建 draft。可审查切换需检查 verification=passed 并单独执行 pr-ready。
11
+ 5. 读回 URL、正文、draft 状态与 SHA,原子更新记录并重读,运行 SpecDev --stage pr-delivery。失败保留原记录;超时先按 marker 和分支查询。
12
+
13
+ requested=false 或 waived 的记录不挡归档;明确请求且 pending/failed 的 PR 交付挡对应交付门,不回退已完成代码事实。创建成功不意味着 merge 或 release 已获授权。返回 PR、记录、验证和下一动作。
@@ -0,0 +1,39 @@
1
+ ---
2
+ schema_version: 1
3
+ artifact: pull-request
4
+ change: <YYYY-MM-DD-topic>
5
+ id: PR-001
6
+ requested: true
7
+ delivery_target: draft
8
+ status: planned
9
+ repo: owner/repo
10
+ base_sha: <40-hex>
11
+ head_sha: <40-hex>
12
+ body_sha256: <64-hex>
13
+ verification: pending
14
+ url: null
15
+ updated_at: <ISO-8601>
16
+ ---
17
+
18
+ # PR 交付记录
19
+
20
+ ## Summary
21
+ 问题、最终行为、仓库模板及 AI 协助说明。
22
+
23
+ ## Evidence
24
+ 测试命令、退出码、固定提交、未验证项与证据引用。
25
+
26
+ ## Before / After
27
+ 适用时给出前后行为或视觉证据;不适用注明原因。
28
+
29
+ ## Merge Risk
30
+ 回退是否可行、影响范围、数据/兼容性风险和回退条件。
31
+
32
+ ## Authorization
33
+ 动作、准确目标与用户授权出处;无授权时仅 dry-run。
34
+
35
+ ## Receipt
36
+ marker、number/URL、读回结果、状态与尝试。
37
+
38
+ ## Recovery
39
+ 失败步骤、已完成动作、远程漂移和恢复条件。
@@ -23,7 +23,7 @@ publish **不得**改 Ticket / Spec / Evidence / Goal / change completed 事实
23
23
 
24
24
  1. 按 `<Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>` 重验本地完成。
25
25
  2. 至少一张可发布票:status `done`,或用户选择纳入的 `cancelled`。没有 Ticket 文件(纯 Direct Spec)时停止;v1 不发 Change 级单 Issue。
26
- 3. 调用 `<Path>{roots.skills}/github-npm-ops/SKILL.md</Path>` 能读目标 repo、能 dry-run `issue-create`。
26
+ 3. 调用 `<Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path>` 能读目标 repo、能 dry-run `issue-create`。
27
27
  4. 分类映射见 `<Path>{roots.workflows}/specdev/T-triage/references/classification-map.md</Path>`。缺 type 标签时 dry-run 表列出将创建的标签,授权后才 `gh label create`。
28
28
  5. Change `classification` 为 `mixed` 时,确认表上每张纳入票都有 `kind`。
29
29
  6. 用户看见完整 dry-run 表(标题、标签、正文、关闭评论、reason)并给出 **本次** 明确确认。
@@ -0,0 +1,7 @@
1
+ # 候选队列
2
+
3
+ 输入明确 repo、检索范围与用户目标。先读 <Path>{roots.workflows}/specdev/T-triage/references/issue-pr-policy.md</Path>,只进行远程读取。返回候选编号、类型、作者关系、证据摘要、重复关系和建议次序,不创建 change。
4
+
5
+ 默认查询 Issue。config.github.include_external_prs 为 true 或用户要求纳入时,额外读取 PR;队列中的外部作者排除 OWNER/MEMBER/COLLABORATOR。用户直接指定的 PR 不受该队列筛选限制。裸编号先查询真实对象类型,不能猜测 Issue/PR。
6
+
7
+ 注明 query、时间、分页和覆盖范围;无法穷尽时明确不完整,不把“未查到”写成不存在。按影响、阻断程度与证据成熟度排序;尚未接受的候选不是开发 tracker。选择摄入后才进入 <Path>{roots.workflows}/specdev/T-triage/intake-protocol.md</Path>。