universal-dev-standards 5.16.0 → 6.0.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 (540) hide show
  1. package/bin/uds.js +13 -135
  2. package/bundled/ai/standards/acceptance-criteria-traceability.ai.yaml +13 -4
  3. package/bundled/ai/standards/accessibility-standards.ai.yaml +1 -1
  4. package/bundled/ai/standards/ai-response-navigation.ai.yaml +15 -2
  5. package/bundled/ai/standards/api-design-standards.ai.yaml +27 -4
  6. package/bundled/ai/standards/behavior-snapshot.ai.yaml +86 -9
  7. package/bundled/ai/standards/checkin-standards.ai.yaml +2 -2
  8. package/bundled/ai/standards/code-review.ai.yaml +2 -2
  9. package/bundled/ai/standards/context-aware-loading.ai.yaml +3 -3
  10. package/bundled/ai/standards/data-migration-testing.ai.yaml +79 -3
  11. package/bundled/ai/standards/deprecation-standards.ai.yaml +10 -2
  12. package/bundled/ai/standards/developer-memory.ai.yaml +4 -3
  13. package/bundled/ai/standards/flow-based-testing.ai.yaml +2 -2
  14. package/bundled/ai/standards/forward-derivation-standards.ai.yaml +26 -2
  15. package/bundled/ai/standards/full-coverage-testing.ai.yaml +34 -2
  16. package/bundled/ai/standards/git-worktree.ai.yaml +3 -3
  17. package/bundled/ai/standards/logging.ai.yaml +97 -3
  18. package/bundled/ai/standards/mock-boundary.ai.yaml +48 -2
  19. package/bundled/ai/standards/model-provenance.ai.yaml +297 -0
  20. package/bundled/ai/standards/model-selection.ai.yaml +11 -2
  21. package/bundled/ai/standards/observability-standards.ai.yaml +10 -0
  22. package/bundled/ai/standards/performance-standards.ai.yaml +46 -1
  23. package/bundled/ai/standards/pii-classification.ai.yaml +15 -1
  24. package/bundled/ai/standards/pipeline-security-gates.ai.yaml +10 -0
  25. package/bundled/ai/standards/privacy-standards.ai.yaml +2 -2
  26. package/bundled/ai/standards/project-context-memory.ai.yaml +2 -2
  27. package/bundled/ai/standards/refactoring-standards.ai.yaml +68 -3
  28. package/bundled/ai/standards/resource-cost-boundary.ai.yaml +279 -0
  29. package/bundled/ai/standards/reverse-engineering-standards.ai.yaml +55 -2
  30. package/bundled/ai/standards/security-testing.ai.yaml +13 -2
  31. package/bundled/ai/standards/skill-standard-alignment-check.ai.yaml +37 -2
  32. package/bundled/ai/standards/user-journey-testing.ai.yaml +107 -0
  33. package/bundled/ai/standards/verification-oracle.ai.yaml +278 -0
  34. package/bundled/ai/standards/versioning.ai.yaml +32 -38
  35. package/bundled/core/acceptance-criteria-traceability.md +15 -5
  36. package/bundled/core/accessibility-standards.md +8 -4
  37. package/bundled/core/ai-friendly-architecture.md +1 -1
  38. package/bundled/core/ai-response-navigation.md +31 -3
  39. package/bundled/core/anti-sycophancy-prompting.md +1 -1
  40. package/bundled/core/api-design-standards.md +92 -7
  41. package/bundled/core/audit-trail.md +119 -0
  42. package/bundled/core/behavior-snapshot.md +94 -7
  43. package/bundled/core/browser-compatibility-standards.md +15 -2
  44. package/bundled/core/checkin-standards.md +9 -2
  45. package/bundled/core/code-review-checklist.md +10 -2
  46. package/bundled/core/container-image-standards.md +97 -0
  47. package/bundled/core/context-aware-loading.md +2 -2
  48. package/bundled/core/cost-budget-test.md +1 -1
  49. package/bundled/core/cross-flow-regression.md +3 -2
  50. package/bundled/core/data-contract.md +104 -0
  51. package/bundled/core/data-migration-testing.md +90 -0
  52. package/bundled/core/data-pipeline.md +113 -0
  53. package/bundled/core/deprecation-standards.md +16 -2
  54. package/bundled/core/developer-memory.md +13 -8
  55. package/bundled/core/documentation-writing-standards.md +1 -1
  56. package/bundled/core/error-code-standards.md +4 -3
  57. package/bundled/core/flaky-test-management.md +1 -1
  58. package/bundled/core/flow-based-testing.md +3 -3
  59. package/bundled/core/forward-derivation-standards.md +33 -5
  60. package/bundled/core/full-coverage-testing.md +72 -0
  61. package/bundled/core/git-worktree.md +4 -4
  62. package/bundled/core/guides/performance-guide.md +1 -1
  63. package/bundled/core/guides/security-guide.md +1 -1
  64. package/bundled/core/health-check-standards.md +2 -2
  65. package/bundled/core/iac-design-principles.md +97 -0
  66. package/bundled/core/incident-response.md +119 -0
  67. package/bundled/core/license-compliance.md +2 -0
  68. package/bundled/core/logging-standards.md +78 -2
  69. package/bundled/core/mock-boundary.md +54 -2
  70. package/bundled/core/model-provenance.md +181 -0
  71. package/bundled/core/model-selection.md +27 -2
  72. package/bundled/core/packaging-standards.md +1 -0
  73. package/bundled/core/performance-standards.md +96 -2
  74. package/bundled/core/pii-classification.md +148 -0
  75. package/bundled/core/pipeline-security-gates.md +22 -2
  76. package/bundled/core/postmortem-standards.md +2 -0
  77. package/bundled/core/prd-standards.md +91 -0
  78. package/bundled/core/privacy-standards.md +14 -3
  79. package/bundled/core/product-metrics-standards.md +100 -0
  80. package/bundled/core/project-context-memory.md +8 -2
  81. package/bundled/core/prompt-regression.md +1 -1
  82. package/bundled/core/refactoring-standards.md +44 -3
  83. package/bundled/core/replay-test.md +1 -1
  84. package/bundled/core/resource-cost-boundary.md +180 -0
  85. package/bundled/core/reverse-engineering-standards.md +66 -2
  86. package/bundled/core/runbook.md +113 -0
  87. package/bundled/core/schema-evolution.md +105 -0
  88. package/bundled/core/secret-management-standards.md +110 -0
  89. package/bundled/core/security-testing.md +26 -2
  90. package/bundled/core/self-review-protocol.md +2 -2
  91. package/bundled/core/skill-standard-alignment-check.md +53 -0
  92. package/bundled/core/slo-sli.md +109 -0
  93. package/bundled/core/smoke-test.md +1 -1
  94. package/bundled/core/spec-driven-development.md +21 -3
  95. package/bundled/core/tech-debt-standards.md +1 -1
  96. package/bundled/core/test-data-standards.md +2 -2
  97. package/bundled/core/user-journey-testing.md +102 -0
  98. package/bundled/core/user-story-mapping.md +96 -0
  99. package/bundled/core/verification-oracle.md +167 -0
  100. package/bundled/core/versioning.md +133 -109
  101. package/bundled/locales/COVERAGE.md +84 -73
  102. package/bundled/locales/zh-CN/CHANGELOG.md +81 -6
  103. package/bundled/locales/zh-CN/CLAUDE.md +1 -1
  104. package/bundled/locales/zh-CN/README.md +22 -9
  105. package/bundled/locales/zh-CN/SECURITY.md +1 -1
  106. package/bundled/locales/zh-CN/adoption/DAILY-WORKFLOW-GUIDE.md +2 -2
  107. package/bundled/locales/zh-CN/core/acceptance-criteria-traceability.md +4 -6
  108. package/bundled/locales/zh-CN/core/accessibility-standards.md +1 -1
  109. package/bundled/locales/zh-CN/core/adversarial-test.md +226 -0
  110. package/bundled/locales/zh-CN/core/agent-behavior-discipline.md +187 -0
  111. package/bundled/locales/zh-CN/core/ai-response-navigation.md +32 -6
  112. package/bundled/locales/zh-CN/core/anti-sycophancy-prompting.md +1 -1
  113. package/bundled/locales/zh-CN/core/api-design-standards.md +1 -1
  114. package/bundled/locales/zh-CN/core/behavior-snapshot.md +335 -0
  115. package/bundled/locales/zh-CN/core/browser-compatibility-standards.md +229 -0
  116. package/bundled/locales/zh-CN/core/cd-deployment-strategies.md +135 -0
  117. package/bundled/locales/zh-CN/core/chaos-injection-tests.md +130 -0
  118. package/bundled/locales/zh-CN/core/checkin-standards.md +1 -1
  119. package/bundled/locales/zh-CN/core/code-review-checklist.md +1 -1
  120. package/bundled/locales/zh-CN/core/container-security.md +535 -0
  121. package/bundled/locales/zh-CN/core/context-aware-loading.md +1 -1
  122. package/bundled/locales/zh-CN/core/contract-testing-standards.md +191 -0
  123. package/bundled/locales/zh-CN/core/cost-budget-test.md +86 -0
  124. package/bundled/locales/zh-CN/core/cross-flow-regression.md +199 -0
  125. package/bundled/locales/zh-CN/core/data-migration-testing.md +217 -0
  126. package/bundled/locales/zh-CN/core/deployment-standards.md +328 -9
  127. package/bundled/locales/zh-CN/core/deprecation-standards.md +1 -1
  128. package/bundled/locales/zh-CN/core/developer-memory.md +2 -2
  129. package/bundled/locales/zh-CN/core/disaster-recovery-drill.md +87 -0
  130. package/bundled/locales/zh-CN/core/documentation-structure.md +1 -1
  131. package/bundled/locales/zh-CN/core/documentation-writing-standards.md +1 -1
  132. package/bundled/locales/zh-CN/core/error-code-standards.md +2 -2
  133. package/bundled/locales/zh-CN/core/feature-manifest-standard.md +222 -0
  134. package/bundled/locales/zh-CN/core/flaky-test-management.md +87 -0
  135. package/bundled/locales/zh-CN/core/flow-based-testing.md +284 -0
  136. package/bundled/locales/zh-CN/core/forward-derivation-standards.md +3 -4
  137. package/bundled/locales/zh-CN/core/full-coverage-testing.md +197 -0
  138. package/bundled/locales/zh-CN/core/git-worktree.md +1 -1
  139. package/bundled/locales/zh-CN/core/governance-layer.md +160 -0
  140. package/bundled/locales/zh-CN/core/guides/performance-guide.md +515 -0
  141. package/bundled/locales/zh-CN/core/guides/security-guide.md +494 -0
  142. package/bundled/locales/zh-CN/core/knowledge-graph-memory.md +128 -0
  143. package/bundled/locales/zh-CN/core/license-compliance.md +129 -0
  144. package/bundled/locales/zh-CN/core/llm-output-validation.md +192 -0
  145. package/bundled/locales/zh-CN/core/logging-standards.md +130 -8
  146. package/bundled/locales/zh-CN/core/mock-boundary.md +109 -0
  147. package/bundled/locales/zh-CN/core/model-selection.md +28 -5
  148. package/bundled/locales/zh-CN/core/mutation-testing.md +106 -0
  149. package/bundled/locales/zh-CN/core/no-cicd-deployment.md +219 -0
  150. package/bundled/locales/zh-CN/core/packaging-standards.md +76 -5
  151. package/bundled/locales/zh-CN/core/pipeline-security-gates.md +126 -0
  152. package/bundled/locales/zh-CN/core/policy-as-code-testing.md +203 -0
  153. package/bundled/locales/zh-CN/core/privacy-standards.md +1 -1
  154. package/bundled/locales/zh-CN/core/project-context-memory.md +1 -1
  155. package/bundled/locales/zh-CN/core/prompt-regression.md +88 -0
  156. package/bundled/locales/zh-CN/core/property-based-testing.md +87 -0
  157. package/bundled/locales/zh-CN/core/release-quality-manifest.md +207 -0
  158. package/bundled/locales/zh-CN/core/release-readiness-gate.md +193 -0
  159. package/bundled/locales/zh-CN/core/replay-test.md +102 -0
  160. package/bundled/locales/zh-CN/core/reverse-engineering-standards.md +46 -1
  161. package/bundled/locales/zh-CN/core/rollback-standards.md +120 -0
  162. package/bundled/locales/zh-CN/core/sast-advanced.md +309 -0
  163. package/bundled/locales/zh-CN/core/secure-op.md +328 -0
  164. package/bundled/locales/zh-CN/core/security-testing.md +96 -0
  165. package/bundled/locales/zh-CN/core/self-review-protocol.md +167 -0
  166. package/bundled/locales/zh-CN/core/server-ops-security.md +507 -0
  167. package/bundled/locales/zh-CN/core/smoke-test.md +79 -0
  168. package/bundled/locales/zh-CN/core/spec-driven-development.md +55 -5
  169. package/bundled/locales/zh-CN/core/supply-chain-attestation.md +131 -0
  170. package/bundled/locales/zh-CN/core/versioning.md +1 -1
  171. package/bundled/locales/zh-CN/docs/CHEATSHEET.md +31 -6
  172. package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +61 -34
  173. package/bundled/locales/zh-CN/docs/MIGRATION-v6.md +88 -0
  174. package/bundled/locales/zh-CN/docs/USAGE-MODES-COMPARISON.md +2 -2
  175. package/bundled/locales/zh-CN/docs/USER-MANUAL.md +14 -14
  176. package/bundled/locales/zh-CN/docs/specs/system/memory-adoption-strategy.md +105 -0
  177. package/bundled/locales/zh-CN/docs/user/FAQ.md +132 -0
  178. package/bundled/locales/zh-CN/docs/user/GETTING-STARTED.md +144 -0
  179. package/bundled/locales/zh-CN/docs/user/GLOSSARY.md +178 -0
  180. package/bundled/locales/zh-CN/docs/user/README.md +70 -0
  181. package/bundled/locales/zh-CN/docs/user/TROUBLESHOOTING.md +190 -0
  182. package/bundled/locales/zh-CN/integrations/github-copilot/COPILOT-CHAT-REFERENCE.md +1 -1
  183. package/bundled/locales/zh-CN/integrations/github-copilot/README.md +1 -1
  184. package/bundled/locales/zh-CN/integrations/github-copilot/skills-mapping.md +3 -3
  185. package/bundled/locales/zh-CN/integrations/opencode/skills-mapping.md +3 -3
  186. package/bundled/locales/zh-CN/methodologies/guides/sdd-guide.md +836 -0
  187. package/bundled/locales/zh-CN/options/changelog/auto-generated.md +166 -0
  188. package/bundled/locales/zh-CN/options/changelog/keep-a-changelog.md +140 -0
  189. package/bundled/locales/zh-CN/options/code-review/automated-review.md +214 -0
  190. package/bundled/locales/zh-CN/options/code-review/pair-programming.md +166 -0
  191. package/bundled/locales/zh-CN/options/code-review/pr-review.md +167 -0
  192. package/bundled/locales/zh-CN/options/documentation/api-docs.md +191 -0
  193. package/bundled/locales/zh-CN/options/documentation/markdown-docs.md +150 -0
  194. package/bundled/locales/zh-CN/options/documentation/wiki-style.md +131 -0
  195. package/bundled/locales/zh-CN/options/project-structure/kotlin.md +144 -0
  196. package/bundled/locales/zh-CN/options/project-structure/php.md +168 -0
  197. package/bundled/locales/zh-CN/options/project-structure/ruby.md +156 -0
  198. package/bundled/locales/zh-CN/options/project-structure/rust.md +136 -0
  199. package/bundled/locales/zh-CN/options/project-structure/swift.md +165 -0
  200. package/bundled/locales/zh-CN/options/testing/contract-testing.md +237 -0
  201. package/bundled/locales/zh-CN/options/testing/industry-pyramid.md +200 -0
  202. package/bundled/locales/zh-CN/options/testing/istqb-framework.md +144 -0
  203. package/bundled/locales/zh-CN/options/testing/performance-testing.md +251 -0
  204. package/bundled/locales/zh-CN/options/testing/security-testing.md +192 -0
  205. package/bundled/locales/zh-CN/skills/README.md +89 -126
  206. package/bundled/locales/zh-CN/skills/ac-coverage/SKILL.md +5 -7
  207. package/bundled/locales/zh-CN/skills/adr-assistant/SKILL.md +1 -1
  208. package/bundled/locales/zh-CN/skills/agents/code-architect.md +263 -0
  209. package/bundled/locales/zh-CN/skills/agents/doc-writer.md +410 -0
  210. package/bundled/locales/zh-CN/skills/agents/reviewer.md +357 -0
  211. package/bundled/locales/zh-CN/skills/agents/spec-analyst.md +410 -0
  212. package/bundled/locales/zh-CN/skills/agents/test-specialist.md +368 -0
  213. package/bundled/locales/zh-CN/skills/ai-collaboration-standards/SKILL.md +2 -2
  214. package/bundled/locales/zh-CN/skills/ai-friendly-architecture/SKILL.md +2 -2
  215. package/bundled/locales/zh-CN/skills/ai-instruction-standards/SKILL.md +1 -1
  216. package/bundled/locales/zh-CN/skills/atdd-assistant/acceptance-criteria-guide.md +1 -1
  217. package/bundled/locales/zh-CN/skills/atdd-assistant/atdd-workflow.md +3 -4
  218. package/bundled/locales/zh-CN/skills/audit-assistant/SKILL.md +2 -2
  219. package/bundled/locales/zh-CN/skills/bdd-assistant/guide.md +1 -2
  220. package/bundled/locales/zh-CN/skills/brainstorm-assistant/SKILL.md +109 -13
  221. package/bundled/locales/zh-CN/skills/brainstorm-assistant/guide.md +30 -8
  222. package/bundled/locales/zh-CN/skills/checkin-assistant/SKILL.md +1 -1
  223. package/bundled/locales/zh-CN/skills/ci-cd-assistant/SKILL.md +50 -0
  224. package/bundled/locales/zh-CN/skills/code-review-assistant/SKILL.md +5 -5
  225. package/bundled/locales/zh-CN/skills/commands/ac-coverage.md +1 -1
  226. package/bundled/locales/zh-CN/skills/commands/atdd.md +3 -3
  227. package/bundled/locales/zh-CN/skills/commands/bdd.md +2 -2
  228. package/bundled/locales/zh-CN/skills/commands/brainstorm.md +26 -17
  229. package/bundled/locales/zh-CN/skills/commands/{review.md → code-review.md} +4 -4
  230. package/bundled/locales/zh-CN/skills/commands/derive-all.md +1 -1
  231. package/bundled/locales/zh-CN/skills/commands/derive-atdd.md +1 -1
  232. package/bundled/locales/zh-CN/skills/commands/derive-bdd.md +2 -3
  233. package/bundled/locales/zh-CN/skills/commands/derive-tdd.md +1 -1
  234. package/bundled/locales/zh-CN/skills/commands/derive.md +1 -1
  235. package/bundled/locales/zh-CN/skills/commands/dev-workflow.md +2 -2
  236. package/bundled/locales/zh-CN/skills/commands/methodology.md +4 -4
  237. package/bundled/locales/zh-CN/skills/commands/pr.md +1 -1
  238. package/bundled/locales/zh-CN/skills/commands/tdd.md +1 -1
  239. package/bundled/locales/zh-CN/skills/commit-standards/SKILL.md +1 -1
  240. package/bundled/locales/zh-CN/skills/contract-test-assistant/SKILL.md +1 -1
  241. package/bundled/locales/zh-CN/skills/dev-methodology/SKILL.md +1 -1
  242. package/bundled/locales/zh-CN/skills/dev-methodology/create-methodology.md +456 -0
  243. package/bundled/locales/zh-CN/skills/dev-methodology/guide.md +6 -6
  244. package/bundled/locales/zh-CN/skills/dev-methodology/runtime.md +296 -0
  245. package/bundled/locales/zh-CN/skills/dev-workflow-guide/SKILL.md +5 -5
  246. package/bundled/locales/zh-CN/skills/docs-generator/SKILL.md +1 -1
  247. package/bundled/locales/zh-CN/skills/e2e-assistant/SKILL.md +1 -1
  248. package/bundled/locales/zh-CN/skills/incident-response-assistant/SKILL.md +2 -2
  249. package/bundled/locales/zh-CN/skills/journey-test-assistant/SKILL.md +1 -1
  250. package/bundled/locales/zh-CN/skills/logging-guide/SKILL.md +146 -142
  251. package/bundled/locales/zh-CN/skills/migration-assistant/SKILL.md +1 -1
  252. package/bundled/locales/zh-CN/skills/observability-assistant/guide.md +1 -1
  253. package/bundled/locales/zh-CN/skills/pr-automation-assistant/SKILL.md +1 -1
  254. package/bundled/locales/zh-CN/skills/project-discovery/guide.md +2 -2
  255. package/bundled/locales/zh-CN/skills/reverse-engineer/SKILL.md +1 -1
  256. package/bundled/locales/zh-CN/skills/runbook-assistant/guide.md +1 -1
  257. package/bundled/locales/zh-CN/skills/security-assistant/SKILL.md +1 -1
  258. package/bundled/locales/zh-CN/skills/skill-builder/SKILL.md +3 -3
  259. package/bundled/locales/zh-CN/skills/slo-assistant/guide.md +1 -1
  260. package/bundled/locales/zh-CN/skills/spec-derivation/SKILL.md +1 -1
  261. package/bundled/locales/zh-CN/skills/spec-derivation/guide.md +8 -9
  262. package/bundled/locales/zh-CN/skills/spec-driven-dev/SKILL.md +2 -2
  263. package/bundled/locales/zh-CN/skills/sweep/SKILL.md +1 -1
  264. package/bundled/locales/zh-CN/skills/tdd-assistant/SKILL.md +1 -1
  265. package/bundled/locales/zh-CN/skills/testing-guide/SKILL.md +2 -2
  266. package/bundled/locales/zh-CN/skills/testing-guide/testing-theory.md +2298 -0
  267. package/bundled/locales/zh-CN/skills/workflows/README.md +451 -0
  268. package/bundled/locales/zh-TW/CHANGELOG.md +81 -6
  269. package/bundled/locales/zh-TW/CLAUDE.md +1 -1
  270. package/bundled/locales/zh-TW/MAINTENANCE.md +25 -2
  271. package/bundled/locales/zh-TW/README.md +22 -9
  272. package/bundled/locales/zh-TW/SECURITY.md +1 -1
  273. package/bundled/locales/zh-TW/adoption/DAILY-WORKFLOW-GUIDE.md +2 -2
  274. package/bundled/locales/zh-TW/ai/standards/versioning.ai.yaml +8 -48
  275. package/bundled/locales/zh-TW/core/acceptance-criteria-traceability.md +4 -6
  276. package/bundled/locales/zh-TW/core/accessibility-standards.md +1 -1
  277. package/bundled/locales/zh-TW/core/adversarial-test.md +226 -0
  278. package/bundled/locales/zh-TW/core/agent-behavior-discipline.md +187 -0
  279. package/bundled/locales/zh-TW/core/ai-response-navigation.md +32 -6
  280. package/bundled/locales/zh-TW/core/anti-sycophancy-prompting.md +1 -1
  281. package/bundled/locales/zh-TW/core/api-design-standards.md +91 -9
  282. package/bundled/locales/zh-TW/core/audit-trail.md +110 -0
  283. package/bundled/locales/zh-TW/core/behavior-snapshot.md +335 -0
  284. package/bundled/locales/zh-TW/core/browser-compatibility-standards.md +1 -0
  285. package/bundled/locales/zh-TW/core/cd-deployment-strategies.md +135 -0
  286. package/bundled/locales/zh-TW/core/chaos-injection-tests.md +130 -0
  287. package/bundled/locales/zh-TW/core/checkin-standards.md +1 -1
  288. package/bundled/locales/zh-TW/core/code-review-checklist.md +1 -1
  289. package/bundled/locales/zh-TW/core/container-image-standards.md +93 -0
  290. package/bundled/locales/zh-TW/core/container-security.md +535 -0
  291. package/bundled/locales/zh-TW/core/cost-budget-test.md +86 -0
  292. package/bundled/locales/zh-TW/core/cross-flow-regression.md +1 -0
  293. package/bundled/locales/zh-TW/core/data-contract.md +101 -0
  294. package/bundled/locales/zh-TW/core/data-migration-testing.md +217 -0
  295. package/bundled/locales/zh-TW/core/data-pipeline.md +105 -0
  296. package/bundled/locales/zh-TW/core/deployment-standards.md +363 -25
  297. package/bundled/locales/zh-TW/core/deprecation-standards.md +17 -4
  298. package/bundled/locales/zh-TW/core/developer-memory.md +2 -2
  299. package/bundled/locales/zh-TW/core/disaster-recovery-drill.md +87 -0
  300. package/bundled/locales/zh-TW/core/documentation-writing-standards.md +1 -1
  301. package/bundled/locales/zh-TW/core/error-code-standards.md +2 -2
  302. package/bundled/locales/zh-TW/core/feature-manifest-standard.md +222 -0
  303. package/bundled/locales/zh-TW/core/flaky-test-management.md +87 -0
  304. package/bundled/locales/zh-TW/core/flow-based-testing.md +284 -0
  305. package/bundled/locales/zh-TW/core/forward-derivation-standards.md +3 -4
  306. package/bundled/locales/zh-TW/core/full-coverage-testing.md +250 -0
  307. package/bundled/locales/zh-TW/core/git-worktree.md +1 -1
  308. package/bundled/locales/zh-TW/core/guides/performance-guide.md +515 -0
  309. package/bundled/locales/zh-TW/core/guides/security-guide.md +494 -0
  310. package/bundled/locales/zh-TW/core/iac-design-principles.md +90 -0
  311. package/bundled/locales/zh-TW/core/incident-response.md +111 -0
  312. package/bundled/locales/zh-TW/core/license-compliance.md +129 -0
  313. package/bundled/locales/zh-TW/core/llm-output-validation.md +192 -0
  314. package/bundled/locales/zh-TW/core/logging-standards.md +208 -4
  315. package/bundled/locales/zh-TW/core/mock-boundary.md +161 -0
  316. package/bundled/locales/zh-TW/core/model-provenance.md +173 -0
  317. package/bundled/locales/zh-TW/core/model-selection.md +28 -5
  318. package/bundled/locales/zh-TW/core/mutation-testing.md +106 -0
  319. package/bundled/locales/zh-TW/core/no-cicd-deployment.md +219 -0
  320. package/bundled/locales/zh-TW/core/packaging-standards.md +76 -5
  321. package/bundled/locales/zh-TW/core/performance-standards.md +84 -5
  322. package/bundled/locales/zh-TW/core/pii-classification.md +102 -0
  323. package/bundled/locales/zh-TW/core/pipeline-security-gates.md +126 -0
  324. package/bundled/locales/zh-TW/core/policy-as-code-testing.md +203 -0
  325. package/bundled/locales/zh-TW/core/prd-standards.md +88 -0
  326. package/bundled/locales/zh-TW/core/privacy-standards.md +1 -1
  327. package/bundled/locales/zh-TW/core/product-metrics-standards.md +96 -0
  328. package/bundled/locales/zh-TW/core/project-context-memory.md +1 -1
  329. package/bundled/locales/zh-TW/core/prompt-regression.md +88 -0
  330. package/bundled/locales/zh-TW/core/property-based-testing.md +87 -0
  331. package/bundled/locales/zh-TW/core/refactoring-standards.md +43 -6
  332. package/bundled/locales/zh-TW/core/release-quality-manifest.md +207 -0
  333. package/bundled/locales/zh-TW/core/replay-test.md +102 -0
  334. package/bundled/locales/zh-TW/core/resource-cost-boundary.md +175 -0
  335. package/bundled/locales/zh-TW/core/reverse-engineering-standards.md +64 -5
  336. package/bundled/locales/zh-TW/core/rollback-standards.md +120 -0
  337. package/bundled/locales/zh-TW/core/runbook.md +110 -0
  338. package/bundled/locales/zh-TW/core/sast-advanced.md +309 -0
  339. package/bundled/locales/zh-TW/core/schema-evolution.md +98 -0
  340. package/bundled/locales/zh-TW/core/secret-management-standards.md +101 -0
  341. package/bundled/locales/zh-TW/core/secure-op.md +328 -0
  342. package/bundled/locales/zh-TW/core/security-testing.md +96 -0
  343. package/bundled/locales/zh-TW/core/self-review-protocol.md +2 -2
  344. package/bundled/locales/zh-TW/core/server-ops-security.md +507 -0
  345. package/bundled/locales/zh-TW/core/slo-sli.md +108 -0
  346. package/bundled/locales/zh-TW/core/smoke-test.md +79 -0
  347. package/bundled/locales/zh-TW/core/spec-driven-development.md +39 -13
  348. package/bundled/locales/zh-TW/core/supply-chain-attestation.md +131 -0
  349. package/bundled/locales/zh-TW/core/user-journey-testing.md +111 -0
  350. package/bundled/locales/zh-TW/core/user-story-mapping.md +94 -0
  351. package/bundled/locales/zh-TW/core/verification-oracle.md +159 -0
  352. package/bundled/locales/zh-TW/core/versioning.md +112 -112
  353. package/bundled/locales/zh-TW/docs/CHEATSHEET.md +31 -6
  354. package/bundled/locales/zh-TW/docs/DEV-WORKFLOW-MAPPING.md +6 -6
  355. package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +61 -34
  356. package/bundled/locales/zh-TW/docs/MIGRATION-v6.md +88 -0
  357. package/bundled/locales/zh-TW/docs/USAGE-MODES-COMPARISON.md +2 -2
  358. package/bundled/locales/zh-TW/docs/USER-MANUAL.md +14 -14
  359. package/bundled/locales/zh-TW/docs/specs/system/memory-adoption-strategy.md +105 -0
  360. package/bundled/locales/zh-TW/docs/user/FAQ.md +132 -0
  361. package/bundled/locales/zh-TW/docs/user/GETTING-STARTED.md +144 -0
  362. package/bundled/locales/zh-TW/docs/user/GLOSSARY.md +178 -0
  363. package/bundled/locales/zh-TW/docs/user/README.md +70 -0
  364. package/bundled/locales/zh-TW/docs/user/TROUBLESHOOTING.md +190 -0
  365. package/bundled/locales/zh-TW/integrations/github-copilot/COPILOT-CHAT-REFERENCE.md +1 -1
  366. package/bundled/locales/zh-TW/integrations/github-copilot/README.md +1 -1
  367. package/bundled/locales/zh-TW/integrations/github-copilot/skills-mapping.md +3 -3
  368. package/bundled/locales/zh-TW/integrations/opencode/skills-mapping.md +3 -3
  369. package/bundled/locales/zh-TW/methodologies/guides/sdd-guide.md +523 -26
  370. package/bundled/locales/zh-TW/options/changelog/auto-generated.md +166 -0
  371. package/bundled/locales/zh-TW/options/changelog/keep-a-changelog.md +140 -0
  372. package/bundled/locales/zh-TW/options/code-review/automated-review.md +214 -0
  373. package/bundled/locales/zh-TW/options/code-review/pair-programming.md +166 -0
  374. package/bundled/locales/zh-TW/options/code-review/pr-review.md +167 -0
  375. package/bundled/locales/zh-TW/options/documentation/api-docs.md +191 -0
  376. package/bundled/locales/zh-TW/options/documentation/markdown-docs.md +150 -0
  377. package/bundled/locales/zh-TW/options/documentation/wiki-style.md +131 -0
  378. package/bundled/locales/zh-TW/options/project-structure/kotlin.md +144 -0
  379. package/bundled/locales/zh-TW/options/project-structure/php.md +168 -0
  380. package/bundled/locales/zh-TW/options/project-structure/ruby.md +156 -0
  381. package/bundled/locales/zh-TW/options/project-structure/rust.md +136 -0
  382. package/bundled/locales/zh-TW/options/project-structure/swift.md +165 -0
  383. package/bundled/locales/zh-TW/options/testing/contract-testing.md +237 -0
  384. package/bundled/locales/zh-TW/options/testing/industry-pyramid.md +200 -0
  385. package/bundled/locales/zh-TW/options/testing/istqb-framework.md +144 -0
  386. package/bundled/locales/zh-TW/options/testing/performance-testing.md +251 -0
  387. package/bundled/locales/zh-TW/options/testing/security-testing.md +192 -0
  388. package/bundled/locales/zh-TW/skills/README.md +91 -128
  389. package/bundled/locales/zh-TW/skills/ac-coverage/SKILL.md +4 -6
  390. package/bundled/locales/zh-TW/skills/adr-assistant/SKILL.md +1 -1
  391. package/bundled/locales/zh-TW/skills/agents/code-architect.md +263 -0
  392. package/bundled/locales/zh-TW/skills/agents/doc-writer.md +410 -0
  393. package/bundled/locales/zh-TW/skills/agents/reviewer.md +357 -0
  394. package/bundled/locales/zh-TW/skills/agents/spec-analyst.md +410 -0
  395. package/bundled/locales/zh-TW/skills/agents/test-specialist.md +368 -0
  396. package/bundled/locales/zh-TW/skills/ai-collaboration-standards/SKILL.md +2 -2
  397. package/bundled/locales/zh-TW/skills/ai-friendly-architecture/SKILL.md +2 -2
  398. package/bundled/locales/zh-TW/skills/ai-instruction-standards/SKILL.md +1 -1
  399. package/bundled/locales/zh-TW/skills/atdd-assistant/SKILL.md +2 -0
  400. package/bundled/locales/zh-TW/skills/atdd-assistant/acceptance-criteria-guide.md +1 -1
  401. package/bundled/locales/zh-TW/skills/atdd-assistant/atdd-workflow.md +3 -4
  402. package/bundled/locales/zh-TW/skills/audit-assistant/SKILL.md +2 -2
  403. package/bundled/locales/zh-TW/skills/bdd-assistant/SKILL.md +2 -0
  404. package/bundled/locales/zh-TW/skills/bdd-assistant/guide.md +1 -2
  405. package/bundled/locales/zh-TW/skills/brainstorm-assistant/SKILL.md +110 -14
  406. package/bundled/locales/zh-TW/skills/brainstorm-assistant/guide.md +31 -7
  407. package/bundled/locales/zh-TW/skills/checkin-assistant/SKILL.md +3 -1
  408. package/bundled/locales/zh-TW/skills/ci-cd-assistant/SKILL.md +50 -0
  409. package/bundled/locales/zh-TW/skills/code-review-assistant/SKILL.md +7 -5
  410. package/bundled/locales/zh-TW/skills/commands/ac-coverage.md +1 -1
  411. package/bundled/locales/zh-TW/skills/commands/atdd.md +3 -3
  412. package/bundled/locales/zh-TW/skills/commands/bdd.md +2 -2
  413. package/bundled/locales/zh-TW/skills/commands/brainstorm.md +26 -17
  414. package/bundled/locales/zh-TW/skills/commands/{review.md → code-review.md} +5 -5
  415. package/bundled/locales/zh-TW/skills/commands/derive-all.md +1 -1
  416. package/bundled/locales/zh-TW/skills/commands/derive-atdd.md +1 -1
  417. package/bundled/locales/zh-TW/skills/commands/derive-bdd.md +2 -3
  418. package/bundled/locales/zh-TW/skills/commands/derive-tdd.md +1 -1
  419. package/bundled/locales/zh-TW/skills/commands/derive.md +1 -1
  420. package/bundled/locales/zh-TW/skills/commands/dev-workflow.md +2 -2
  421. package/bundled/locales/zh-TW/skills/commands/methodology.md +4 -4
  422. package/bundled/locales/zh-TW/skills/commands/pr.md +1 -1
  423. package/bundled/locales/zh-TW/skills/commands/tdd.md +1 -1
  424. package/bundled/locales/zh-TW/skills/commit-standards/SKILL.md +1 -1
  425. package/bundled/locales/zh-TW/skills/contract-test-assistant/SKILL.md +1 -1
  426. package/bundled/locales/zh-TW/skills/dev-methodology/create-methodology.md +456 -0
  427. package/bundled/locales/zh-TW/skills/dev-methodology/guide.md +5 -5
  428. package/bundled/locales/zh-TW/skills/dev-methodology/runtime.md +296 -0
  429. package/bundled/locales/zh-TW/skills/dev-workflow-guide/SKILL.md +5 -5
  430. package/bundled/locales/zh-TW/skills/docs-generator/SKILL.md +1 -1
  431. package/bundled/locales/zh-TW/skills/e2e-assistant/SKILL.md +1 -1
  432. package/bundled/locales/zh-TW/skills/incident-response-assistant/SKILL.md +2 -2
  433. package/bundled/locales/zh-TW/skills/logging-guide/SKILL.md +29 -27
  434. package/bundled/locales/zh-TW/skills/migration-assistant/SKILL.md +1 -1
  435. package/bundled/locales/zh-TW/skills/pr-automation-assistant/SKILL.md +3 -1
  436. package/bundled/locales/zh-TW/skills/project-discovery/guide.md +2 -2
  437. package/bundled/locales/zh-TW/skills/reverse-engineer/SKILL.md +1 -1
  438. package/bundled/locales/zh-TW/skills/security-assistant/SKILL.md +1 -1
  439. package/bundled/locales/zh-TW/skills/spec-derivation/guide.md +7 -8
  440. package/bundled/locales/zh-TW/skills/spec-driven-dev/SKILL.md +2 -2
  441. package/bundled/locales/zh-TW/skills/sweep/SKILL.md +1 -1
  442. package/bundled/locales/zh-TW/skills/tdd-assistant/SKILL.md +3 -1
  443. package/bundled/locales/zh-TW/skills/testing-guide/SKILL.md +2 -2
  444. package/bundled/locales/zh-TW/skills/testing-guide/testing-theory.md +2298 -0
  445. package/bundled/locales/zh-TW/skills/workflows/README.md +451 -0
  446. package/bundled/skills/README.md +1 -1
  447. package/bundled/skills/ac-coverage/SKILL.md +17 -7
  448. package/bundled/skills/adr-assistant/SKILL.md +1 -1
  449. package/bundled/skills/agents/code-architect.md +1 -1
  450. package/bundled/skills/agents/doc-writer.md +1 -1
  451. package/bundled/skills/agents/reviewer.md +2 -2
  452. package/bundled/skills/agents/spec-analyst.md +1 -1
  453. package/bundled/skills/agents/test-specialist.md +1 -1
  454. package/bundled/skills/ai-collaboration-standards/SKILL.md +2 -2
  455. package/bundled/skills/ai-friendly-architecture/SKILL.md +2 -2
  456. package/bundled/skills/ai-instruction-standards/SKILL.md +1 -1
  457. package/bundled/skills/atdd-assistant/SKILL.md +7 -0
  458. package/bundled/skills/atdd-assistant/acceptance-criteria-guide.md +1 -1
  459. package/bundled/skills/atdd-assistant/atdd-workflow.md +6 -8
  460. package/bundled/skills/audit-assistant/SKILL.md +2 -2
  461. package/bundled/skills/bdd-assistant/SKILL.md +7 -0
  462. package/bundled/skills/bdd-assistant/guide.md +1 -2
  463. package/bundled/skills/brainstorm-assistant/SKILL.md +133 -11
  464. package/bundled/skills/brainstorm-assistant/guide.md +33 -5
  465. package/bundled/skills/checkin-assistant/SKILL.md +8 -1
  466. package/bundled/skills/ci-cd-assistant/SKILL.md +57 -0
  467. package/bundled/skills/code-review-assistant/SKILL.md +15 -8
  468. package/bundled/skills/commands/COMMAND-FAMILY-OVERVIEW.md +2 -2
  469. package/bundled/skills/commands/COMMAND-INDEX.json +3 -3
  470. package/bundled/skills/commands/README.md +2 -2
  471. package/bundled/skills/commands/ac-coverage.md +1 -1
  472. package/bundled/skills/commands/atdd.md +2 -2
  473. package/bundled/skills/commands/bdd.md +2 -2
  474. package/bundled/skills/commands/brainstorm.md +25 -14
  475. package/bundled/skills/commands/{review.md → code-review.md} +6 -6
  476. package/bundled/skills/commands/derive-all.md +1 -1
  477. package/bundled/skills/commands/derive-atdd.md +1 -1
  478. package/bundled/skills/commands/derive-bdd.md +2 -3
  479. package/bundled/skills/commands/derive-tdd.md +1 -1
  480. package/bundled/skills/commands/derive.md +1 -1
  481. package/bundled/skills/commands/dev-workflow.md +1 -1
  482. package/bundled/skills/commands/journey-test.md +45 -0
  483. package/bundled/skills/commands/methodology.md +4 -4
  484. package/bundled/skills/commands/pr.md +1 -1
  485. package/bundled/skills/commands/skill-builder.md +42 -0
  486. package/bundled/skills/commands/tdd.md +1 -1
  487. package/bundled/skills/dev-methodology/create-methodology.md +1 -1
  488. package/bundled/skills/dev-methodology/guide.md +1 -1
  489. package/bundled/skills/dev-methodology/runtime.md +1 -1
  490. package/bundled/skills/dev-workflow-guide/SKILL.md +3 -3
  491. package/bundled/skills/dev-workflow-guide/workflow-phases.md +3 -3
  492. package/bundled/skills/docs-generator/SKILL.md +3 -3
  493. package/bundled/skills/incident-response-assistant/SKILL.md +2 -2
  494. package/bundled/skills/logging-guide/SKILL.md +38 -2
  495. package/bundled/skills/migration-assistant/SKILL.md +226 -0
  496. package/bundled/skills/observability-assistant/SKILL.md +74 -0
  497. package/bundled/skills/pr-automation-assistant/SKILL.md +5 -1
  498. package/bundled/skills/project-discovery/guide.md +2 -2
  499. package/bundled/skills/push/SKILL.md +1 -1
  500. package/bundled/skills/release-standards/SKILL.md +19 -5
  501. package/bundled/skills/security-assistant/SKILL.md +1 -1
  502. package/bundled/skills/skill-builder/SKILL.md +1 -1
  503. package/bundled/skills/spec-derivation/guide.md +3 -4
  504. package/bundled/skills/spec-driven-dev/SKILL.md +27 -0
  505. package/bundled/skills/sweep/SKILL.md +1 -1
  506. package/bundled/skills/tdd-assistant/SKILL.md +8 -1
  507. package/bundled/skills/testing-guide/SKILL.md +1 -1
  508. package/bundled/skills/testing-guide/testing-theory.md +1 -1
  509. package/bundled/skills/workflows/README.md +2 -2
  510. package/package.json +3 -3
  511. package/src/commands/audit.js +30 -9
  512. package/src/commands/config.js +33 -2
  513. package/src/commands/hitl.js +14 -1
  514. package/src/commands/init.js +110 -58
  515. package/src/commands/quickstart.js +1 -2
  516. package/src/commands/release.js +51 -6
  517. package/src/commands/run-intent.js +9 -0
  518. package/src/commands/spec-split.js +27 -2
  519. package/src/commands/update.js +22 -6
  520. package/src/config/ai-agent-paths.js +3 -1
  521. package/src/i18n/messages.js +3 -102
  522. package/src/missions/MissionManager.js +44 -12
  523. package/src/utils/build-manifest.js +35 -3
  524. package/src/utils/friction-detector.js +71 -22
  525. package/src/utils/health-checker.js +29 -2
  526. package/src/utils/transaction.js +111 -0
  527. package/src/utils/version-promote.js +16 -0
  528. package/standards-registry.json +58 -146
  529. package/bundled/ai/standards/agent-communication-protocol.ai.yaml +0 -42
  530. package/bundled/ai/standards/agent-dispatch.ai.yaml +0 -42
  531. package/bundled/ai/standards/branch-completion.ai.yaml +0 -44
  532. package/bundled/ai/standards/change-batching-standards.ai.yaml +0 -44
  533. package/bundled/ai/standards/execution-history.ai.yaml +0 -42
  534. package/bundled/ai/standards/pipeline-integration-standards.ai.yaml +0 -42
  535. package/bundled/ai/standards/workflow-enforcement.ai.yaml +0 -44
  536. package/bundled/ai/standards/workflow-state-protocol.ai.yaml +0 -43
  537. package/src/commands/flow.js +0 -260
  538. package/src/commands/start.js +0 -372
  539. package/src/commands/sweep.js +0 -151
  540. package/src/commands/workflow.js +0 -681
