universal-dev-standards 5.17.0 → 6.1.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 (563) hide show
  1. package/bin/uds.js +13 -135
  2. package/bundled/ai/options/commit-message/bilingual.ai.yaml +19 -1
  3. package/bundled/ai/standards/acceptance-criteria-traceability.ai.yaml +13 -4
  4. package/bundled/ai/standards/accessibility-standards.ai.yaml +1 -1
  5. package/bundled/ai/standards/ai-response-navigation.ai.yaml +15 -2
  6. package/bundled/ai/standards/api-design-standards.ai.yaml +27 -4
  7. package/bundled/ai/standards/behavior-snapshot.ai.yaml +86 -9
  8. package/bundled/ai/standards/checkin-standards.ai.yaml +3 -3
  9. package/bundled/ai/standards/code-review.ai.yaml +2 -2
  10. package/bundled/ai/standards/context-aware-loading.ai.yaml +3 -3
  11. package/bundled/ai/standards/data-migration-testing.ai.yaml +79 -3
  12. package/bundled/ai/standards/deprecation-standards.ai.yaml +10 -2
  13. package/bundled/ai/standards/developer-memory.ai.yaml +4 -3
  14. package/bundled/ai/standards/documentation-writing-standards.ai.yaml +1 -1
  15. package/bundled/ai/standards/flow-based-testing.ai.yaml +2 -2
  16. package/bundled/ai/standards/forward-derivation-standards.ai.yaml +26 -2
  17. package/bundled/ai/standards/frontend-design-standards.ai.yaml +33 -3
  18. package/bundled/ai/standards/full-coverage-testing.ai.yaml +34 -2
  19. package/bundled/ai/standards/git-worktree.ai.yaml +3 -3
  20. package/bundled/ai/standards/logging.ai.yaml +97 -3
  21. package/bundled/ai/standards/mock-boundary.ai.yaml +48 -2
  22. package/bundled/ai/standards/model-provenance.ai.yaml +297 -0
  23. package/bundled/ai/standards/model-selection.ai.yaml +11 -2
  24. package/bundled/ai/standards/observability-standards.ai.yaml +10 -0
  25. package/bundled/ai/standards/performance-standards.ai.yaml +46 -1
  26. package/bundled/ai/standards/pii-classification.ai.yaml +15 -1
  27. package/bundled/ai/standards/pipeline-security-gates.ai.yaml +10 -0
  28. package/bundled/ai/standards/privacy-standards.ai.yaml +2 -2
  29. package/bundled/ai/standards/project-context-memory.ai.yaml +2 -2
  30. package/bundled/ai/standards/push-standards.ai.yaml +14 -3
  31. package/bundled/ai/standards/refactoring-standards.ai.yaml +68 -3
  32. package/bundled/ai/standards/requirement-engineering.ai.yaml +42 -3
  33. package/bundled/ai/standards/resource-cost-boundary.ai.yaml +279 -0
  34. package/bundled/ai/standards/reverse-engineering-standards.ai.yaml +55 -2
  35. package/bundled/ai/standards/security-testing.ai.yaml +13 -2
  36. package/bundled/ai/standards/self-review-protocol.ai.yaml +15 -10
  37. package/bundled/ai/standards/skill-standard-alignment-check.ai.yaml +37 -2
  38. package/bundled/ai/standards/user-journey-testing.ai.yaml +107 -0
  39. package/bundled/ai/standards/verification-evidence.ai.yaml +88 -5
  40. package/bundled/ai/standards/verification-oracle.ai.yaml +278 -0
  41. package/bundled/ai/standards/versioning.ai.yaml +32 -38
  42. package/bundled/core/acceptance-criteria-traceability.md +15 -5
  43. package/bundled/core/accessibility-standards.md +8 -4
  44. package/bundled/core/ai-friendly-architecture.md +1 -1
  45. package/bundled/core/ai-response-navigation.md +31 -3
  46. package/bundled/core/anti-sycophancy-prompting.md +1 -1
  47. package/bundled/core/api-design-standards.md +92 -7
  48. package/bundled/core/audit-trail.md +119 -0
  49. package/bundled/core/behavior-snapshot.md +94 -7
  50. package/bundled/core/browser-compatibility-standards.md +15 -2
  51. package/bundled/core/checkin-standards.md +10 -3
  52. package/bundled/core/code-review-checklist.md +10 -2
  53. package/bundled/core/container-image-standards.md +97 -0
  54. package/bundled/core/context-aware-loading.md +2 -2
  55. package/bundled/core/cost-budget-test.md +1 -1
  56. package/bundled/core/cross-flow-regression.md +3 -2
  57. package/bundled/core/data-contract.md +104 -0
  58. package/bundled/core/data-migration-testing.md +90 -0
  59. package/bundled/core/data-pipeline.md +113 -0
  60. package/bundled/core/deprecation-standards.md +16 -2
  61. package/bundled/core/developer-memory.md +13 -8
  62. package/bundled/core/documentation-writing-standards.md +2 -2
  63. package/bundled/core/error-code-standards.md +4 -3
  64. package/bundled/core/feature-discovery-standards.md +191 -0
  65. package/bundled/core/flaky-test-management.md +1 -1
  66. package/bundled/core/flow-based-testing.md +3 -3
  67. package/bundled/core/forward-derivation-standards.md +33 -5
  68. package/bundled/core/frontend-design-standards.md +93 -4
  69. package/bundled/core/full-coverage-testing.md +72 -0
  70. package/bundled/core/git-worktree.md +4 -4
  71. package/bundled/core/guides/performance-guide.md +1 -1
  72. package/bundled/core/guides/security-guide.md +1 -1
  73. package/bundled/core/health-check-standards.md +2 -2
  74. package/bundled/core/iac-design-principles.md +97 -0
  75. package/bundled/core/incident-response.md +119 -0
  76. package/bundled/core/license-compliance.md +2 -0
  77. package/bundled/core/logging-standards.md +78 -2
  78. package/bundled/core/mock-boundary.md +54 -2
  79. package/bundled/core/model-provenance.md +181 -0
  80. package/bundled/core/model-selection.md +27 -2
  81. package/bundled/core/multi-environment-e2e-testing.md +195 -0
  82. package/bundled/core/packaging-standards.md +1 -0
  83. package/bundled/core/performance-standards.md +96 -2
  84. package/bundled/core/pii-classification.md +148 -0
  85. package/bundled/core/pipeline-security-gates.md +22 -2
  86. package/bundled/core/postmortem-standards.md +2 -0
  87. package/bundled/core/prd-standards.md +91 -0
  88. package/bundled/core/privacy-standards.md +14 -3
  89. package/bundled/core/product-metrics-standards.md +100 -0
  90. package/bundled/core/project-context-memory.md +8 -2
  91. package/bundled/core/prompt-regression.md +1 -1
  92. package/bundled/core/push-standards.md +82 -0
  93. package/bundled/core/refactoring-standards.md +44 -3
  94. package/bundled/core/replay-test.md +1 -1
  95. package/bundled/core/requirement-engineering.md +2 -2
  96. package/bundled/core/resource-cost-boundary.md +180 -0
  97. package/bundled/core/reverse-engineering-standards.md +66 -2
  98. package/bundled/core/runbook.md +113 -0
  99. package/bundled/core/schema-evolution.md +105 -0
  100. package/bundled/core/secret-management-standards.md +110 -0
  101. package/bundled/core/security-testing.md +26 -2
  102. package/bundled/core/self-review-protocol.md +15 -10
  103. package/bundled/core/skill-standard-alignment-check.md +53 -0
  104. package/bundled/core/slo-sli.md +109 -0
  105. package/bundled/core/smoke-test.md +1 -1
  106. package/bundled/core/tech-debt-standards.md +1 -1
  107. package/bundled/core/test-data-standards.md +2 -2
  108. package/bundled/core/user-journey-testing.md +102 -0
  109. package/bundled/core/user-story-mapping.md +96 -0
  110. package/bundled/core/verification-evidence.md +170 -10
  111. package/bundled/core/verification-oracle.md +167 -0
  112. package/bundled/core/versioning.md +133 -109
  113. package/bundled/locales/COVERAGE.md +94 -77
  114. package/bundled/locales/zh-CN/CHANGELOG.md +94 -6
  115. package/bundled/locales/zh-CN/CLAUDE.md +1 -1
  116. package/bundled/locales/zh-CN/MAINTENANCE.md +42 -661
  117. package/bundled/locales/zh-CN/README.md +25 -12
  118. package/bundled/locales/zh-CN/SECURITY.md +2 -2
  119. package/bundled/locales/zh-CN/adoption/DAILY-WORKFLOW-GUIDE.md +2 -2
  120. package/bundled/locales/zh-CN/ai/options/commit-message/bilingual.ai.yaml +6 -1
  121. package/bundled/locales/zh-CN/core/acceptance-criteria-traceability.md +4 -6
  122. package/bundled/locales/zh-CN/core/accessibility-standards.md +1 -1
  123. package/bundled/locales/zh-CN/core/adversarial-test.md +226 -0
  124. package/bundled/locales/zh-CN/core/agent-behavior-discipline.md +187 -0
  125. package/bundled/locales/zh-CN/core/ai-response-navigation.md +32 -6
  126. package/bundled/locales/zh-CN/core/anti-sycophancy-prompting.md +1 -1
  127. package/bundled/locales/zh-CN/core/api-design-standards.md +1 -1
  128. package/bundled/locales/zh-CN/core/behavior-snapshot.md +335 -0
  129. package/bundled/locales/zh-CN/core/browser-compatibility-standards.md +239 -0
  130. package/bundled/locales/zh-CN/core/cd-deployment-strategies.md +135 -0
  131. package/bundled/locales/zh-CN/core/chaos-injection-tests.md +130 -0
  132. package/bundled/locales/zh-CN/core/checkin-standards.md +1 -1
  133. package/bundled/locales/zh-CN/core/code-review-checklist.md +1 -1
  134. package/bundled/locales/zh-CN/core/container-security.md +535 -0
  135. package/bundled/locales/zh-CN/core/context-aware-loading.md +1 -1
  136. package/bundled/locales/zh-CN/core/contract-testing-standards.md +191 -0
  137. package/bundled/locales/zh-CN/core/cost-budget-test.md +86 -0
  138. package/bundled/locales/zh-CN/core/cross-flow-regression.md +200 -0
  139. package/bundled/locales/zh-CN/core/data-migration-testing.md +217 -0
  140. package/bundled/locales/zh-CN/core/deployment-standards.md +328 -9
  141. package/bundled/locales/zh-CN/core/deprecation-standards.md +1 -1
  142. package/bundled/locales/zh-CN/core/developer-memory.md +2 -2
  143. package/bundled/locales/zh-CN/core/disaster-recovery-drill.md +87 -0
  144. package/bundled/locales/zh-CN/core/documentation-structure.md +1 -1
  145. package/bundled/locales/zh-CN/core/documentation-writing-standards.md +1 -1
  146. package/bundled/locales/zh-CN/core/error-code-standards.md +2 -2
  147. package/bundled/locales/zh-CN/core/feature-manifest-standard.md +222 -0
  148. package/bundled/locales/zh-CN/core/flaky-test-management.md +87 -0
  149. package/bundled/locales/zh-CN/core/flow-based-testing.md +284 -0
  150. package/bundled/locales/zh-CN/core/forward-derivation-standards.md +3 -4
  151. package/bundled/locales/zh-CN/core/frontend-design-standards.md +1 -1
  152. package/bundled/locales/zh-CN/core/full-coverage-testing.md +269 -0
  153. package/bundled/locales/zh-CN/core/git-worktree.md +1 -1
  154. package/bundled/locales/zh-CN/core/governance-layer.md +160 -0
  155. package/bundled/locales/zh-CN/core/guides/performance-guide.md +515 -0
  156. package/bundled/locales/zh-CN/core/guides/security-guide.md +494 -0
  157. package/bundled/locales/zh-CN/core/knowledge-graph-memory.md +128 -0
  158. package/bundled/locales/zh-CN/core/license-compliance.md +131 -0
  159. package/bundled/locales/zh-CN/core/llm-output-validation.md +192 -0
  160. package/bundled/locales/zh-CN/core/logging-standards.md +205 -7
  161. package/bundled/locales/zh-CN/core/mock-boundary.md +161 -0
  162. package/bundled/locales/zh-CN/core/model-selection.md +28 -5
  163. package/bundled/locales/zh-CN/core/mutation-testing.md +106 -0
  164. package/bundled/locales/zh-CN/core/no-cicd-deployment.md +219 -0
  165. package/bundled/locales/zh-CN/core/packaging-standards.md +77 -5
  166. package/bundled/locales/zh-CN/core/pipeline-security-gates.md +146 -0
  167. package/bundled/locales/zh-CN/core/policy-as-code-testing.md +203 -0
  168. package/bundled/locales/zh-CN/core/privacy-standards.md +1 -1
  169. package/bundled/locales/zh-CN/core/project-context-memory.md +1 -1
  170. package/bundled/locales/zh-CN/core/prompt-regression.md +88 -0
  171. package/bundled/locales/zh-CN/core/property-based-testing.md +87 -0
  172. package/bundled/locales/zh-CN/core/release-quality-manifest.md +207 -0
  173. package/bundled/locales/zh-CN/core/release-readiness-gate.md +193 -0
  174. package/bundled/locales/zh-CN/core/replay-test.md +102 -0
  175. package/bundled/locales/zh-CN/core/requirement-engineering.md +1 -1
  176. package/bundled/locales/zh-CN/core/reverse-engineering-standards.md +46 -1
  177. package/bundled/locales/zh-CN/core/rollback-standards.md +120 -0
  178. package/bundled/locales/zh-CN/core/sast-advanced.md +309 -0
  179. package/bundled/locales/zh-CN/core/secure-op.md +328 -0
  180. package/bundled/locales/zh-CN/core/security-testing.md +113 -0
  181. package/bundled/locales/zh-CN/core/self-review-protocol.md +172 -0
  182. package/bundled/locales/zh-CN/core/server-ops-security.md +507 -0
  183. package/bundled/locales/zh-CN/core/smoke-test.md +79 -0
  184. package/bundled/locales/zh-CN/core/spec-driven-development.md +39 -3
  185. package/bundled/locales/zh-CN/core/supply-chain-attestation.md +131 -0
  186. package/bundled/locales/zh-CN/core/verification-evidence.md +252 -41
  187. package/bundled/locales/zh-CN/core/versioning.md +1 -1
  188. package/bundled/locales/zh-CN/docs/CHEATSHEET.md +36 -7
  189. package/bundled/locales/zh-CN/docs/FEATURE-REFERENCE.md +71 -53
  190. package/bundled/locales/zh-CN/docs/MIGRATION-v6.md +88 -0
  191. package/bundled/locales/zh-CN/docs/USAGE-MODES-COMPARISON.md +2 -2
  192. package/bundled/locales/zh-CN/docs/USER-MANUAL.md +14 -14
  193. package/bundled/locales/zh-CN/docs/specs/system/memory-adoption-strategy.md +105 -0
  194. package/bundled/locales/zh-CN/docs/user/FAQ.md +132 -0
  195. package/bundled/locales/zh-CN/docs/user/GETTING-STARTED.md +144 -0
  196. package/bundled/locales/zh-CN/docs/user/GLOSSARY.md +178 -0
  197. package/bundled/locales/zh-CN/docs/user/README.md +70 -0
  198. package/bundled/locales/zh-CN/docs/user/TROUBLESHOOTING.md +190 -0
  199. package/bundled/locales/zh-CN/integrations/github-copilot/COPILOT-CHAT-REFERENCE.md +1 -1
  200. package/bundled/locales/zh-CN/integrations/github-copilot/README.md +1 -1
  201. package/bundled/locales/zh-CN/integrations/github-copilot/skills-mapping.md +3 -3
  202. package/bundled/locales/zh-CN/integrations/opencode/skills-mapping.md +3 -3
  203. package/bundled/locales/zh-CN/methodologies/guides/sdd-guide.md +836 -0
  204. package/bundled/locales/zh-CN/options/changelog/auto-generated.md +166 -0
  205. package/bundled/locales/zh-CN/options/changelog/keep-a-changelog.md +140 -0
  206. package/bundled/locales/zh-CN/options/code-review/automated-review.md +214 -0
  207. package/bundled/locales/zh-CN/options/code-review/pair-programming.md +166 -0
  208. package/bundled/locales/zh-CN/options/code-review/pr-review.md +167 -0
  209. package/bundled/locales/zh-CN/options/commit-message/bilingual.md +10 -3
  210. package/bundled/locales/zh-CN/options/documentation/api-docs.md +191 -0
  211. package/bundled/locales/zh-CN/options/documentation/markdown-docs.md +150 -0
  212. package/bundled/locales/zh-CN/options/documentation/wiki-style.md +131 -0
  213. package/bundled/locales/zh-CN/options/project-structure/kotlin.md +144 -0
  214. package/bundled/locales/zh-CN/options/project-structure/php.md +168 -0
  215. package/bundled/locales/zh-CN/options/project-structure/ruby.md +156 -0
  216. package/bundled/locales/zh-CN/options/project-structure/rust.md +136 -0
  217. package/bundled/locales/zh-CN/options/project-structure/swift.md +165 -0
  218. package/bundled/locales/zh-CN/options/testing/contract-testing.md +237 -0
  219. package/bundled/locales/zh-CN/options/testing/industry-pyramid.md +200 -0
  220. package/bundled/locales/zh-CN/options/testing/istqb-framework.md +144 -0
  221. package/bundled/locales/zh-CN/options/testing/performance-testing.md +251 -0
  222. package/bundled/locales/zh-CN/options/testing/security-testing.md +192 -0
  223. package/bundled/locales/zh-CN/skills/README.md +89 -126
  224. package/bundled/locales/zh-CN/skills/ac-coverage/SKILL.md +5 -7
  225. package/bundled/locales/zh-CN/skills/adr-assistant/SKILL.md +1 -1
  226. package/bundled/locales/zh-CN/skills/agents/code-architect.md +263 -0
  227. package/bundled/locales/zh-CN/skills/agents/doc-writer.md +410 -0
  228. package/bundled/locales/zh-CN/skills/agents/reviewer.md +357 -0
  229. package/bundled/locales/zh-CN/skills/agents/spec-analyst.md +410 -0
  230. package/bundled/locales/zh-CN/skills/agents/test-specialist.md +368 -0
  231. package/bundled/locales/zh-CN/skills/ai-collaboration-standards/SKILL.md +2 -2
  232. package/bundled/locales/zh-CN/skills/ai-friendly-architecture/SKILL.md +2 -2
  233. package/bundled/locales/zh-CN/skills/ai-instruction-standards/SKILL.md +1 -1
  234. package/bundled/locales/zh-CN/skills/atdd-assistant/acceptance-criteria-guide.md +1 -1
  235. package/bundled/locales/zh-CN/skills/atdd-assistant/atdd-workflow.md +3 -4
  236. package/bundled/locales/zh-CN/skills/audit-assistant/SKILL.md +2 -2
  237. package/bundled/locales/zh-CN/skills/bdd-assistant/guide.md +1 -2
  238. package/bundled/locales/zh-CN/skills/brainstorm-assistant/SKILL.md +115 -17
  239. package/bundled/locales/zh-CN/skills/brainstorm-assistant/guide.md +37 -12
  240. package/bundled/locales/zh-CN/skills/checkin-assistant/SKILL.md +1 -1
  241. package/bundled/locales/zh-CN/skills/ci-cd-assistant/SKILL.md +50 -0
  242. package/bundled/locales/zh-CN/skills/code-review-assistant/SKILL.md +5 -5
  243. package/bundled/locales/zh-CN/skills/commands/ac-coverage.md +1 -1
  244. package/bundled/locales/zh-CN/skills/commands/atdd.md +3 -3
  245. package/bundled/locales/zh-CN/skills/commands/bdd.md +2 -2
  246. package/bundled/locales/zh-CN/skills/commands/brainstorm.md +26 -17
  247. package/bundled/locales/zh-CN/skills/commands/{review.md → code-review.md} +4 -4
  248. package/bundled/locales/zh-CN/skills/commands/derive-all.md +1 -1
  249. package/bundled/locales/zh-CN/skills/commands/derive-atdd.md +1 -1
  250. package/bundled/locales/zh-CN/skills/commands/derive-bdd.md +2 -3
  251. package/bundled/locales/zh-CN/skills/commands/derive-tdd.md +1 -1
  252. package/bundled/locales/zh-CN/skills/commands/derive.md +1 -1
  253. package/bundled/locales/zh-CN/skills/commands/dev-workflow.md +2 -2
  254. package/bundled/locales/zh-CN/skills/commands/methodology.md +4 -4
  255. package/bundled/locales/zh-CN/skills/commands/pr.md +1 -1
  256. package/bundled/locales/zh-CN/skills/commands/tdd.md +1 -1
  257. package/bundled/locales/zh-CN/skills/commit-standards/SKILL.md +1 -1
  258. package/bundled/locales/zh-CN/skills/contract-test-assistant/SKILL.md +1 -1
  259. package/bundled/locales/zh-CN/skills/dev-methodology/SKILL.md +1 -1
  260. package/bundled/locales/zh-CN/skills/dev-methodology/create-methodology.md +456 -0
  261. package/bundled/locales/zh-CN/skills/dev-methodology/guide.md +6 -6
  262. package/bundled/locales/zh-CN/skills/dev-methodology/runtime.md +296 -0
  263. package/bundled/locales/zh-CN/skills/dev-workflow-guide/SKILL.md +5 -5
  264. package/bundled/locales/zh-CN/skills/docs-generator/SKILL.md +1 -1
  265. package/bundled/locales/zh-CN/skills/e2e-assistant/SKILL.md +1 -1
  266. package/bundled/locales/zh-CN/skills/incident-response-assistant/SKILL.md +2 -2
  267. package/bundled/locales/zh-CN/skills/journey-test-assistant/SKILL.md +1 -1
  268. package/bundled/locales/zh-CN/skills/logging-guide/SKILL.md +169 -142
  269. package/bundled/locales/zh-CN/skills/migration-assistant/SKILL.md +1 -1
  270. package/bundled/locales/zh-CN/skills/observability-assistant/guide.md +1 -1
  271. package/bundled/locales/zh-CN/skills/pr-automation-assistant/SKILL.md +1 -1
  272. package/bundled/locales/zh-CN/skills/project-discovery/guide.md +2 -2
  273. package/bundled/locales/zh-CN/skills/reverse-engineer/SKILL.md +1 -1
  274. package/bundled/locales/zh-CN/skills/runbook-assistant/guide.md +1 -1
  275. package/bundled/locales/zh-CN/skills/security-assistant/SKILL.md +1 -1
  276. package/bundled/locales/zh-CN/skills/skill-builder/SKILL.md +3 -3
  277. package/bundled/locales/zh-CN/skills/slo-assistant/guide.md +1 -1
  278. package/bundled/locales/zh-CN/skills/spec-derivation/SKILL.md +1 -1
  279. package/bundled/locales/zh-CN/skills/spec-derivation/guide.md +8 -9
  280. package/bundled/locales/zh-CN/skills/spec-driven-dev/SKILL.md +2 -2
  281. package/bundled/locales/zh-CN/skills/sweep/SKILL.md +1 -1
  282. package/bundled/locales/zh-CN/skills/tdd-assistant/SKILL.md +1 -1
  283. package/bundled/locales/zh-CN/skills/testing-guide/SKILL.md +2 -2
  284. package/bundled/locales/zh-CN/skills/testing-guide/testing-theory.md +2298 -0
  285. package/bundled/locales/zh-CN/skills/workflows/README.md +451 -0
  286. package/bundled/locales/zh-TW/CHANGELOG.md +94 -6
  287. package/bundled/locales/zh-TW/CLAUDE.md +1 -1
  288. package/bundled/locales/zh-TW/MAINTENANCE.md +51 -4
  289. package/bundled/locales/zh-TW/README.md +25 -12
  290. package/bundled/locales/zh-TW/SECURITY.md +2 -2
  291. package/bundled/locales/zh-TW/adoption/DAILY-WORKFLOW-GUIDE.md +2 -2
  292. package/bundled/locales/zh-TW/ai/options/commit-message/bilingual.ai.yaml +6 -1
  293. package/bundled/locales/zh-TW/ai/standards/versioning.ai.yaml +8 -48
  294. package/bundled/locales/zh-TW/core/acceptance-criteria-traceability.md +4 -6
  295. package/bundled/locales/zh-TW/core/accessibility-standards.md +1 -1
  296. package/bundled/locales/zh-TW/core/adversarial-test.md +226 -0
  297. package/bundled/locales/zh-TW/core/agent-behavior-discipline.md +187 -0
  298. package/bundled/locales/zh-TW/core/ai-response-navigation.md +32 -6
  299. package/bundled/locales/zh-TW/core/anti-sycophancy-prompting.md +1 -1
  300. package/bundled/locales/zh-TW/core/api-design-standards.md +91 -9
  301. package/bundled/locales/zh-TW/core/audit-trail.md +110 -0
  302. package/bundled/locales/zh-TW/core/behavior-snapshot.md +335 -0
  303. package/bundled/locales/zh-TW/core/browser-compatibility-standards.md +1 -0
  304. package/bundled/locales/zh-TW/core/cd-deployment-strategies.md +135 -0
  305. package/bundled/locales/zh-TW/core/chaos-injection-tests.md +130 -0
  306. package/bundled/locales/zh-TW/core/checkin-standards.md +1 -1
  307. package/bundled/locales/zh-TW/core/code-review-checklist.md +1 -1
  308. package/bundled/locales/zh-TW/core/container-image-standards.md +93 -0
  309. package/bundled/locales/zh-TW/core/container-security.md +535 -0
  310. package/bundled/locales/zh-TW/core/cost-budget-test.md +86 -0
  311. package/bundled/locales/zh-TW/core/cross-flow-regression.md +1 -0
  312. package/bundled/locales/zh-TW/core/data-contract.md +101 -0
  313. package/bundled/locales/zh-TW/core/data-migration-testing.md +217 -0
  314. package/bundled/locales/zh-TW/core/data-pipeline.md +105 -0
  315. package/bundled/locales/zh-TW/core/deployment-standards.md +363 -25
  316. package/bundled/locales/zh-TW/core/deprecation-standards.md +17 -4
  317. package/bundled/locales/zh-TW/core/developer-memory.md +2 -2
  318. package/bundled/locales/zh-TW/core/disaster-recovery-drill.md +87 -0
  319. package/bundled/locales/zh-TW/core/documentation-writing-standards.md +1 -1
  320. package/bundled/locales/zh-TW/core/error-code-standards.md +2 -2
  321. package/bundled/locales/zh-TW/core/feature-manifest-standard.md +222 -0
  322. package/bundled/locales/zh-TW/core/flaky-test-management.md +87 -0
  323. package/bundled/locales/zh-TW/core/flow-based-testing.md +284 -0
  324. package/bundled/locales/zh-TW/core/forward-derivation-standards.md +3 -4
  325. package/bundled/locales/zh-TW/core/frontend-design-standards.md +1 -1
  326. package/bundled/locales/zh-TW/core/full-coverage-testing.md +250 -0
  327. package/bundled/locales/zh-TW/core/git-worktree.md +1 -1
  328. package/bundled/locales/zh-TW/core/guides/performance-guide.md +515 -0
  329. package/bundled/locales/zh-TW/core/guides/security-guide.md +494 -0
  330. package/bundled/locales/zh-TW/core/iac-design-principles.md +90 -0
  331. package/bundled/locales/zh-TW/core/incident-response.md +111 -0
  332. package/bundled/locales/zh-TW/core/license-compliance.md +131 -0
  333. package/bundled/locales/zh-TW/core/llm-output-validation.md +192 -0
  334. package/bundled/locales/zh-TW/core/logging-standards.md +208 -4
  335. package/bundled/locales/zh-TW/core/mock-boundary.md +161 -0
  336. package/bundled/locales/zh-TW/core/model-provenance.md +173 -0
  337. package/bundled/locales/zh-TW/core/model-selection.md +28 -5
  338. package/bundled/locales/zh-TW/core/mutation-testing.md +106 -0
  339. package/bundled/locales/zh-TW/core/no-cicd-deployment.md +219 -0
  340. package/bundled/locales/zh-TW/core/packaging-standards.md +77 -5
  341. package/bundled/locales/zh-TW/core/performance-standards.md +84 -5
  342. package/bundled/locales/zh-TW/core/pii-classification.md +102 -0
  343. package/bundled/locales/zh-TW/core/pipeline-security-gates.md +146 -0
  344. package/bundled/locales/zh-TW/core/policy-as-code-testing.md +203 -0
  345. package/bundled/locales/zh-TW/core/prd-standards.md +88 -0
  346. package/bundled/locales/zh-TW/core/privacy-standards.md +1 -1
  347. package/bundled/locales/zh-TW/core/product-metrics-standards.md +96 -0
  348. package/bundled/locales/zh-TW/core/project-context-memory.md +1 -1
  349. package/bundled/locales/zh-TW/core/prompt-regression.md +88 -0
  350. package/bundled/locales/zh-TW/core/property-based-testing.md +87 -0
  351. package/bundled/locales/zh-TW/core/refactoring-standards.md +43 -6
  352. package/bundled/locales/zh-TW/core/release-quality-manifest.md +207 -0
  353. package/bundled/locales/zh-TW/core/replay-test.md +102 -0
  354. package/bundled/locales/zh-TW/core/requirement-engineering.md +1 -1
  355. package/bundled/locales/zh-TW/core/resource-cost-boundary.md +175 -0
  356. package/bundled/locales/zh-TW/core/reverse-engineering-standards.md +64 -5
  357. package/bundled/locales/zh-TW/core/rollback-standards.md +120 -0
  358. package/bundled/locales/zh-TW/core/runbook.md +110 -0
  359. package/bundled/locales/zh-TW/core/sast-advanced.md +309 -0
  360. package/bundled/locales/zh-TW/core/schema-evolution.md +98 -0
  361. package/bundled/locales/zh-TW/core/secret-management-standards.md +101 -0
  362. package/bundled/locales/zh-TW/core/secure-op.md +328 -0
  363. package/bundled/locales/zh-TW/core/security-testing.md +113 -0
  364. package/bundled/locales/zh-TW/core/self-review-protocol.md +18 -13
  365. package/bundled/locales/zh-TW/core/server-ops-security.md +507 -0
  366. package/bundled/locales/zh-TW/core/slo-sli.md +108 -0
  367. package/bundled/locales/zh-TW/core/smoke-test.md +79 -0
  368. package/bundled/locales/zh-TW/core/spec-driven-development.md +19 -11
  369. package/bundled/locales/zh-TW/core/supply-chain-attestation.md +131 -0
  370. package/bundled/locales/zh-TW/core/user-journey-testing.md +111 -0
  371. package/bundled/locales/zh-TW/core/user-story-mapping.md +94 -0
  372. package/bundled/locales/zh-TW/core/verification-evidence.md +260 -31
  373. package/bundled/locales/zh-TW/core/verification-oracle.md +159 -0
  374. package/bundled/locales/zh-TW/core/versioning.md +112 -112
  375. package/bundled/locales/zh-TW/docs/CHEATSHEET.md +36 -7
  376. package/bundled/locales/zh-TW/docs/DEV-WORKFLOW-MAPPING.md +6 -6
  377. package/bundled/locales/zh-TW/docs/FEATURE-REFERENCE.md +71 -53
  378. package/bundled/locales/zh-TW/docs/MIGRATION-v6.md +88 -0
  379. package/bundled/locales/zh-TW/docs/USAGE-MODES-COMPARISON.md +2 -2
  380. package/bundled/locales/zh-TW/docs/USER-MANUAL.md +14 -14
  381. package/bundled/locales/zh-TW/docs/specs/system/memory-adoption-strategy.md +105 -0
  382. package/bundled/locales/zh-TW/docs/user/FAQ.md +132 -0
  383. package/bundled/locales/zh-TW/docs/user/GETTING-STARTED.md +144 -0
  384. package/bundled/locales/zh-TW/docs/user/GLOSSARY.md +178 -0
  385. package/bundled/locales/zh-TW/docs/user/README.md +70 -0
  386. package/bundled/locales/zh-TW/docs/user/TROUBLESHOOTING.md +190 -0
  387. package/bundled/locales/zh-TW/integrations/github-copilot/COPILOT-CHAT-REFERENCE.md +1 -1
  388. package/bundled/locales/zh-TW/integrations/github-copilot/README.md +1 -1
  389. package/bundled/locales/zh-TW/integrations/github-copilot/skills-mapping.md +3 -3
  390. package/bundled/locales/zh-TW/integrations/opencode/skills-mapping.md +3 -3
  391. package/bundled/locales/zh-TW/methodologies/guides/sdd-guide.md +523 -26
  392. package/bundled/locales/zh-TW/options/changelog/auto-generated.md +166 -0
  393. package/bundled/locales/zh-TW/options/changelog/keep-a-changelog.md +140 -0
  394. package/bundled/locales/zh-TW/options/code-review/automated-review.md +214 -0
  395. package/bundled/locales/zh-TW/options/code-review/pair-programming.md +166 -0
  396. package/bundled/locales/zh-TW/options/code-review/pr-review.md +167 -0
  397. package/bundled/locales/zh-TW/options/commit-message/bilingual.md +10 -3
  398. package/bundled/locales/zh-TW/options/documentation/api-docs.md +191 -0
  399. package/bundled/locales/zh-TW/options/documentation/markdown-docs.md +150 -0
  400. package/bundled/locales/zh-TW/options/documentation/wiki-style.md +131 -0
  401. package/bundled/locales/zh-TW/options/project-structure/kotlin.md +144 -0
  402. package/bundled/locales/zh-TW/options/project-structure/php.md +168 -0
  403. package/bundled/locales/zh-TW/options/project-structure/ruby.md +156 -0
  404. package/bundled/locales/zh-TW/options/project-structure/rust.md +136 -0
  405. package/bundled/locales/zh-TW/options/project-structure/swift.md +165 -0
  406. package/bundled/locales/zh-TW/options/testing/contract-testing.md +237 -0
  407. package/bundled/locales/zh-TW/options/testing/industry-pyramid.md +200 -0
  408. package/bundled/locales/zh-TW/options/testing/istqb-framework.md +144 -0
  409. package/bundled/locales/zh-TW/options/testing/performance-testing.md +251 -0
  410. package/bundled/locales/zh-TW/options/testing/security-testing.md +192 -0
  411. package/bundled/locales/zh-TW/skills/README.md +91 -128
  412. package/bundled/locales/zh-TW/skills/ac-coverage/SKILL.md +4 -6
  413. package/bundled/locales/zh-TW/skills/adr-assistant/SKILL.md +1 -1
  414. package/bundled/locales/zh-TW/skills/agents/code-architect.md +263 -0
  415. package/bundled/locales/zh-TW/skills/agents/doc-writer.md +410 -0
  416. package/bundled/locales/zh-TW/skills/agents/reviewer.md +357 -0
  417. package/bundled/locales/zh-TW/skills/agents/spec-analyst.md +410 -0
  418. package/bundled/locales/zh-TW/skills/agents/test-specialist.md +368 -0
  419. package/bundled/locales/zh-TW/skills/ai-collaboration-standards/SKILL.md +2 -2
  420. package/bundled/locales/zh-TW/skills/ai-friendly-architecture/SKILL.md +2 -2
  421. package/bundled/locales/zh-TW/skills/ai-instruction-standards/SKILL.md +1 -1
  422. package/bundled/locales/zh-TW/skills/atdd-assistant/SKILL.md +2 -0
  423. package/bundled/locales/zh-TW/skills/atdd-assistant/acceptance-criteria-guide.md +1 -1
  424. package/bundled/locales/zh-TW/skills/atdd-assistant/atdd-workflow.md +3 -4
  425. package/bundled/locales/zh-TW/skills/audit-assistant/SKILL.md +2 -2
  426. package/bundled/locales/zh-TW/skills/bdd-assistant/SKILL.md +2 -0
  427. package/bundled/locales/zh-TW/skills/bdd-assistant/guide.md +1 -2
  428. package/bundled/locales/zh-TW/skills/brainstorm-assistant/SKILL.md +116 -18
  429. package/bundled/locales/zh-TW/skills/brainstorm-assistant/guide.md +38 -11
  430. package/bundled/locales/zh-TW/skills/checkin-assistant/SKILL.md +3 -1
  431. package/bundled/locales/zh-TW/skills/ci-cd-assistant/SKILL.md +50 -0
  432. package/bundled/locales/zh-TW/skills/code-review-assistant/SKILL.md +7 -5
  433. package/bundled/locales/zh-TW/skills/commands/ac-coverage.md +1 -1
  434. package/bundled/locales/zh-TW/skills/commands/atdd.md +3 -3
  435. package/bundled/locales/zh-TW/skills/commands/bdd.md +2 -2
  436. package/bundled/locales/zh-TW/skills/commands/brainstorm.md +26 -17
  437. package/bundled/locales/zh-TW/skills/commands/{review.md → code-review.md} +5 -5
  438. package/bundled/locales/zh-TW/skills/commands/derive-all.md +1 -1
  439. package/bundled/locales/zh-TW/skills/commands/derive-atdd.md +1 -1
  440. package/bundled/locales/zh-TW/skills/commands/derive-bdd.md +2 -3
  441. package/bundled/locales/zh-TW/skills/commands/derive-tdd.md +1 -1
  442. package/bundled/locales/zh-TW/skills/commands/derive.md +1 -1
  443. package/bundled/locales/zh-TW/skills/commands/dev-workflow.md +2 -2
  444. package/bundled/locales/zh-TW/skills/commands/methodology.md +4 -4
  445. package/bundled/locales/zh-TW/skills/commands/pr.md +1 -1
  446. package/bundled/locales/zh-TW/skills/commands/tdd.md +1 -1
  447. package/bundled/locales/zh-TW/skills/commit-standards/SKILL.md +1 -1
  448. package/bundled/locales/zh-TW/skills/contract-test-assistant/SKILL.md +1 -1
  449. package/bundled/locales/zh-TW/skills/dev-methodology/create-methodology.md +456 -0
  450. package/bundled/locales/zh-TW/skills/dev-methodology/guide.md +5 -5
  451. package/bundled/locales/zh-TW/skills/dev-methodology/runtime.md +296 -0
  452. package/bundled/locales/zh-TW/skills/dev-workflow-guide/SKILL.md +5 -5
  453. package/bundled/locales/zh-TW/skills/docs-generator/SKILL.md +1 -1
  454. package/bundled/locales/zh-TW/skills/e2e-assistant/SKILL.md +1 -1
  455. package/bundled/locales/zh-TW/skills/incident-response-assistant/SKILL.md +2 -2
  456. package/bundled/locales/zh-TW/skills/logging-guide/SKILL.md +52 -27
  457. package/bundled/locales/zh-TW/skills/migration-assistant/SKILL.md +1 -1
  458. package/bundled/locales/zh-TW/skills/pr-automation-assistant/SKILL.md +3 -1
  459. package/bundled/locales/zh-TW/skills/project-discovery/guide.md +2 -2
  460. package/bundled/locales/zh-TW/skills/reverse-engineer/SKILL.md +1 -1
  461. package/bundled/locales/zh-TW/skills/security-assistant/SKILL.md +1 -1
  462. package/bundled/locales/zh-TW/skills/spec-derivation/guide.md +7 -8
  463. package/bundled/locales/zh-TW/skills/spec-driven-dev/SKILL.md +2 -2
  464. package/bundled/locales/zh-TW/skills/sweep/SKILL.md +1 -1
  465. package/bundled/locales/zh-TW/skills/tdd-assistant/SKILL.md +3 -1
  466. package/bundled/locales/zh-TW/skills/testing-guide/SKILL.md +2 -2
  467. package/bundled/locales/zh-TW/skills/testing-guide/testing-theory.md +2298 -0
  468. package/bundled/locales/zh-TW/skills/workflows/README.md +451 -0
  469. package/bundled/skills/README.md +1 -1
  470. package/bundled/skills/ac-coverage/SKILL.md +17 -7
  471. package/bundled/skills/adr-assistant/SKILL.md +1 -1
  472. package/bundled/skills/agents/code-architect.md +1 -1
  473. package/bundled/skills/agents/doc-writer.md +1 -1
  474. package/bundled/skills/agents/reviewer.md +2 -2
  475. package/bundled/skills/agents/spec-analyst.md +1 -1
  476. package/bundled/skills/agents/test-specialist.md +1 -1
  477. package/bundled/skills/ai-collaboration-standards/SKILL.md +2 -2
  478. package/bundled/skills/ai-friendly-architecture/SKILL.md +2 -2
  479. package/bundled/skills/ai-instruction-standards/SKILL.md +1 -1
  480. package/bundled/skills/atdd-assistant/SKILL.md +7 -0
  481. package/bundled/skills/atdd-assistant/acceptance-criteria-guide.md +1 -1
  482. package/bundled/skills/atdd-assistant/atdd-workflow.md +6 -8
  483. package/bundled/skills/audit-assistant/SKILL.md +2 -2
  484. package/bundled/skills/bdd-assistant/SKILL.md +7 -0
  485. package/bundled/skills/bdd-assistant/guide.md +1 -2
  486. package/bundled/skills/brainstorm-assistant/SKILL.md +139 -15
  487. package/bundled/skills/brainstorm-assistant/guide.md +39 -8
  488. package/bundled/skills/checkin-assistant/SKILL.md +8 -1
  489. package/bundled/skills/ci-cd-assistant/SKILL.md +57 -0
  490. package/bundled/skills/code-review-assistant/SKILL.md +15 -8
  491. package/bundled/skills/commands/COMMAND-FAMILY-OVERVIEW.md +2 -2
  492. package/bundled/skills/commands/COMMAND-INDEX.json +3 -3
  493. package/bundled/skills/commands/README.md +2 -2
  494. package/bundled/skills/commands/ac-coverage.md +1 -1
  495. package/bundled/skills/commands/atdd.md +2 -2
  496. package/bundled/skills/commands/bdd.md +2 -2
  497. package/bundled/skills/commands/brainstorm.md +25 -14
  498. package/bundled/skills/commands/{review.md → code-review.md} +6 -6
  499. package/bundled/skills/commands/derive-all.md +1 -1
  500. package/bundled/skills/commands/derive-atdd.md +1 -1
  501. package/bundled/skills/commands/derive-bdd.md +2 -3
  502. package/bundled/skills/commands/derive-tdd.md +1 -1
  503. package/bundled/skills/commands/derive.md +1 -1
  504. package/bundled/skills/commands/dev-workflow.md +1 -1
  505. package/bundled/skills/commands/journey-test.md +45 -0
  506. package/bundled/skills/commands/methodology.md +4 -4
  507. package/bundled/skills/commands/pr.md +1 -1
  508. package/bundled/skills/commands/skill-builder.md +42 -0
  509. package/bundled/skills/commands/tdd.md +1 -1
  510. package/bundled/skills/dev-methodology/create-methodology.md +1 -1
  511. package/bundled/skills/dev-methodology/guide.md +1 -1
  512. package/bundled/skills/dev-methodology/runtime.md +1 -1
  513. package/bundled/skills/dev-workflow-guide/SKILL.md +3 -3
  514. package/bundled/skills/dev-workflow-guide/workflow-phases.md +3 -3
  515. package/bundled/skills/docs-generator/SKILL.md +3 -3
  516. package/bundled/skills/incident-response-assistant/SKILL.md +2 -2
  517. package/bundled/skills/logging-guide/SKILL.md +38 -2
  518. package/bundled/skills/migration-assistant/SKILL.md +226 -0
  519. package/bundled/skills/observability-assistant/SKILL.md +74 -0
  520. package/bundled/skills/pr-automation-assistant/SKILL.md +5 -1
  521. package/bundled/skills/project-discovery/guide.md +2 -2
  522. package/bundled/skills/push/SKILL.md +1 -1
  523. package/bundled/skills/release-standards/SKILL.md +19 -5
  524. package/bundled/skills/security-assistant/SKILL.md +1 -1
  525. package/bundled/skills/skill-builder/SKILL.md +1 -1
  526. package/bundled/skills/spec-derivation/guide.md +3 -4
  527. package/bundled/skills/spec-driven-dev/SKILL.md +13 -2
  528. package/bundled/skills/sweep/SKILL.md +1 -1
  529. package/bundled/skills/tdd-assistant/SKILL.md +8 -1
  530. package/bundled/skills/testing-guide/SKILL.md +1 -1
  531. package/bundled/skills/testing-guide/testing-theory.md +1 -1
  532. package/bundled/skills/workflows/README.md +2 -2
  533. package/package.json +4 -4
  534. package/src/commands/audit.js +30 -9
  535. package/src/commands/config.js +33 -2
  536. package/src/commands/hitl.js +14 -1
  537. package/src/commands/init.js +168 -75
  538. package/src/commands/quickstart.js +1 -2
  539. package/src/commands/release.js +51 -6
  540. package/src/commands/run-intent.js +9 -0
  541. package/src/commands/spec-split.js +27 -2
  542. package/src/commands/update.js +22 -6
  543. package/src/config/ai-agent-paths.js +3 -1
  544. package/src/i18n/messages.js +3 -102
  545. package/src/missions/MissionManager.js +44 -12
  546. package/src/utils/build-manifest.js +35 -3
  547. package/src/utils/friction-detector.js +71 -22
  548. package/src/utils/health-checker.js +29 -2
  549. package/src/utils/transaction.js +111 -0
  550. package/src/utils/version-promote.js +16 -0
  551. package/standards-registry.json +61 -149
  552. package/bundled/ai/standards/agent-communication-protocol.ai.yaml +0 -42
  553. package/bundled/ai/standards/agent-dispatch.ai.yaml +0 -42
  554. package/bundled/ai/standards/branch-completion.ai.yaml +0 -44
  555. package/bundled/ai/standards/change-batching-standards.ai.yaml +0 -44
  556. package/bundled/ai/standards/execution-history.ai.yaml +0 -42
  557. package/bundled/ai/standards/pipeline-integration-standards.ai.yaml +0 -42
  558. package/bundled/ai/standards/workflow-enforcement.ai.yaml +0 -44
  559. package/bundled/ai/standards/workflow-state-protocol.ai.yaml +0 -43
  560. package/src/commands/flow.js +0 -260
  561. package/src/commands/start.js +0 -372
  562. package/src/commands/sweep.js +0 -151
  563. package/src/commands/workflow.js +0 -681
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: testing-guide
3
- scope: uds-specific
3
+ scope: universal
4
4
  description: |
