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
@@ -12,6 +12,7 @@ import { checkbox, confirm as inquirerConfirm } from '@inquirer/prompts';
12
12
  import { MicroSpec } from '../vibe/micro-spec.js';
13
13
  import { existsSync, readFileSync, writeFileSync, mkdirSync, copyFileSync } from 'node:fs';
14
14
  import { join } from 'node:path';
15
+ import { withFileTransaction } from '../utils/transaction.js';
15
16
 
16
17
  /**
17
18
  * Extract acceptance criteria from spec markdown
@@ -135,7 +136,6 @@ export async function specSplitCommand(id, options = {}) {
135
136
  // Update original spec: add depends_on to new spec
136
137
  const originalContent = originalLines.join('\n');
137
138
  const updatedOriginal = addDependsOn(originalContent, newId);
138
- writeFileSync(specPath, updatedOriginal, 'utf-8');
139
139
 
140
140
  // Create new spec with moved ACs
141
141
  const newSpec = {
@@ -154,7 +154,32 @@ export async function specSplitCommand(id, options = {}) {
154
154
  /\*\*Acceptance\*\*:[\s\S]*?(?=\n\*\*|$)/,
155
155
  `**Acceptance**:\n${acSection}`
156
156
  );
157
- writeFileSync(newSpecPath, finalContent, 'utf-8');
157
+
158
+ // T11 (XSPEC-292 §9.2): the two writes must be atomic. If creating the new
159
+ // spec fails after the original was rewritten (ACs removed), the original
160
+ // would be corrupted and the moved ACs lost. Wrap both writes so any failure
161
+ // restores the original and removes a partially-written new spec.
162
+ try {
163
+ await withFileTransaction(
164
+ [specPath, newSpecPath],
165
+ {
166
+ apply: () => {
167
+ writeFileSync(specPath, updatedOriginal, 'utf-8');
168
+ writeFileSync(newSpecPath, finalContent, 'utf-8');
169
+ },
170
+ verify: () => existsSync(specPath) && existsSync(newSpecPath)
171
+ },
172
+ { label: `spec-split ${id}` }
173
+ );
174
+ } catch (err) {
175
+ console.log(chalk.red(`\nError: spec split failed and was rolled back: ${err.message}`));
176
+ console.log(chalk.gray(` Original ${id} restored. Backup also at ${join(backupDir, `${id}-pre-split.md`)}`));
177
+ if (err.rolledBack === false) {
178
+ console.log(chalk.yellow(` ⚠ Rollback also failed: ${err.rollbackError?.message}. Restore manually from the backup.`));
179
+ }
180
+ process.exit(1);
181
+ return;
182
+ }
158
183
 
159
184
  console.log(chalk.green('\nSplit complete:'));
160
185
  console.log(` ${chalk.cyan(id)} — ${acs.length - toMove.length} ACs (updated)`);
@@ -808,9 +808,18 @@ export async function updateCommand(options) {
808
808
  }
809
809
 
810
810
  // Update manifest
811
+ // T11 (XSPEC-292 §9.2): never record a partial failure as a completed update.
812
+ // If any standard/extension/integration copy failed, KEEP the previous
813
+ // upstream.version (and installed date) so that re-running `uds update`
814
+ // retries the failed files instead of treating the project as already up to
815
+ // date. The manifest is still written so that hash/migration bookkeeping for
816
+ // the files that DID succeed is persisted.
817
+ const updateIncomplete = results.errors.length > 0;
811
818
  manifest.version = '3.3.0';
812
- manifest.upstream.version = latestVersion;
813
- manifest.upstream.installed = new Date().toISOString().split('T')[0];
819
+ if (!updateIncomplete) {
820
+ manifest.upstream.version = latestVersion;
821
+ manifest.upstream.installed = new Date().toISOString().split('T')[0];
822
+ }
814
823
  refreshIntegrationBlockHashes(manifest, projectPath);
815
824
  writeManifest(manifest, projectPath);
816
825
 
@@ -893,8 +902,14 @@ export async function updateCommand(options) {
893
902
 
894
903
  // Summary
895
904
  console.log();
896
- console.log(chalk.green(msg.updateSuccess));
897
- console.log(chalk.gray(` ${msg.versionUpdated.replace('{current}', currentVersion).replace('{latest}', latestVersion)}`));
905
+ if (updateIncomplete) {
906
+ // T11: surface the partial state honestly instead of claiming success.
907
+ console.log(chalk.yellow(msg.updateIncomplete ||
908
+ '⚠ Update incomplete — some files failed to update. Version NOT advanced; re-run `uds update` to retry.'));
909
+ } else {
910
+ console.log(chalk.green(msg.updateSuccess));
911
+ console.log(chalk.gray(` ${msg.versionUpdated.replace('{current}', currentVersion).replace('{latest}', latestVersion)}`));
912
+ }
898
913
  if (results.integrations.length > 0) {
899
914
  console.log(chalk.gray(` ${msg.integrationsSynced.replace('{count}', results.integrations.length)}`));
900
915
  }
@@ -1285,8 +1300,9 @@ export async function updateCommand(options) {
1285
1300
 
1286
1301
  console.log();
1287
1302
 
1288
- // Exit explicitly to prevent hanging
1289
- process.exit(0);
1303
+ // Exit explicitly to prevent hanging.
1304
+ // T11: a partial update exits non-zero so CI / scripts can detect the failure.
1305
+ process.exit(updateIncomplete ? 1 : 0);
1290
1306
  }
1291
1307
 
1292
1308
  /**
@@ -471,7 +471,7 @@ export const AVAILABLE_COMMANDS = [
471
471
  // Core Development Workflow (Action Skills)
472
472
  // ═══════════════════════════════════════════════════════════════════════════
473
473
  { name: 'commit', description: 'Generate commit messages following Conventional Commits' },
474
- { name: 'review', description: 'Perform code review with checklist' },
474
+ { name: 'code-review', description: 'Perform code review with checklist' },
475
475
  { name: 'checkin', description: 'Pre-commit quality gates verification' },
476
476
  { name: 'release', description: 'Guide release process' },
477
477
  { name: 'changelog', description: 'Generate changelog entries' },
@@ -484,6 +484,7 @@ export const AVAILABLE_COMMANDS = [
484
484
  { name: 'atdd', description: 'Guide ATDD workflow (acceptance criteria)' },
485
485
  { name: 'coverage', description: 'Analyze test coverage (8 dimensions)' },
486
486
  { name: 'ac-coverage', description: 'Generate AC traceability matrix and coverage report' },
487
+ { name: 'journey-test', description: 'Generate user journey test plan (TESTPLAN) and E2E skeletons' },
487
488
 
488
489
  // ═══════════════════════════════════════════════════════════════════════════
489
490
  // Specification and Requirements (Action Skills)
@@ -524,6 +525,7 @@ export const AVAILABLE_COMMANDS = [
524
525
  // ═══════════════════════════════════════════════════════════════════════════
525
526
  { name: 'methodology', description: 'Development methodology selection' },
526
527
  { name: 'dev-workflow', description: 'Guide for mapping development phases to UDS commands' },
528
+ { name: 'skill-builder', description: 'Identify repeated processes and build Skills with the right depth' },
527
529
 
528
530
  // ═══════════════════════════════════════════════════════════════════════════
529
531
  // Operations and Infrastructure (Action Skills)
@@ -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