@@ -75,37 +75,6 @@ export const messages = {
75
75
  deleted: 'Spec deleted.'
76
76
  },
77
77
 
78
- // Mission Command
79
- mission: {
80
- activeExists: 'An active mission already exists:',
81
- existingAction: 'What would you like to do?',
82
- resume: 'Resume existing mission',
83
- cancel: 'Cancel existing and start new',
84
- abort: 'Abort (do nothing)',
85
- aborted: 'Operation cancelled.',
86
- resuming: 'Resuming existing mission...',
87
- previousCancelled: 'Previous mission cancelled.',
88
- selectType: 'Select mission type:',
89
- enterIntent: 'Describe your goal:',
90
- intentRequired: 'Intent is required',
91
- created: 'Mission created!',
92
- suggestedWorkflow: 'Suggested workflow:',
93
- nextSteps: 'Next steps:',
94
- useSpecCreate: 'Create specs:',
95
- useStatus: 'Check status:',
96
- usePause: 'Pause mission:',
97
- planningPhase: 'Mission is now in planning phase.',
98
- noActive: 'No active mission.',
99
- startHint: 'Start one with: uds start <type> "<intent>"',
100
- paused: 'Mission paused.',
101
- resumed: 'Mission resumed!',
102
- confirmCancel: 'Cancel this mission?',
103
- cancelAborted: 'Operation cancelled.',
104
- cancelled: 'Mission cancelled.',
105
- noMissions: 'No missions found.',
106
- listTitle: 'Missions:'
107
- },
108
-
109
78
  // Display Language (first prompt - English only since language not yet selected)