5
5
  Testing pyramid and test writing standards for UT/IT/ST/E2E.
6
6
  Supports ISTQB and Industry Pyramid frameworks.
@@ -1,6 +1,6 @@
1
1
  # Testing Theory Knowledge Base
2
2
 
3
- > **Language**: English | [繁體中文](../../locales/zh-TW/skills/testing-guide/testing-theory.md)
3
+ > **Language**: English | [繁體中文](../../locales/zh-TW/skills/testing-guide/testing-theory.md) | [简体中文](../../locales/zh-CN/skills/testing-guide/testing-theory.md)
4
4
 
5
5
  **Version**: 1.0.0
6
6
  **Last Updated**: 2026-01-29
@@ -1,6 +1,6 @@
1
1
  # UDS Workflows
2
2
 
3
- > **Language**: English | [繁體中文](../../locales/zh-TW/skills/workflows/README.md)
3
+ > **Language**: English | [繁體中文](../../locales/zh-TW/skills/workflows/README.md) | [简体中文](../../locales/zh-CN/skills/workflows/README.md)
4
4
 
5
5
  **Version**: 1.1.0
6
6
  **Last Updated**: 2026-01-21
@@ -423,7 +423,7 @@ This prevents context pollution and ensures reproducible agent behavior.
423
423
 