110
79
  displayLanguage: {
111
80
  title: 'Display Language',
@@ -673,8 +642,6 @@ export const messages = {
673
642
  vibeMode: 'Vibe Coding Mode - For AI-assisted development',
674
643
  missionMode: 'Mission Mode - For goal-oriented development',
675
644
  customMode: 'Custom - Set individual options',
676
- missionComingSoon: 'Mission mode setup coming soon!',
677
- useStartCommand: 'For now, use: uds start <mission-type> <intent>',
678
645
  customHint: 'Use: uds config set <key> <value>',
679
646
  vibeModeTitle: 'Vibe Coding Configuration',
680
647
  vibeModeDesc: 'Configure UDS for natural language-driven development',
@@ -700,7 +667,7 @@ export const messages = {
700
667
  nextSteps: 'Next steps:',
701
668
  useSpec: 'Generate specs:',
702
669
  useSweep: 'Clean up code:',
703
- useStart: 'Start a mission:',
670
+ useQuickstart: 'Explore recipes:',
704
671
  // Display Language
705
672
  displayLanguageOption: 'Display Language - Change UI language',
706
673
  currentLanguage: 'Current language',
@@ -1340,37 +1307,6 @@ export const messages = {
1340
1307
  deleted: '規格已刪除。'
1341
1308
  },
1342
1309
 
1343
- // Mission Command
1344
- mission: {
1345
- activeExists: '已存在進行中的任務:',
1346
- existingAction: '您想怎麼做?',
1347
- resume: '繼續現有任務',
1348
- cancel: '取消現有任務並開始新任務',
1349
- abort: '中止(不執行任何操作)',
1350
- aborted: '操作已取消。',
1351
- resuming: '正在繼續現有任務...',
1352
- previousCancelled: '已取消先前任務。',
1353
- selectType: '選擇任務類型:',
1354
- enterIntent: '描述您的目標:',
1355
- intentRequired: '必須提供意圖描述',
1356
- created: '任務已建立!',
1357
- suggestedWorkflow: '建議的工作流程:',
1358
- nextSteps: '後續步驟:',
1359
- useSpecCreate: '建立規格:',
1360
- useStatus: '查看狀態:',
1361
- usePause: '暫停任務:',
1362
- planningPhase: '任務現在處於規劃階段。',
1363
- noActive: '沒有進行中的任務。',
1364
- startHint: '使用以下命令開始:uds start <類型> "<意圖>"',
1365
- paused: '任務已暫停。',
1366
- resumed: '任務已繼續!',
1367
- confirmCancel: '確定要取消此任務嗎?',
1368
- cancelAborted: '操作已取消。',
1369
- cancelled: '任務已取消。',
1370
- noMissions: '找不到任務。',
1371
- listTitle: '任務列表:'
1372
- },
1373
-
1374
1310
  // Display Language (first prompt - English only since language not yet selected)
1375
1311
  displayLanguage: {
1376
1312
  title: 'Display Language',
@@ -1938,8 +1874,6 @@ export const messages = {
1938
1874
  vibeMode: 'Vibe Coding 模式 - AI 輔助開發',
1939
1875
  missionMode: 'Mission 模式 - 目標導向開發',
1940
1876
  customMode: '自訂 - 個別設定選項',
1941
- missionComingSoon: 'Mission 模式設定即將推出!',
1942
- useStartCommand: '目前請使用:uds start <mission-type> <intent>',
1943
1877
  customHint: '使用:uds config set <key> <value>',
1944
1878
  vibeModeTitle: 'Vibe Coding 設定',
1945
1879
  vibeModeDesc: '設定 UDS 以進行自然語言驅動開發',
@@ -1965,7 +1899,7 @@ export const messages = {
1965
1899
  nextSteps: '後續步驟:',
1966
1900
  useSpec: '產生規格:',
1967
1901
  useSweep: '清理程式碼:',
1968
- useStart: '開始任務:',
1902
+ useQuickstart: '探索工作流程範例:',
1969
1903
  // Display Language
1970
1904
  displayLanguageOption: '顯示語言 - 變更 UI 語言',
1971
1905
  currentLanguage: '目前語言',
@@ -2604,37 +2538,6 @@ export const messages = {
2604
2538
  deleted: '规格已删除。'
2605
2539
  },
2606
2540
 
2607
- // Mission Command
2608
- mission: {
2609
- activeExists: '已存在进行中的任务:',
2610
- existingAction: '您想怎么做?',
2611
- resume: '继续现有任务',
2612
- cancel: '取消现有任务并开始新任务',
2613
- abort: '中止(不执行任何操作)',
2614
- aborted: '操作已取消。',
2615
- resuming: '正在继续现有任务...',
2616
- previousCancelled: '已取消先前任务。',
2617
- selectType: '选择任务类型:',
2618
- enterIntent: '描述您的目标:',
2619
- intentRequired: '必须提供意图描述',
2620
- created: '任务已创建!',
2621
- suggestedWorkflow: '建议的工作流程:',
2622
- nextSteps: '后续步骤:',
2623
- useSpecCreate: '创建规格:',
2624
- useStatus: '查看状态:',
2625
- usePause: '暂停任务:',
2626
- planningPhase: '任务现在处于规划阶段。',
2627
- noActive: '没有进行中的任务。',
2628
- startHint: '使用以下命令开始:uds start <类型> "<意图>"',
2629
- paused: '任务已暂停。',
2630
- resumed: '任务已继续!',
2631
- confirmCancel: '确定要取消此任务吗?',
2632
- cancelAborted: '操作已取消。',
2633
- cancelled: '任务已取消。',
2634
- noMissions: '找不到任务。',
2635
- listTitle: '任务列表:'
2636
- },
2637
-
2638
2541
  // Display Language (first prompt - English only since language not yet selected)
2639
2542
  displayLanguage: {
2640
2543
  title: 'Display Language',
@@ -3131,8 +3034,6 @@ export const messages = {
3131
3034
  vibeMode: 'Vibe Coding 模式 - AI 辅助开发',
3132
3035
  missionMode: 'Mission 模式 - 目标导向开发',
3133
3036
  customMode: '自定义 - 单独设置选项',
3134
- missionComingSoon: 'Mission 模式设置即将推出!',
3135
- useStartCommand: '目前请使用:uds start <mission-type> <intent>',
3136
3037
  customHint: '使用:uds config set <key> <value>',
3137
3038
  vibeModeTitle: 'Vibe Coding 配置',
3138
3039
  vibeModeDesc: '配置 UDS 以进行自然语言驱动开发',
@@ -3158,7 +3059,7 @@ export const messages = {
3158
3059
  nextSteps: '后续步骤:',
3159
3060
  useSpec: '生成规格:',
3160
3061
  useSweep: '清理代码:',
3161
- useStart: '开始任务:',
3062
+ useQuickstart: '探索工作流程示例:',
3162
3063
  // Display Language
3163
3064
  displayLanguageOption: '显示语言 - 更改 UI 语言',
3164
3065
  currentLanguage: '当前语言',
@@ -26,22 +26,29 @@ export const MissionState = {
26
26
  REVIEW: 'review',
27
27
  COMPLETED: 'completed',
28
28
  PAUSED: 'paused',
29
- CANCELLED: 'cancelled'
29
+ CANCELLED: 'cancelled',
30
+ // Terminal failure state (T11 / XSPEC-292 §9.2): a mission that cannot
31
+ // proceed (unrecoverable error / abandoned). Like COMPLETED and CANCELLED it
32
+ // is terminal and cannot be resumed.
33
+ FAILED: 'failed'
30
34
  };
31
35
 
32
36
  /**
33
- * Valid state transitions
37
+ * Valid state transitions.
38
+ * Any active (non-terminal) state may transition to FAILED; terminal states
39
+ * (COMPLETED / CANCELLED / FAILED) have no outgoing transitions.
34
40
  */
35
41
  const STATE_TRANSITIONS = {
36
- [MissionState.CREATED]: [MissionState.PLANNING, MissionState.CANCELLED],
37
- [MissionState.PLANNING]: [MissionState.SPEC_PENDING, MissionState.PAUSED, MissionState.CANCELLED],
38
- [MissionState.SPEC_PENDING]: [MissionState.SPEC_CONFIRMED, MissionState.PLANNING, MissionState.CANCELLED],
39
- [MissionState.SPEC_CONFIRMED]: [MissionState.IN_PROGRESS, MissionState.PAUSED, MissionState.CANCELLED],
40
- [MissionState.IN_PROGRESS]: [MissionState.REVIEW, MissionState.PAUSED, MissionState.CANCELLED],
41
- [MissionState.REVIEW]: [MissionState.COMPLETED, MissionState.IN_PROGRESS, MissionState.CANCELLED],
42
- [MissionState.PAUSED]: [MissionState.PLANNING, MissionState.IN_PROGRESS, MissionState.CANCELLED],
42
+ [MissionState.CREATED]: [MissionState.PLANNING, MissionState.CANCELLED, MissionState.FAILED],
43
+ [MissionState.PLANNING]: [MissionState.SPEC_PENDING, MissionState.PAUSED, MissionState.CANCELLED, MissionState.FAILED],
44
+ [MissionState.SPEC_PENDING]: [MissionState.SPEC_CONFIRMED, MissionState.PLANNING, MissionState.CANCELLED, MissionState.FAILED],
45
+ [MissionState.SPEC_CONFIRMED]: [MissionState.IN_PROGRESS, MissionState.PAUSED, MissionState.CANCELLED, MissionState.FAILED],
46
+ [MissionState.IN_PROGRESS]: [MissionState.REVIEW, MissionState.PAUSED, MissionState.CANCELLED, MissionState.FAILED],
47
+ [MissionState.REVIEW]: [MissionState.COMPLETED, MissionState.IN_PROGRESS, MissionState.CANCELLED, MissionState.FAILED],
48
+ [MissionState.PAUSED]: [MissionState.PLANNING, MissionState.IN_PROGRESS, MissionState.CANCELLED, MissionState.FAILED],
43
49
  [MissionState.COMPLETED]: [],
44
- [MissionState.CANCELLED]: []
50
+ [MissionState.CANCELLED]: [],
51
+ [MissionState.FAILED]: []
45
52
  };
46
53
 
47
54
  /**
@@ -157,12 +164,14 @@ export class MissionManager {
157
164
  }
158
165
 
159
166
  /**
160
- * Check if state is terminal (completed or cancelled)
167
+ * Check if state is terminal (completed, cancelled, or failed)
161
168
  * @param {string} state - Mission state
162
169
  * @returns {boolean}
163
170
  */
164
171
  isTerminalState(state) {
165
- return state === MissionState.COMPLETED || state === MissionState.CANCELLED;
172
+ return state === MissionState.COMPLETED
173
+ || state === MissionState.CANCELLED
174
+ || state === MissionState.FAILED;
166
175
  }
167
176
 
168
177
  /**
@@ -188,6 +197,15 @@ export class MissionManager {
188
197
  throw new Error('No active mission found');
189
198
  }
190
199
 
200
+ // Resume guard (T11 / XSPEC-292 §9.2): terminal states are final. A
201
+ // completed / cancelled / failed mission must never be revived — fail
202
+ // loudly instead of silently re-activating an archived mission.
203
+ if (this.isTerminalState(mission.state)) {
204
+ throw new Error(
205
+ `Mission ${mission.id} is in terminal state '${mission.state}' and cannot be transitioned or resumed.`
206
+ );
207
+ }
208
+
191
209
  if (!this.canTransition(mission.state, toState)) {
192
210
  throw new Error(
193
211
  `Invalid transition: ${mission.state} → ${toState}. ` +
@@ -431,6 +449,20 @@ export class MissionManager {
431
449
  return this.transition(MissionState.CANCELLED, { reason });
432
450
  }
433
451
 
452
+ /**
453
+ * Mark current mission as FAILED (terminal).
454
+ *
455
+ * Used when a mission cannot proceed — an unrecoverable error or an abandoned
456
+ * run. Unlike {@link pause}, a failed mission is archived to history and can
457
+ * never be resumed (see the resume guard in {@link transition}).
458
+ *
459
+ * @param {string} reason - Reason for the failure
460
+ * @returns {Object} Failed mission
461
+ */
462
+ fail(reason = '') {
463
+ return this.transition(MissionState.FAILED, { reason });
464
+ }
465
+
434
466
  /**
435
467
  * Complete current mission
436
468
  * @param {Object} summary - Completion summary
@@ -26,12 +26,28 @@ export function createManifest({ version, commit, builder, checksum, branch }) {
26
26
  };
27
27
  }
28
28
 
29
+ /** Normalize a checksum for comparison: drop an optional `sha256:` prefix, lowercase, trim. */
30
+ function normalizeChecksum(value) {
31
+ return String(value).trim().replace(/^sha256:/i, '').toLowerCase();
32
+ }
33
+
29
34
  /**
30
- * Verify a manifest against a Git tag's commit hash.
31
- * Returns { valid: boolean, errors: string[] }.
35
+ * Verify a manifest against a Git tag's commit hash, and — when the manifest
36
+ * records a package checksum against the artefact's actual checksum.
37
+ *
38
+ * T13 (XSPEC-292): the manifest carries `checksum.package`, but earlier this
39
+ * function only compared the commit. Recording a checksum that nothing verifies
40
+ * is a false integrity guarantee, so verify now consumes it.
41
+ *
42
+ * @param {object} manifest
43
+ * @param {string} gitTagCommit
44
+ * @param {{ actualChecksum?: string }} [options] - actualChecksum: SHA256 of the
45
+ * packaged artefact (computed by the caller). Omit when no artefact is at hand.
46
+ * @returns {{ valid: boolean, errors: string[], warnings: string[] }}
32
47
  */
33
- export function verifyManifest(manifest, gitTagCommit) {
48
+ export function verifyManifest(manifest, gitTagCommit, options = {}) {
34
49
  const errors = [];
50
+ const warnings = [];
35
51
 
36
52
  if (!manifest.commit) {
37
53
  errors.push('manifest missing commit field');
@@ -39,8 +55,24 @@ export function verifyManifest(manifest, gitTagCommit) {
39
55
  errors.push(`commit mismatch: manifest has "${manifest.commit}", git tag points to "${gitTagCommit}"`);
40
56
  }
41
57
 
58
+ const recorded = manifest.checksum?.package ?? null;
59
+ if (recorded) {
60
+ const { actualChecksum } = options;
61
+ if (actualChecksum == null) {
62
+ warnings.push(
63
+ 'checksum recorded in manifest but no artefact provided to verify against ' +
64
+ '(pass --artifact <path> to verify integrity)'
65
+ );
66
+ } else if (normalizeChecksum(actualChecksum) !== normalizeChecksum(recorded)) {
67
+ errors.push(
68
+ `checksum mismatch: manifest records "${recorded}", artefact computes to "${actualChecksum}"`
69
+ );
70
+ }
71
+ }
72
+
42
73
  return {
43
74
  valid: errors.length === 0,
44
75
  errors,
76
+ warnings,
45
77
  };
46
78
  }
@@ -114,26 +114,51 @@ function detectUnusedStandards(projectPath, manifest) {
114
114
 
115
115
  const allConfigText = configContents.join('\n');
116
116
 
117
- // Check each standard file (handles both ID format and legacy path format)
117
+ // Build a filename -> canonical id index from the registry. AI configs
118
+ // reference a standard by its canonical id (e.g. `.standards/ai-agreement`),
119
+ // which often diverges from the installed filename: most files carry a
120
+ // `-standards` suffix the id drops, and a few diverge entirely
121
+ // (error-codes.ai.yaml -> id error-code-standards). Matching only on the
122
+ // filename therefore produced false "unused" findings whose remediation is
123
+ // `uds uninstall` — i.e. it could remove standards that are in active use. (#125)
118
124
  const allStdsFriction = getAllStandards();
119
125
  const frictionFormat = manifest.format || 'ai';
120
- const standardFiles = (manifest.standards || []).map(s => {
126
+ const fileNameToId = new Map();
127
+ for (const entry of allStdsFriction) {
128
+ const src = getStandardSource(entry, frictionFormat) || getStandardSource(entry, 'human');
129
+ if (src) fileNameToId.set(src.split('/').pop(), entry.id);
130
+ }
131
+
132
+ // Resolve each manifest standard to its canonical id + filename
133
+ // (handles both ID format and legacy path format)
134
+ const standardRefs = (manifest.standards || []).map(s => {
135
+ let id;
136
+ let fileName;
121
137
  if (!s.includes('/') && !s.includes('.')) {
122
- // ID format: resolve to actual filename
138
+ // ID format: the entry itself is the id; resolve filename via registry
139
+ id = s;
123
140
  const entry = allStdsFriction.find(r => r.id === s);
124
- if (entry) {
125
- const src = getStandardSource(entry, frictionFormat);
126
- if (src) return src.split('/').pop();
127
- }
128
- return s;
141
+ const src = entry ? getStandardSource(entry, frictionFormat) : null;
142
+ fileName = src ? src.split('/').pop() : s;
143
+ } else {
144
+ // Path format: derive filename, then look up canonical id
145
+ fileName = s.split('/').pop();
146
+ id = fileNameToId.get(fileName) || null;
129
147
  }
130
- return s.split('/').pop();
148
+ return { id, fileName };
131
149
  });
132
150
 
133
- for (const fileName of standardFiles) {
134
- // Check if the filename (without extension) is referenced
151
+ for (const { id, fileName } of standardRefs) {
135
152
  const baseName = fileName.replace(/\.ai\.yaml$/, '').replace(/\.md$/, '');
136
- if (!allConfigText.includes(fileName) && !allConfigText.includes(baseName)) {
153
+ // Candidate reference tokens, canonical id first. The trailing
154
+ // `-standards` strip is a defensive fallback for standards absent from the
155
+ // registry. A match on any token means the standard is referenced — erring
156
+ // toward "referenced" is the safe direction (avoid uninstall-driven data loss).
157
+ const candidates = [id, fileName, baseName, baseName.replace(/-standards$/, '')]
158
+ .filter(Boolean);
159
+ const referenced = candidates.some(token => allConfigText.includes(token));
160
+
161
+ if (!referenced) {
137
162
  frictions.push({
138
163
  standard: fileName,
139
164
  type: 'unused',
@@ -162,25 +187,24 @@ function detectOrphanedFiles(projectPath, manifest) {
162
187
  // Get list of tracked files from manifest
163
188
  const trackedFiles = new Set();
164
189
 
165
- // From fileHashes
190
+ // From fileHashes (normalize separators so Windows-written manifests match)
166
191
  if (manifest.fileHashes) {
167
192
  for (const key of Object.keys(manifest.fileHashes)) {
168
193
  if (key.startsWith('.standards/') || key.startsWith('.standards\\')) {
169
- trackedFiles.add(key.replace(/^\.standards[/\\]/, ''));
194
+ trackedFiles.add(key.replace(/^\.standards[/\\]/, '').replaceAll('\\', '/'));
170
195
  }
171
196
  }
172
197
  }
173
198
 
174
- // Always exclude manifest.json
199
+ // Always exclude UDS-managed files that are not hash-tracked
175
200
  trackedFiles.add('manifest.json');
201
+ trackedFiles.add('release-config.yaml'); // written by `uds config` (#115)
176
202
 
177
- // Scan .standards/ directory
178
- let actualFiles;
179
- try {
180
- actualFiles = readdirSync(standardsDir).filter(f => f !== 'manifest.json');
181
- } catch {
182
- return frictions;
183
- }
203
+ // Scan .standards/ recursively — option standards live in subdirectories
204
+ // such as .standards/options/, which a flat readdir reports as an
205
+ // orphaned "options" entry (#115)
206
+ const actualFiles = collectRelativeFilePaths(standardsDir)
207
+ .filter(f => f !== 'manifest.json');
184
208
 
185
209
  for (const fileName of actualFiles) {
186
210
  if (!trackedFiles.has(fileName)) {
@@ -196,3 +220,28 @@ function detectOrphanedFiles(projectPath, manifest) {
196
220
 
197
221
  return frictions;
198
222
  }
223
+
224
+ /**
225
+ * Recursively list files under a directory as '/'-separated relative paths
226
+ * @param {string} baseDir
227
+ * @param {string} prefix
228
+ * @param {Array<string>} acc
229
+ * @returns {Array<string>}
230
+ */
231
+ function collectRelativeFilePaths(baseDir, prefix = '', acc = []) {
232
+ let entries;
233
+ try {
234
+ entries = readdirSync(baseDir, { withFileTypes: true });
235
+ } catch {
236
+ return acc;
237
+ }
238
+ for (const entry of entries) {
239
+ const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;
240
+ if (entry.isDirectory()) {
241
+ collectRelativeFilePaths(join(baseDir, entry.name), relPath, acc);
242
+ } else {
243
+ acc.push(relPath);
244
+ }
245
+ }
246
+ return acc;
247
+ }
@@ -11,7 +11,7 @@
11
11
  * @see docs/specs/system/SPEC-AUDIT-01-standards-audit.md (AC-1)
12
12
  */
13
13
 
14
- import { existsSync, readFileSync } from 'fs';
14
+ import { existsSync, readFileSync, readdirSync } from 'fs';
15
15
  import { join } from 'path';
16
16
  import { readManifest } from './copier.js';
17
17
  import { compareFileHash, hasFileHashes } from './hasher.js';
@@ -67,6 +67,9 @@ export function runHealthCheck(projectPath) {
67
67
  if (manifest.standards && Array.isArray(manifest.standards)) {
68
68
  const allStds = getAllStandards();
69
69
  const stdFormat = manifest.format || 'ai';
70
+ // Option standards install under subdirectories (e.g. .standards/options/),
71
+ // so a root-only existence check reports them as false "missing" (#115)
72
+ const installedFileNames = collectInstalledFileNames(standardsDir);
70
73
  for (const standardId of manifest.standards) {
71
74
  // Resolve ID-format to actual filename via registry
72
75
  let fileName;
@@ -82,7 +85,7 @@ export function runHealthCheck(projectPath) {
82
85
  fileName = standardId.split('/').pop();
83
86
  }
84
87
  const filePath = join(standardsDir, fileName);
85
- if (!existsSync(filePath)) {
88
+ if (!existsSync(filePath) && !installedFileNames.has(fileName)) {
86
89
  issues.push({
87
90
  severity: 'WARNING',
88
91
  component: fileName,
@@ -111,6 +114,30 @@ export function runHealthCheck(projectPath) {
111
114
  return { status, issues };
112
115
  }
113
116
 
117
+ /**
118
+ * Recursively collect file basenames installed under .standards/
119
+ * (option standards live in subdirectories such as .standards/options/ — #115)
120
+ * @param {string} dir
121
+ * @param {Set<string>} names
122
+ * @returns {Set<string>}
123
+ */
124
+ function collectInstalledFileNames(dir, names = new Set()) {
125
+ let entries;
126
+ try {
127
+ entries = readdirSync(dir, { withFileTypes: true });
128
+ } catch {
129
+ return names;
130
+ }
131
+ for (const entry of entries) {
132
+ if (entry.isDirectory()) {
133
+ collectInstalledFileNames(join(dir, entry.name), names);
134
+ } else {
135
+ names.add(entry.name);
136
+ }
137
+ }
138
+ return names;
139
+ }
140
+
114
141
  /**
115
142
  * Check file hashes against manifest
116
143
  * @param {string} projectPath
@@ -0,0 +1,111 @@
1
+ /**
2
+ * File transaction wrapper — backup → apply → verify → rollback.
3
+ *
4
+ * Makes a multi-step, file-mutating operation atomic from the caller's point of
5
+ * view: snapshot the files/dirs the operation may touch, run `apply()`, then
6
+ * `verify()` the result. If `apply()` throws or `verify()` returns false, every
7
+ * tracked path is restored to its pre-apply state and the error is re-thrown
8
+ * (annotated with `rolledBack`). On success the changes are committed (left in
9
+ * place) and the apply() result is returned.
10
+ *
11
+ * Rollback semantics per tracked path:
12
+ * - pre-existing FILE → original content rewritten
13
+ * - pre-existing DIR → left intact (its prior contents are unknown, so we
14
+ * never tear it down; do not track shared dirs you do
15
+ * not fully own)
16
+ * - path created by apply() (file or dir) → removed (dirs recursively)
17
+ *
18
+ * XSPEC-292 §9.2 (T11): CLI transactionality. Used by `init`, `spec-split`, and
19
+ * other commands that perform several dependent writes.
20
+ *
21
+ * @module utils/transaction
22
+ */
23
+
24
+ import {
25
+ existsSync, statSync, readFileSync, writeFileSync, mkdirSync, rmSync
26
+ } from 'node:fs';
27
+ import { dirname } from 'node:path';
28
+
29
+ /**
30
+ * @typedef {Object} TransactionHooks
31
+ * @property {() => (any|Promise<any>)} apply Performs the file mutations.
32
+ * @property {(result:any) => (boolean|Promise<boolean>)} [verify]
33
+ * Returns false (or throws) to trigger rollback. Omit to always commit.
34
+ */
35
+
36
+ /**
37
+ * Run `apply` as a transaction over `paths`.
38
+ *
39
+ * @param {string[]} paths - Absolute paths the operation may create/modify/delete.
40
+ * @param {TransactionHooks} hooks
41
+ * @param {Object} [options]
42
+ * @param {string} [options.label] - Included in the verification error message.
43
+ * @returns {Promise<{result:any, rolledBack:false}>}
44
+ * @throws Re-throws the original error after rolling back. The thrown error has
45
+ * `rolledBack` set to `true` (rollback succeeded) or `false` (rollback also
46
+ * failed, with `rollbackError` attached).
47
+ */
48
+ export async function withFileTransaction(paths, hooks = {}, options = {}) {
49
+ const { apply, verify } = hooks;
50
+ if (typeof apply !== 'function') {
51
+ throw new TypeError('withFileTransaction requires an apply() function');
52
+ }
53
+
54
+ // 1. Backup: snapshot current state of every tracked path.
55
+ const snapshot = (paths || []).map((path) => {
56
+ const existed = existsSync(path);
57
+ const isDir = existed && statSync(path).isDirectory();
58
+ return {
59
+ path,
60
+ existed,
61
+ isDir,
62
+ content: existed && !isDir ? readFileSync(path) : null
63
+ };
64
+ });
65
+
66
+ const rollback = () => {
67
+ // Restore deepest paths first so children settle before parents.
68
+ for (const entry of [...snapshot].reverse()) {
69
+ if (entry.existed) {
70
+ if (!entry.isDir) {
71
+ mkdirSync(dirname(entry.path), { recursive: true });
72
+ writeFileSync(entry.path, entry.content);
73
+ }
74
+ // Pre-existing directories are intentionally left untouched.
75
+ } else if (existsSync(entry.path)) {
76
+ // Created during apply() → remove it (recursively for directories).
77
+ rmSync(entry.path, { recursive: true, force: true });
78
+ }
79
+ }
80
+ };
81
+
82
+ let result;
83
+ try {
84
+ // 2. Apply.
85
+ result = await apply();
86
+
87
+ // 3. Verify.
88
+ if (typeof verify === 'function') {
89
+ const ok = await verify(result);
90
+ if (ok === false) {
91
+ const err = new Error(
92
+ `Transaction verification failed${options.label ? ` for ${options.label}` : ''}`
93
+ );
94
+ err.code = 'TRANSACTION_VERIFY_FAILED';
95
+ throw err;
96
+ }
97
+ }
98
+ } catch (err) {
99
+ // 4. Rollback.
100
+ try {
101
+ rollback();
102
+ err.rolledBack = true;
103
+ } catch (rollbackErr) {
104
+ err.rolledBack = false;
105
+ err.rollbackError = rollbackErr;
106
+ }
107
+ throw err;
108
+ }
109
+
110
+ return { result, rolledBack: false };
111
+ }
@@ -6,6 +6,22 @@
6
6
 
7
7
  const RC_VERSION_REGEX = /^v?(\d+)\.(\d+)\.(\d+)-rc\.(\d+)$/;
8
8
  const SEMVER_REGEX = /^v?(\d+)\.(\d+)\.(\d+)(-[a-zA-Z]+\.\d+)?$/;
9
+ const STABLE_VERSION_REGEX = /^v?(\d+)\.(\d+)\.(\d+)$/;
10
+
11
+ /**
12
+ * True if `version` is a valid stable semver (X.Y.Z, optional leading v),
13
+ * with no pre-release suffix. Used to validate `uds release promote` targets.
14
+ */
15
+ export function isStableVersion(version) {
16
+ return typeof version === 'string' && STABLE_VERSION_REGEX.test(version);
17
+ }
18
+
19
+ /**
20
+ * True if `version` is any valid semver this tool recognises (stable or RC).
21
+ */
22
+ export function isValidVersion(version) {
23
+ return typeof version === 'string' && (SEMVER_REGEX.test(version) || RC_VERSION_REGEX.test(version));
24
+ }
9
25
 
10
26
  /**
11
27
  * Parse an RC version string into its components.