424
424
  - [Agents Documentation](../agents/README.md)
425
425
  - [Skills Documentation](../README.md)
426
- - [Methodology System](../methodology-system/SKILL.md)
426
+ - [Methodology System](../dev-methodology/SKILL.md)
427
427
 
428
428
  ---
429
429
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "universal-dev-standards",
3
- "version": "5.17.0",
3
+ "version": "6.1.0",
4
4
  "description": "CLI tool for adopting Universal Development Standards",
5
5
  "keywords": [
6
6
  "documentation",
@@ -61,7 +61,7 @@
61
61
  "dependencies": {
62
62
  "@inquirer/prompts": "^8.4.2",
63
63
  "chalk": "^5.3.0",
64
- "commander": "^14.0.0",
64
+ "commander": "^15.0.0",
65
65
  "js-yaml": "^4.1.0",
66
66
  "ora": "^9.4.0"
67
67
  },
@@ -70,9 +70,9 @@
70
70
  "@vitest/coverage-v8": "^4.1.5",
71
71
  "ajv": "^8.20.0",
72
72
  "ajv-formats": "^3.0.1",
73
- "eslint": "10.4.1",
73
+ "eslint": "10.6.0",
74
74
  "glob": "^13.0.1",
75
- "globals": "17.6.0",
75
+ "globals": "17.7.0",
76
76
  "husky": "^9.1.7",
77
77
  "lint-staged": "^17.0.3",
78
78
  "vitest": "^4.1.5"
@@ -302,19 +302,40 @@ async function handleReport(auditResult, options, msg) {
302
302
  return;
303
303
  }
304
304
 
305
- // Interactive selection
305
+ // Interactive selection (skipped with --yes: submit all findings)
306
306
  let selectedFindings = findings.map(f => f.value);
307
307
  let userComments = '';
308
308
 
309
- if (!isDryRun) {
310
- const selected = await checkbox({
311
- message: msg.submitPrompt || 'Select findings to submit:',
312
- choices: findings
313
- });
309
+ const submitAll = options.yes || false;
310
+ const nonInteractiveHint = msg.nonInteractiveHint ||
311
+ 'Interactive prompt unavailable in this terminal. Re-run with `uds audit --report --yes` to submit all findings without prompts.';
314
312
 
315
- const comments = await input({
316
- message: msg.userCommentsPrompt || 'Additional comments (optional):'
317
- });
313
+ if (!isDryRun && !submitAll) {
314
+ // @inquirer/prompts throws ExitPromptError on non-TTY stdin
315
+ // (CI, piped shells, some Windows consoles) — guard instead of crashing (#125)
316
+ if (!process.stdin.isTTY) {
317
+ console.log(chalk.yellow(nonInteractiveHint));
318
+ return;
319
+ }
320
+
321
+ let selected;
322
+ let comments;
323
+ try {
324
+ selected = await checkbox({
325
+ message: msg.submitPrompt || 'Select findings to submit:',
326
+ choices: findings
327
+ });
328
+
329
+ comments = await input({
330
+ message: msg.userCommentsPrompt || 'Additional comments (optional):'
331
+ });
332
+ } catch (err) {
333
+ if (err && err.name === 'ExitPromptError') {
334
+ console.log(chalk.yellow(nonInteractiveHint));
335
+ return;
336
+ }
337
+ throw err;
338
+ }
318
339
 
319
340
  selectedFindings = selected;
320
341
  userComments = comments || '';
@@ -106,6 +106,30 @@ const VIBE_PRESETS = {
106
106
  * @param {string} value - Config value
107
107
  * @param {Object} options - Command options
108
108
  */
109
+ /**
110
+ * Schema for known config keys (T12 input validation, XSPEC-292 §9).
111
+ * Unknown keys are allowed (forward-compatible); known keys are constrained.
112
+ */
113
+ const CONFIG_SCHEMAS = {
114
+ 'hitl.threshold': { type: 'number', enum: [0, 1, 2, 3, 4] },
115
+ };
116
+
117
+ /**
118
+ * Validate a config value against CONFIG_SCHEMAS.
119
+ * Returns an error message string, or null if valid / no schema.
120
+ */
121
+ export function validateConfigValue(key, value) {
122
+ const schema = CONFIG_SCHEMAS[key];
123
+ if (!schema) return null;
124
+ if (schema.type === 'number' && typeof value !== 'number') {
125
+ return `${key} must be a number`;
126
+ }
127
+ if (schema.enum && !schema.enum.includes(value)) {
128
+ return `${key} must be one of: ${schema.enum.join(', ')}`;
129
+ }
130
+ return null;
131
+ }
132
+
109
133
  export async function configCommand(action, key, value, options) {
110
134
  // Initialize config manager
111
135
  const currentConfig = config.init();
@@ -141,6 +165,13 @@ export async function configCommand(action, key, value, options) {
141
165
  if (value === 'false') typedValue = false;
142
166
  if (!isNaN(Number(value))) typedValue = Number(value);
143
167
 
168
+ // T12 input validation: enforce schema for known config keys
169
+ const schemaError = validateConfigValue(key, typedValue);
170
+ if (schemaError) {
171
+ console.error(chalk.red(`Error: ${schemaError}`));
172
+ return;
173
+ }
174
+
144
175
  const scope = options.global ? 'global' : 'project';
145
176
  config.set(key, typedValue, scope);
146
177
 
@@ -442,8 +473,8 @@ async function initVibeMode(options) {
442
473
  console.log('');
443
474
  console.log(chalk.gray(t('config.nextSteps', 'Next steps:')));
444
475
  console.log(chalk.gray(` • ${t('config.useSpec', 'Generate specs:')} uds spec create "your idea"`));
445
- console.log(chalk.gray(` • ${t('config.useSweep', 'Clean up code:')} uds sweep`));
446
- console.log(chalk.gray(` • ${t('config.useStart', 'Start a mission:')} uds start greenfield "MyApp"`));
476
+ console.log(chalk.gray(` • ${t('config.useSweep', 'Clean up code:')} /sweep (AI assistant skill)`));
477
+ console.log(chalk.gray(` • ${t('config.useQuickstart', 'Explore recipes:')} uds quickstart`));
447
478
  }
448
479
 
449
480
  /**
@@ -1,13 +1,26 @@
1
1
  import chalk from 'chalk';
2
2
  import { hitl } from '../hitl/manager.js';
3
3
 
4
+ // T12 input validation (XSPEC-292 §9): bound operation description length.
5
+ const MAX_OP_LENGTH = 500;
6
+
4
7
  export async function hitlCommand(options) {
5
8
  if (!options.op) {
6
9
  console.error(chalk.red('Error: --op <operation> is required'));
7
10
  return;
8
11
  }
9
12
 
10
- const allowed = await hitl.enforce(options.op, { reason: 'Manual check via CLI' });
13
+ const op = String(options.op).trim();
14
+ if (op.length === 0) {
15
+ console.error(chalk.red('Error: --op must not be empty'));
16
+ return;
17
+ }
18
+ if (op.length > MAX_OP_LENGTH) {
19
+ console.error(chalk.red(`Error: --op must be ≤ ${MAX_OP_LENGTH} characters (got ${op.length})`));
20
+ return;
21
+ }
22
+
23
+ const allowed = await hitl.enforce(op, { reason: 'Manual check via CLI' });
11
24
 
12
25
  if (allowed) {
13
26
  console.log(chalk.green('✅ Approved'));
@@ -24,6 +24,8 @@ import { displayLanguageToLocale } from '../utils/locale.js';
24
24
  import { generateReleaseConfig, RELEASE_MODE_LABELS } from '../utils/release-config.js';
25
25
  import { guardAgainstSelfAdoption } from '../utils/detect-self-adoption.js';
26
26
  import { readInstallYaml } from '../utils/config-manager.js';
27
+ import { getToolFilePath } from '../utils/integration-generator.js';
28
+ import { withFileTransaction } from '../utils/transaction.js';
27
29
 
28
30
  /**
29
31
  * Init command - initialize standards in current project
@@ -92,69 +94,119 @@ export async function initCommand(options) {
92
94
  }
93
95
  }
94
96
 
95
- // ===== Execute Installation =====
97
+ // ===== Execute Installation (transactional — T11 / XSPEC-292 §9.2) =====
96
98
  console.log();
97
-
98
- // 1. Install Standards
99
- const standardsResults = await installStandards(config, projectPath);
100
- config.installedStandards = standardsResults.standards.map(s => basename(s));
101
-
102
- // 1.5. Generate release-config.yaml if non-default mode selected
103
- if (config.releaseMode && config.releaseMode !== 'ci-cd') {
104
- const releaseConfigData = generateReleaseConfig(config.releaseMode);
105
- const releaseConfigPath = join(projectPath, '.standards', 'release-config.yaml');
106
- const yaml = (await import('js-yaml')).default;
107
- mkdirSync(join(projectPath, '.standards'), { recursive: true });
108
- writeFileSync(releaseConfigPath, yaml.dump(releaseConfigData), 'utf-8');
109
- console.log(chalk.green(` ✓ release-config.yaml (${config.releaseMode})`));
110
- }
111
99
 
112
- // 2. Install Integrations
113
- const integrationResults = await installIntegrations(config, projectPath);
114
-
115
- // 2.5. Generate universal AGENTS.md if requested
116
- const agentsMdResult = await generateUniversalAgentsMd(config, integrationResults, projectPath);
117
- if (agentsMdResult.path) {
118
- integrationResults.integrations.push(agentsMdResult.path);
119
- if (agentsMdResult.blockHashInfo) {
120
- integrationResults.integrationBlockHashes[agentsMdResult.path] = {
121
- ...agentsMdResult.blockHashInfo,
122
- installedAt: new Date().toISOString()
123
- };
100
+ // Files/dirs `init` owns and must tear down if the install fails partway.
101
+ // `.standards/` (and release-config.yaml beneath it) plus the per-tool
102
+ // integration files at the project root. Skills/commands install into shared
103
+ // agent dirs (e.g. ~/.claude/skills, .opencode/) that may already hold
104
+ // unrelated content, so they are intentionally NOT tracked here — re-running
105
+ // `uds init` re-installs them idempotently.
106
+ const ownedPaths = [join(projectPath, '.standards')];
107
+ for (const tool of (config.integrations || config.aiTools || [])) {
108
+ const file = getToolFilePath(tool);
109
+ if (file) ownedPaths.push(join(projectPath, file));
110
+ }
111
+ if (config.generateAgentsMd) ownedPaths.push(join(projectPath, 'AGENTS.md'));
112
+
113
+ let combinedResults;
114
+ // Captured inside apply() so the catch block can report which installers
115
+ // failed even though the verification error itself is generic.
116
+ let installErrors = [];
117
+ try {
118
+ const tx = await withFileTransaction(
119
+ ownedPaths,
120
+ {
121
+ apply: async () => {
122
+ // 1. Install Standards
123
+ const standardsResults = await installStandards(config, projectPath);
124
+ config.installedStandards = standardsResults.standards.map(s => basename(s));
125
+
126
+ // 1.5. Generate release-config.yaml if non-default mode selected
127
+ if (config.releaseMode && config.releaseMode !== 'ci-cd') {
128
+ const releaseConfigData = generateReleaseConfig(config.releaseMode);
129
+ const releaseConfigPath = join(projectPath, '.standards', 'release-config.yaml');
130
+ const yaml = (await import('js-yaml')).default;
131
+ mkdirSync(join(projectPath, '.standards'), { recursive: true });
132
+ writeFileSync(releaseConfigPath, yaml.dump(releaseConfigData), 'utf-8');
133
+ console.log(chalk.green(` ✓ release-config.yaml (${config.releaseMode})`));
134
+ }
135
+
136
+ // 2. Install Integrations
137
+ const integrationResults = await installIntegrations(config, projectPath);
138
+
139
+ // 2.5. Generate universal AGENTS.md if requested
140
+ const agentsMdResult = await generateUniversalAgentsMd(config, integrationResults, projectPath);
141
+ if (agentsMdResult.path) {
142
+ integrationResults.integrations.push(agentsMdResult.path);
143
+ if (agentsMdResult.blockHashInfo) {
144
+ integrationResults.integrationBlockHashes[agentsMdResult.path] = {
145
+ ...agentsMdResult.blockHashInfo,
146
+ installedAt: new Date().toISOString()
147
+ };
148
+ }
149
+ }
150
+
151
+ // 3. Install Skills & Commands
152
+ const skillsResults = {
153
+ skills: [],
154
+ commands: [],
155
+ errors: [],
156
+ skillHashes: {},
157
+ commandHashes: {}
158
+ };
159
+ await installSkills(config.skillsConfig, projectPath, msg, skillsResults);
160
+ await installCommands(config.skillsConfig, projectPath, msg, skillsResults);
161
+
162
+ // Combine results
163
+ installErrors = [
164
+ ...standardsResults.errors,
165
+ ...integrationResults.errors,
166
+ ...skillsResults.errors
167
+ ];
168
+ return {
169
+ standards: standardsResults.standards,
170
+ extensions: standardsResults.extensions,
171
+ integrations: integrationResults.integrations,
172
+ skills: skillsResults.skills,
173
+ commands: skillsResults.commands,
174
+ errors: installErrors,
175
+ fileHashes: standardsResults.fileHashes,
176
+ skillHashes: skillsResults.skillHashes,
177
+ commandHashes: skillsResults.commandHashes,
178
+ integrationBlockHashes: integrationResults.integrationBlockHashes,
179
+ manifestIntegrationConfigs: integrationResults.manifestIntegrationConfigs
180
+ };
181
+ },
182
+ // A half-installed project must never be committed: if any installer
183
+ // reported an error, fail verification → roll back → no manifest written.
184
+ verify: (results) => results.errors.length === 0
185
+ },
186
+ { label: 'uds init' }
187
+ );
188
+ combinedResults = tx.result;
189
+ } catch (err) {
190
+ console.log();
191
+ console.log(chalk.red(
192
+ (msg.installFailed || 'Installation failed and was rolled back: {error}')
193
+ .replace('{error}', err.message)
194
+ ));
195
+ for (const e of installErrors) {
196
+ console.log(chalk.gray(` ${e}`));
124
197
  }
198
+ if (err.rolledBack === false) {
199
+ console.log(chalk.yellow(
200
+ (msg.rollbackFailed || 'Rollback also failed: {error}. Manual cleanup may be required.')
201
+ .replace('{error}', err.rollbackError?.message || 'unknown')
202
+ ));
203
+ }
204
+ process.exit(1);
205
+ return;
125
206
  }
126
207
 
127
- // 3. Install Skills & Commands
128
- const skillsResults = {
129
- skills: [],
130
- commands: [],
131
- errors: [],
132
- skillHashes: {},
133
- commandHashes: {}
134
- };
135
- await installSkills(config.skillsConfig, projectPath, msg, skillsResults);
136
- await installCommands(config.skillsConfig, projectPath, msg, skillsResults);
137
-
138
- // Combine results
139
- const combinedResults = {
140
- standards: standardsResults.standards,
141
- extensions: standardsResults.extensions,
142
- integrations: integrationResults.integrations,
143
- skills: skillsResults.skills,
144
- commands: skillsResults.commands,
145
- errors: [
146
- ...standardsResults.errors,
147
- ...integrationResults.errors,
148
- ...skillsResults.errors
149
- ],
150
- fileHashes: standardsResults.fileHashes,
151
- skillHashes: skillsResults.skillHashes,
152
- commandHashes: skillsResults.commandHashes,
153
- integrationBlockHashes: integrationResults.integrationBlockHashes,
154
- manifestIntegrationConfigs: integrationResults.manifestIntegrationConfigs
155
- };
156
-
157
- // 4. Write Manifest & Display Summary
208
+ // 4. Write Manifest & Display Summary (commit point — only reached when the
209
+ // install verified clean; this is the "initialized" marker for the project)
158
210
  writeFinalManifest(config, combinedResults, projectPath);
159
211
 
160
212
  // 4.5. Generate layered CLAUDE.md (if --content-layout layered)
@@ -188,7 +240,7 @@ export async function initCommand(options) {
188
240
  * - Node.js projects: use husky
189
241
  * - Non-Node.js projects: write native .git/hooks/pre-commit
190
242
  */
191
- async function setupHuskyHook(projectPath) {
243
+ export async function setupHuskyHook(projectPath) {
192
244
  const hasGit = existsSync(join(projectPath, '.git'));
193
245
  if (!hasGit) return;
194
246
 
@@ -197,6 +249,11 @@ async function setupHuskyHook(projectPath) {
197
249
  if (isNodeProject) {
198
250
  console.log(chalk.cyan('Configuring Pre-commit Hook (Husky)...'));
199
251
 
252
+ // Every edit we make to the adopter's package.json, reported at the end.
253
+ // `uds init` writes ~70 files; a one-line change to package.json is invisible
254
+ // in that diff unless we say it out loud (XSPEC-341 R1).
255
+ const pkgChanges = [];
256
+
200
257
  // 1. Install husky if needed
201
258
  try {
202
259
  const pkgPath = join(projectPath, 'package.json');
@@ -205,25 +262,54 @@ async function setupHuskyHook(projectPath) {
205
262
 
206
263
  if (!hasHusky) {
207
264
  console.log(chalk.gray(' Installing husky...'));
208
- execSync('npm install --save-dev husky', { stdio: 'ignore', cwd: projectPath });
265
+ // stdio: 'pipe' rather than 'ignore' the error text belongs in the
266
+ // message below, not in /dev/null.
267
+ execSync('npm install --save-dev husky', { stdio: 'pipe', cwd: projectPath });
268
+ pkgChanges.push('devDependencies.husky — added');
209
269
  }
210
270
  } catch (e) {
211
271
  console.log(chalk.yellow(` ⚠ Failed to check/install husky: ${e.message}`));
212
272
  return;
213
273
  }
214
274
 
215
- // 2. Initialize husky
275
+ // 2. Wire husky's `prepare` script ourselves.
276
+ //
277
+ // We deliberately do NOT run `npx husky init` (XSPEC-341 R1). That command is a
278
+ // one-time bootstrap for a NEW project, not an idempotent operation: it sets
279
+ // `"prepare": "husky"` unconditionally, destroying whatever was there. For a
280
+ // published package whose `prepare` is its build step — `"prepare": "tsup"` with
281
+ // no prepack/prepublishOnly and `files: ["dist"]` — that silently breaks the next
282
+ // `npm publish`, and the failure surfaces at release time, far from this command.
283
+ // (It also seeds .husky/pre-commit with `npm test`, a gate the adopter never asked
284
+ // for.) Adopting a standards library must never rewrite the adopter's build.
216
285
  const huskyDir = join(projectPath, '.husky');
217
286
  try {
218
- if (!existsSync(huskyDir)) {
219
- console.log(chalk.gray(' Initializing husky...'));
220
- execSync('npx husky init', { stdio: 'ignore', cwd: projectPath });
287
+ const pkgPath = join(projectPath, 'package.json');
288
+ const raw = readFileSync(pkgPath, 'utf-8');
289
+ const pkg = JSON.parse(raw);
290
+ pkg.scripts = pkg.scripts || {};
291
+ const existing = pkg.scripts.prepare;
292
+
293
+ if (!existing) {
294
+ pkg.scripts.prepare = 'husky';
295
+ pkgChanges.push('scripts.prepare — added: "husky"');
296
+ } else if (!/\bhusky\b/.test(existing)) {
297
+ // Chain, never clobber. The adopter's command runs first and keeps its
298
+ // exit code meaningful.
299
+ pkg.scripts.prepare = `${existing} && husky`;
300
+ pkgChanges.push(`scripts.prepare — "${existing}" → "${pkg.scripts.prepare}"`);
301
+ }
302
+
303
+ if (pkg.scripts.prepare !== existing) {
304
+ // Preserve the file's trailing newline convention.
305
+ const indent = raw.match(/^\{\n(\s+)"/)?.[1]?.length ?? 2;
306
+ writeFileSync(pkgPath, JSON.stringify(pkg, null, indent) + (raw.endsWith('\n') ? '\n' : ''), 'utf-8');
221
307
  }
222
- } catch {
223
- // Ignore, might already be init
308
+ } catch (e) {
309
+ console.log(chalk.yellow(` ⚠ Failed to configure the prepare script: ${e.message}`));
224
310
  }
225
311
 
226
- // 3. Ensure .husky directory exists (fallback if husky init failed)
312
+ // 3. Ensure .husky directory exists
227
313
  if (!existsSync(huskyDir)) {
228
314
  try {
229
315
  mkdirSync(huskyDir, { recursive: true });
@@ -238,16 +324,15 @@ async function setupHuskyHook(projectPath) {
238
324
  const udsCmd = 'npx uds check';
239
325
 
240
326
  try {
241
- let content = '';
242
- if (existsSync(preCommitPath)) {
243
- content = readFileSync(preCommitPath, 'utf-8');
244
- } else {
245
- // Create if not exists (husky init usually creates it, but just in case)
246
- content = '#!/usr/bin/env sh\n. "$(dirname -- "$0")/_/husky.sh"\n';
247
- }
327
+ // husky v9 hooks are plain shell scripts: no shebang, no `_/husky.sh` sourcing
328
+ // (that is v8 syntax, deprecated in v9 and removed in v10). We install husky
329
+ // ^9, so a fresh hook must be v9-shaped. Existing files are appended to, never
330
+ // rewritten — their contents are the adopter's, not ours.
331
+ const content = existsSync(preCommitPath) ? readFileSync(preCommitPath, 'utf-8') : '';
248
332
 
249
333
  if (!content.includes('uds check')) {
250
- writeFileSync(preCommitPath, content + `\n# UDS Standard Check\n${udsCmd}\n`, 'utf-8');
334
+ const sep = content && !content.endsWith('\n') ? '\n' : '';
335
+ writeFileSync(preCommitPath, `${content}${sep}\n# UDS Standard Check\n${udsCmd}\n`, 'utf-8');
251
336
  try {
252
337
  execSync(`chmod +x ${preCommitPath}`);
253
338
  } catch {
@@ -260,6 +345,14 @@ async function setupHuskyHook(projectPath) {
260
345
  } catch (e) {
261
346
  console.log(chalk.red(` ✗ Failed to configure pre-commit hook: ${e.message}`));
262
347
  }
348
+
349
+ // 5. Say what we changed in their package.json.
350
+ if (pkgChanges.length > 0) {
351
+ console.log(chalk.cyan(' package.json modified:'));
352
+ for (const change of pkgChanges) {
353
+ console.log(chalk.gray(` • ${change}`));
354
+ }
355
+ }
263
356
  } else {
264
357
  // Non-Node.js: write native .git/hooks/pre-commit
265
358
  console.log(chalk.cyan('Configuring Pre-commit Hook (native git hook)...'));
@@ -35,7 +35,7 @@ export const WORKFLOWS = [
35
35
  name: 'Test-Driven Development (TDD)',
36
36
  description: 'Red-Green-Refactor cycle',
37
37
  steps: [
38
- { cmd: 'uds workflow execute tdd', desc: 'Start TDD workflow' },
38
+ { cmd: '# Drive TDD with the /tdd skill', desc: 'Red-Green-Refactor from your AI assistant' },
39
39
  { cmd: '# Write failing test (RED)', desc: 'Define expected behavior' },
40
40
  { cmd: '# Make it pass (GREEN)', desc: 'Minimal implementation' },
41
41
  { cmd: '# Improve (REFACTOR)', desc: 'Clean up without breaking tests' },
@@ -57,7 +57,6 @@ export const WORKFLOWS = [
57
57
  steps: [
58
58
  { cmd: 'uds sync', desc: 'Generate context.md from git diff + workflow state' },
59
59
  { cmd: 'cat .workflow-state/context.md', desc: 'Read context in new session' },
60
- { cmd: 'uds workflow status', desc: 'Check workflow execution status' },
61
60
  ],
62
61
  },
63
62
  ];
@@ -14,8 +14,12 @@ import yaml from 'js-yaml';
14
14
  import { existsSync, readFileSync, writeFileSync } from 'fs';
15
15
  import { join } from 'path';
16
16
  import { execSync } from 'child_process';
17
+ import { createHash } from 'crypto';
17
18
  import { resolveReleaseWorkflow } from '../utils/release-config.js';
18
- import { formatGitTag, createPromotionRecord, parseRCVersion } from '../utils/version-promote.js';
19
+ import { formatGitTag, createPromotionRecord, parseRCVersion, isStableVersion } from '../utils/version-promote.js';
20
+
21
+ // Default deployment environments (overridable via release-config.yaml release.environments)
22
+ const DEFAULT_ENVIRONMENTS = ['development', 'staging', 'canary', 'preview', 'production'];
19
23
  import { createManifest, verifyManifest } from '../utils/build-manifest.js';
20
24
  import { recordDeployment, updateDeploymentResult, checkDeploymentReadiness } from '../utils/deployment-tracker.js';
21
25
 
@@ -149,7 +153,7 @@ export async function releaseCommand(subcommand, args, options) {
149
153
  console.log(chalk.red('verify 子命令僅在 manual 或 hybrid 模式下可用。'));
150
154
  return;
151
155
  }
152
- await handleVerify(projectPath);
156
+ await handleVerify(projectPath, options);
153
157
  break;
154
158
 
155
159
  default:
@@ -177,6 +181,13 @@ async function handlePromote(targetVersion, projectPath) {
177
181
  return;
178
182
  }
179
183
 
184
+ // Validate stable semver format (catches typos like 1.a.0, 1.2, abc)
185
+ if (!isStableVersion(targetVersion)) {
186
+ console.log(chalk.red(`版本格式無效: ${targetVersion}`));
187
+ console.log(chalk.gray(' 需為 stable semver(X.Y.Z),例如: uds release promote 1.2.0'));
188
+ return;
189
+ }
190
+
180
191
  // Find the latest RC for this version
181
192
  const currentVersion = getPackageVersion(projectPath);
182
193
  const parsed = currentVersion ? parseRCVersion(currentVersion) : null;
@@ -221,6 +232,19 @@ async function handleDeploy(environment, options, projectPath) {
221
232
  return;
222
233
  }
223
234
 
235
+ // Validate environment against allow-list (overridable via release-config.yaml)
236
+ const deployConfig = loadReleaseConfig(projectPath);
237
+ const allowedEnvironments =
238
+ Array.isArray(deployConfig?.release?.environments) && deployConfig.release.environments.length > 0
239
+ ? deployConfig.release.environments
240
+ : DEFAULT_ENVIRONMENTS;
241
+ if (!allowedEnvironments.includes(environment)) {
242
+ console.log(chalk.red(`未知的部署環境: ${environment}`));
243
+ console.log(chalk.gray(` 允許的環境: ${allowedEnvironments.join(', ')}`));
244
+ console.log(chalk.gray(' 自訂環境請在 .standards/release-config.yaml 設定 release.environments'));
245
+ return;
246
+ }
247
+
224
248
  const currentVersion = getPackageVersion(projectPath) || 'unknown';
225
249
  const deployments = loadDeployments(projectPath);
226
250
 
@@ -307,9 +331,12 @@ async function handleManifest(versionArg, options, projectPath) {
307
331
  }
308
332
 
309
333
  /**
310
- * /release verify
334
+ * /release verify [--artifact <path>]
335
+ *
336
+ * T13 (XSPEC-292): when --artifact is given, compute its SHA256 so verify
337
+ * actually CONSUMES the checksum recorded in the manifest, not just stores it.
311
338
  */
312
- async function handleVerify(projectPath) {
339
+ async function handleVerify(projectPath, options = {}) {
313
340
  const manifestPath = join(projectPath, 'build-manifest.json');
314
341
 
315
342
  if (!existsSync(manifestPath)) {
@@ -327,12 +354,26 @@ async function handleVerify(projectPath) {
327
354
  }
328
355
  const currentCommit = getGitCommit();
329
356
 
330
- const result = verifyManifest(manifest, currentCommit);
357
+ // Compute the artefact's checksum when a path is supplied.
358
+ let actualChecksum;
359
+ const artifactPath = options.artifact || null;
360
+ if (artifactPath) {
361
+ if (!existsSync(artifactPath)) {
362
+ console.log(chalk.red(`找不到 artifact:${artifactPath}`));
363
+ return;
364
+ }
365
+ actualChecksum = createHash('sha256').update(readFileSync(artifactPath)).digest('hex');
366
+ }
367
+
368
+ const result = verifyManifest(manifest, currentCommit, { actualChecksum });
331
369
 
332
370
  if (result.valid) {
333
371
  console.log(chalk.green('✓ Manifest 驗證通過'));
334
372
  console.log(chalk.gray(` 版本: ${manifest.version}`));
335
373
  console.log(chalk.gray(` Commit: ${manifest.commit} (一致)`));
374
+ if (actualChecksum && manifest.checksum?.package) {
375
+ console.log(chalk.gray(` Checksum: ${actualChecksum} (一致)`));
376
+ }
336
377
  } else {
337
378
  console.log(chalk.red('✗ Manifest 驗證失敗'));
338
379
  for (const err of result.errors) {
@@ -340,6 +381,10 @@ async function handleVerify(projectPath) {
340
381
  }
341
382
  }
342
383
 
384
+ for (const w of result.warnings ?? []) {
385
+ console.log(chalk.yellow(` ⚠ ${w}`));
386
+ }
387
+
343
388
  // Show staging status
344
389
  const deployments = loadDeployments(projectPath);
345
390
  const stagingPassed = deployments.some(
@@ -369,7 +414,7 @@ function showReleaseHelp(workflow) {
369
414
  console.log(chalk.gray(' deploy <env> 記錄部署紀錄'));
370
415
  console.log(chalk.gray(' deploy <env> --result 更新測試結果'));
371
416
  console.log(chalk.gray(' manifest 產生 build-manifest.json'));
372
- console.log(chalk.gray(' verify 驗證 manifest 一致性'));
417
+ console.log(chalk.gray(' verify [--artifact <path>] 驗證 manifest 一致性(含 checksum 比對)'));
373
418
  } else {
374
419
  console.log(chalk.gray(' CI/CD 模式下,請使用 /release start 和 /release finish'));
375
420
  console.log(chalk.gray(' 切換到手動模式: uds config --type release_mode'));
@@ -19,6 +19,15 @@ export async function runIntentCommand(intent, options = {}) {
19
19
  return;
20
20
  }
21
21
 
22
+ // T12 input validation (XSPEC-292 §9): intent is a config key lookup —
23
+ // restrict to a safe charset to reject malformed/injection-style input.
24
+ if (!/^[a-z0-9][a-z0-9_-]*$/.test(intent)) {
25
+ console.error(chalk.red(`✗ intent 格式無效: "${intent}"`));
26
+ console.log(chalk.gray(' intent 僅可含小寫字母、數字、- 與 _(例: test, lint, build)'));
27
+ process.exit(1);
28
+ return;
29
+ }
30
+
22
31
  let resolved;
23
32
  try {
24
33
  resolved = resolveCommand(intent, projectPath);