sauron-cli 1.3.0 → 1.4.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 (653) hide show
  1. package/README.md +4 -2
  2. package/dist/index.js +8 -8
  3. package/package.json +1 -1
  4. package/templates/.agents/rules/memory.md +68 -68
  5. package/templates/.agents/skills/wiki/SKILL.md +14 -14
  6. package/55ea973d-e255-4f08-a313-a5d68243bd2d.png +0 -0
  7. package/OpenSpec-main/.actrc +0 -1
  8. package/OpenSpec-main/.changeset/README.md +0 -97
  9. package/OpenSpec-main/.changeset/config.json +0 -15
  10. package/OpenSpec-main/.coderabbit.yaml +0 -11
  11. package/OpenSpec-main/.devcontainer/README.md +0 -92
  12. package/OpenSpec-main/.devcontainer/devcontainer.json +0 -68
  13. package/OpenSpec-main/.github/CODEOWNERS +0 -2
  14. package/OpenSpec-main/.github/workflows/README.md +0 -20
  15. package/OpenSpec-main/.github/workflows/ci.yml +0 -346
  16. package/OpenSpec-main/.github/workflows/release-prepare.yml +0 -60
  17. package/OpenSpec-main/CHANGELOG.md +0 -594
  18. package/OpenSpec-main/LICENSE +0 -22
  19. package/OpenSpec-main/MAINTAINERS.md +0 -17
  20. package/OpenSpec-main/README.md +0 -206
  21. package/OpenSpec-main/README_OLD.md +0 -475
  22. package/OpenSpec-main/assets/openspec_bg.png +0 -0
  23. package/OpenSpec-main/assets/openspec_dashboard.png +0 -0
  24. package/OpenSpec-main/assets/openspec_pixel_dark.svg +0 -89
  25. package/OpenSpec-main/assets/openspec_pixel_light.svg +0 -89
  26. package/OpenSpec-main/bin/openspec.js +0 -5
  27. package/OpenSpec-main/build.js +0 -31
  28. package/OpenSpec-main/eslint.config.js +0 -42
  29. package/OpenSpec-main/flake.lock +0 -27
  30. package/OpenSpec-main/flake.nix +0 -114
  31. package/OpenSpec-main/openspec/changes/IMPLEMENTATION_ORDER.md +0 -68
  32. package/OpenSpec-main/openspec/changes/add-artifact-regeneration-support/proposal.md +0 -136
  33. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/.openspec.yaml +0 -2
  34. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/proposal.md +0 -93
  35. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/change-creation/spec.md +0 -15
  36. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/change-stacking-workflow/spec.md +0 -65
  37. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/cli-change/spec.md +0 -27
  38. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/openspec-conventions/spec.md +0 -29
  39. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/tasks.md +0 -39
  40. package/OpenSpec-main/openspec/changes/add-global-install-scope/.openspec.yaml +0 -2
  41. package/OpenSpec-main/openspec/changes/add-global-install-scope/design.md +0 -161
  42. package/OpenSpec-main/openspec/changes/add-global-install-scope/proposal.md +0 -101
  43. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/ai-tool-paths/spec.md +0 -35
  44. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-config/spec.md +0 -21
  45. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-init/spec.md +0 -28
  46. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-update/spec.md +0 -34
  47. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/command-generation/spec.md +0 -22
  48. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/global-config/spec.md +0 -24
  49. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/installation-scope/spec.md +0 -71
  50. package/OpenSpec-main/openspec/changes/add-global-install-scope/tasks.md +0 -61
  51. package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/.openspec.yaml +0 -2
  52. package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/proposal.md +0 -45
  53. package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/specs/developer-qa-workflow/spec.md +0 -49
  54. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/.openspec.yaml +0 -2
  55. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/proposal.md +0 -111
  56. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/specs/cli-init/spec.md +0 -121
  57. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/specs/cli-update/spec.md +0 -48
  58. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/tasks.md +0 -53
  59. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/design.md +0 -86
  60. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/proposal.md +0 -29
  61. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/specs/cli-update/spec.md +0 -59
  62. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/tasks.md +0 -20
  63. package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/proposal.md +0 -20
  64. package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/specs/cli-list/spec.md +0 -69
  65. package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/tasks.md +0 -26
  66. package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/design.md +0 -64
  67. package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/proposal.md +0 -18
  68. package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/tasks.md +0 -25
  69. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/design.md +0 -104
  70. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/proposal.md +0 -30
  71. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/specs/cli-init/spec.md +0 -148
  72. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/tasks.md +0 -38
  73. package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/proposal.md +0 -24
  74. package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/specs/openspec-conventions/spec.md +0 -120
  75. package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/tasks.md +0 -38
  76. package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/proposal.md +0 -13
  77. package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/specs/openspec-docs/README.md +0 -472
  78. package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/tasks.md +0 -9
  79. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/proposal.md +0 -15
  80. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/specs/cli-archive/spec.md +0 -111
  81. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/tasks.md +0 -44
  82. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/proposal.md +0 -19
  83. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/specs/cli-diff/spec.md +0 -77
  84. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/tasks.md +0 -23
  85. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/design.md +0 -56
  86. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/proposal.md +0 -17
  87. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/specs/cli-change/spec.md +0 -48
  88. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/specs/cli-list/spec.md +0 -12
  89. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/tasks.md +0 -34
  90. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/proposal.md +0 -20
  91. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-change/spec.md +0 -23
  92. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-show/spec.md +0 -83
  93. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-spec/spec.md +0 -23
  94. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/tasks.md +0 -142
  95. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/proposal.md +0 -13
  96. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/specs/cli-archive/spec.md +0 -191
  97. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/tasks.md +0 -57
  98. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/design.md +0 -45
  99. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/proposal.md +0 -19
  100. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/specs/cli-spec/spec.md +0 -43
  101. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/tasks.md +0 -22
  102. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/design.md +0 -104
  103. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/proposal.md +0 -22
  104. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/specs/cli-archive/spec.md +0 -18
  105. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/specs/cli-diff/spec.md +0 -12
  106. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/tasks.md +0 -59
  107. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/proposal.md +0 -93
  108. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/cli-archive/spec.md +0 -48
  109. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/cli-diff/spec.md +0 -45
  110. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/openspec-conventions/spec.md +0 -101
  111. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/tasks.md +0 -55
  112. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/design.md +0 -19
  113. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/proposal.md +0 -67
  114. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/specs/cli-list/spec.md +0 -57
  115. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/specs/openspec-conventions/spec.md +0 -23
  116. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/tasks.md +0 -27
  117. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/proposal.md +0 -20
  118. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-change/spec.md +0 -22
  119. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-spec/spec.md +0 -23
  120. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-validate/spec.md +0 -149
  121. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/tasks.md +0 -81
  122. package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/proposal.md +0 -40
  123. package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/specs/cli-update/spec.md +0 -23
  124. package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/tasks.md +0 -21
  125. package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/proposal.md +0 -25
  126. package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/specs/cli-validate/spec.md +0 -55
  127. package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/tasks.md +0 -21
  128. package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/proposal.md +0 -36
  129. package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/specs/openspec-conventions/spec.md +0 -192
  130. package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/tasks.md +0 -19
  131. package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/proposal.md +0 -38
  132. package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/specs/cli-view/spec.md +0 -109
  133. package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/tasks.md +0 -47
  134. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/proposal.md +0 -28
  135. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/specs/cli-init/spec.md +0 -71
  136. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/specs/cli-update/spec.md +0 -41
  137. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/tasks.md +0 -17
  138. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/proposal.md +0 -35
  139. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/specs/cli-init/spec.md +0 -45
  140. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/tasks.md +0 -16
  141. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/proposal.md +0 -119
  142. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/specs/cli-init/spec.md +0 -21
  143. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/specs/cli-update/spec.md +0 -22
  144. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/tasks.md +0 -20
  145. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-cli-e2e-plan/proposal.md +0 -19
  146. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-cli-e2e-plan/tasks.md +0 -9
  147. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-deterministic-tests/proposal.md +0 -78
  148. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-deterministic-tests/tasks.md +0 -25
  149. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/proposal.md +0 -13
  150. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/specs/cli-init/spec.md +0 -92
  151. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/tasks.md +0 -12
  152. package/OpenSpec-main/openspec/changes/archive/2025-09-29-remove-diff-command/proposal.md +0 -81
  153. package/OpenSpec-main/openspec/changes/archive/2025-09-29-remove-diff-command/tasks.md +0 -37
  154. package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/proposal.md +0 -25
  155. package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/specs/cli-view/spec.md +0 -9
  156. package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/tasks.md +0 -8
  157. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/proposal.md +0 -29
  158. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/cli-init/spec.md +0 -40
  159. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/cli-update/spec.md +0 -22
  160. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/openspec-conventions/spec.md +0 -27
  161. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/tasks.md +0 -22
  162. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/design.md +0 -130
  163. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/proposal.md +0 -117
  164. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/tasks.md +0 -69
  165. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/proposal.md +0 -19
  166. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/specs/cli-validate/spec.md +0 -9
  167. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/tasks.md +0 -11
  168. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/proposal.md +0 -25
  169. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/specs/cli-init/spec.md +0 -56
  170. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/specs/cli-update/spec.md +0 -41
  171. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/tasks.md +0 -19
  172. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/proposal.md +0 -25
  173. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/specs/cli-init/spec.md +0 -48
  174. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/specs/cli-update/spec.md +0 -48
  175. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/tasks.md +0 -30
  176. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/proposal.md +0 -17
  177. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/specs/cli-init/spec.md +0 -43
  178. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/specs/cli-update/spec.md +0 -27
  179. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/tasks.md +0 -15
  180. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/proposal.md +0 -12
  181. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/specs/cli-init/spec.md +0 -39
  182. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/tasks.md +0 -17
  183. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/proposal.md +0 -17
  184. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/specs/cli-init/spec.md +0 -42
  185. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/specs/cli-update/spec.md +0 -27
  186. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/tasks.md +0 -17
  187. package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/proposal.md +0 -12
  188. package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/specs/cli-validate/spec.md +0 -39
  189. package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/tasks.md +0 -12
  190. package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/proposal.md +0 -12
  191. package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/specs/docs-agent-instructions/spec.md +0 -33
  192. package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/tasks.md +0 -11
  193. package/OpenSpec-main/openspec/changes/archive/2025-10-14-slim-root-agents-file/proposal.md +0 -13
  194. package/OpenSpec-main/openspec/changes/archive/2025-10-14-slim-root-agents-file/tasks.md +0 -15
  195. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/proposal.md +0 -14
  196. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/specs/cli-init/spec.md +0 -10
  197. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/tasks.md +0 -8
  198. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/proposal.md +0 -15
  199. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/specs/cli-init/spec.md +0 -32
  200. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/specs/cli-update/spec.md +0 -10
  201. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/tasks.md +0 -11
  202. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-release-automation/proposal.md +0 -49
  203. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-release-automation/tasks.md +0 -12
  204. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/proposal.md +0 -17
  205. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/specs/cli-update/spec.md +0 -32
  206. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/tasks.md +0 -15
  207. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/proposal.md +0 -15
  208. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/specs/cli-init/spec.md +0 -97
  209. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/tasks.md +0 -19
  210. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/proposal.md +0 -13
  211. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/specs/cli-init/spec.md +0 -67
  212. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/tasks.md +0 -7
  213. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/proposal.md +0 -12
  214. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/specs/cli-init/spec.md +0 -54
  215. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/specs/cli-update/spec.md +0 -54
  216. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/tasks.md +0 -11
  217. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/design.md +0 -525
  218. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/proposal.md +0 -29
  219. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/specs/cli-completion/spec.md +0 -300
  220. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/tasks.md +0 -81
  221. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/design.md +0 -105
  222. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/proposal.md +0 -20
  223. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/specs/global-config/spec.md +0 -76
  224. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/tasks.md +0 -26
  225. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/design.md +0 -89
  226. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/proposal.md +0 -60
  227. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/specs/cli-config/spec.md +0 -213
  228. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/tasks.md +0 -28
  229. package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/proposal.md +0 -15
  230. package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/specs/cli-completion/spec.md +0 -328
  231. package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/tasks.md +0 -49
  232. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/design.md +0 -197
  233. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/proposal.md +0 -18
  234. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/specs/artifact-graph/spec.md +0 -103
  235. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/tasks.md +0 -61
  236. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/design.md +0 -74
  237. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/proposal.md +0 -45
  238. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/specs/change-creation/spec.md +0 -63
  239. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/tasks.md +0 -30
  240. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/design.md +0 -112
  241. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/proposal.md +0 -33
  242. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/specs/cli-artifact-workflow/spec.md +0 -153
  243. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/tasks.md +0 -48
  244. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/design.md +0 -149
  245. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/proposal.md +0 -20
  246. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/specs/instruction-loader/spec.md +0 -70
  247. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/tasks.md +0 -13
  248. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/design.md +0 -129
  249. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/proposal.md +0 -20
  250. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/specs/artifact-graph/spec.md +0 -49
  251. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/tasks.md +0 -32
  252. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/design.md +0 -151
  253. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/proposal.md +0 -101
  254. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/specs/cli-artifact-workflow/spec.md +0 -109
  255. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/specs/cli-view/spec.md +0 -60
  256. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/tasks.md +0 -25
  257. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/proposal.md +0 -11
  258. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-init/spec.md +0 -105
  259. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-update/spec.md +0 -92
  260. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/tasks.md +0 -12
  261. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/proposal.md +0 -13
  262. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-init/spec.md +0 -105
  263. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-update/spec.md +0 -92
  264. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/tasks.md +0 -13
  265. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-agent-schema-selection/proposal.md +0 -26
  266. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-agent-schema-selection/tasks.md +0 -32
  267. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/design.md +0 -147
  268. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/proposal.md +0 -29
  269. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/specs/cli-artifact-workflow/spec.md +0 -98
  270. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/tasks.md +0 -29
  271. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/.openspec.yaml +0 -2
  272. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/design.md +0 -77
  273. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/proposal.md +0 -32
  274. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/specs/specs-sync-skill/spec.md +0 -67
  275. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/tasks.md +0 -40
  276. package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/proposal.md +0 -138
  277. package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/specs/cli-artifact-workflow/spec.md +0 -60
  278. package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/tasks.md +0 -35
  279. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/.openspec.yaml +0 -2
  280. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/design.md +0 -84
  281. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/proposal.md +0 -28
  282. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/specs/opsx-archive-skill/spec.md +0 -122
  283. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/tasks.md +0 -23
  284. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/.openspec.yaml +0 -2
  285. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/design.md +0 -94
  286. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/proposal.md +0 -25
  287. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/specs/nix-flake-support/spec.md +0 -79
  288. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/tasks.md +0 -65
  289. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/.openspec.yaml +0 -2
  290. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/design.md +0 -117
  291. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/proposal.md +0 -23
  292. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/specs/flake-update-script/spec.md +0 -93
  293. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/tasks.md +0 -55
  294. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/.openspec.yaml +0 -2
  295. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/design.md +0 -175
  296. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/proposal.md +0 -37
  297. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/specs/global-config/spec.md +0 -21
  298. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/specs/telemetry/spec.md +0 -116
  299. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/tasks.md +0 -47
  300. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/proposal.md +0 -16
  301. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/specs/cli-init/spec.md +0 -75
  302. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/specs/cli-update/spec.md +0 -56
  303. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/tasks.md +0 -6
  304. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/design.md +0 -206
  305. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/proposal.md +0 -21
  306. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/specs/ci-nix-validation/spec.md +0 -104
  307. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/tasks.md +0 -49
  308. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/.openspec.yaml +0 -2
  309. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/README.md +0 -3
  310. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/design.md +0 -70
  311. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/proposal.md +0 -32
  312. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/specs/no-changes.md +0 -9
  313. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/tasks.md +0 -22
  314. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/proposal.md +0 -20
  315. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/specs/cli-feedback/spec.md +0 -188
  316. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/tasks.md +0 -30
  317. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/.openspec.yaml +0 -2
  318. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/design.md +0 -115
  319. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/proposal.md +0 -27
  320. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/specs/opsx-onboard-skill/spec.md +0 -162
  321. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/tasks.md +0 -21
  322. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/design.md +0 -96
  323. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/proposal.md +0 -48
  324. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/specs/opsx-verify-skill/spec.md +0 -190
  325. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/tasks.md +0 -15
  326. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/.openspec.yaml +0 -2
  327. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/design.md +0 -193
  328. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/proposal.md +0 -32
  329. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/specs/cli-init/spec.md +0 -176
  330. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/specs/legacy-cleanup/spec.md +0 -158
  331. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/tasks.md +0 -67
  332. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/.openspec.yaml +0 -2
  333. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/design.md +0 -144
  334. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/proposal.md +0 -36
  335. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/ai-tool-paths/spec.md +0 -63
  336. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/cli-artifact-workflow/spec.md +0 -60
  337. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/command-generation/spec.md +0 -98
  338. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/tasks.md +0 -55
  339. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/.openspec.yaml +0 -2
  340. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/design.md +0 -665
  341. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/proposal.md +0 -774
  342. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/config-loading/spec.md +0 -119
  343. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/context-injection/spec.md +0 -51
  344. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/rules-injection/spec.md +0 -99
  345. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/schema-resolution/spec.md +0 -83
  346. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/tasks.md +0 -72
  347. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/.openspec.yaml +0 -2
  348. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/design.md +0 -117
  349. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/proposal.md +0 -167
  350. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/specs/schema-resolution/spec.md +0 -88
  351. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/tasks.md +0 -28
  352. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/.openspec.yaml +0 -2
  353. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/design.md +0 -113
  354. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/proposal.md +0 -55
  355. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-fork-command/spec.md +0 -66
  356. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-init-command/spec.md +0 -71
  357. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-validate-command/spec.md +0 -86
  358. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-which-command/spec.md +0 -65
  359. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/tasks.md +0 -67
  360. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/.openspec.yaml +0 -2
  361. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/README.md +0 -3
  362. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/design.md +0 -85
  363. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/proposal.md +0 -38
  364. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/specs/ai-tool-paths/spec.md +0 -12
  365. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/specs/cli-init/spec.md +0 -37
  366. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/tasks.md +0 -22
  367. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/design.md +0 -208
  368. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/proposal.md +0 -142
  369. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/specs/openspec-conventions/spec.md +0 -29
  370. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/specs/workspace-foundation/spec.md +0 -199
  371. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/tasks.md +0 -56
  372. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/design.md +0 -356
  373. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/proposal.md +0 -128
  374. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/cli-artifact-workflow/spec.md +0 -24
  375. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/workspace-foundation/spec.md +0 -35
  376. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/workspace-links/spec.md +0 -356
  377. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/tasks.md +0 -121
  378. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/design.md +0 -266
  379. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/proposal.md +0 -65
  380. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/specs/workspace-foundation/spec.md +0 -76
  381. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/specs/workspace-open/spec.md +0 -199
  382. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/tasks.md +0 -89
  383. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/design.md +0 -242
  384. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/proposal.md +0 -78
  385. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/artifact-graph/spec.md +0 -36
  386. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/change-creation/spec.md +0 -42
  387. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-artifact-workflow/spec.md +0 -100
  388. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-config/spec.md +0 -55
  389. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-update/spec.md +0 -21
  390. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/openspec-conventions/spec.md +0 -32
  391. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/schema-resolution/spec.md +0 -25
  392. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/workspace-change-planning/spec.md +0 -67
  393. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/workspace-links/spec.md +0 -163
  394. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/tasks.md +0 -133
  395. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/.openspec.yaml +0 -2
  396. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/design.md +0 -48
  397. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/proposal.md +0 -26
  398. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/specs/command-generation/spec.md +0 -63
  399. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/tasks.md +0 -19
  400. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/.openspec.yaml +0 -2
  401. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/design.md +0 -38
  402. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/proposal.md +0 -25
  403. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/specs/graceful-status-empty/spec.md +0 -27
  404. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/tasks.md +0 -16
  405. package/OpenSpec-main/openspec/changes/schema-alias-support/.openspec.yaml +0 -2
  406. package/OpenSpec-main/openspec/changes/schema-alias-support/proposal.md +0 -28
  407. package/OpenSpec-main/openspec/changes/simplify-skill-installation/.openspec.yaml +0 -2
  408. package/OpenSpec-main/openspec/changes/simplify-skill-installation/design.md +0 -288
  409. package/OpenSpec-main/openspec/changes/simplify-skill-installation/proposal.md +0 -202
  410. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/cli-init/spec.md +0 -199
  411. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/cli-update/spec.md +0 -177
  412. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/profiles/spec.md +0 -142
  413. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/propose-workflow/spec.md +0 -42
  414. package/OpenSpec-main/openspec/changes/simplify-skill-installation/tasks.md +0 -132
  415. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/.openspec.yaml +0 -2
  416. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/design.md +0 -149
  417. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/proposal.md +0 -47
  418. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/specs/template-artifact-pipeline/spec.md +0 -89
  419. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/tasks.md +0 -41
  420. package/OpenSpec-main/openspec/changes/workspace-agent-guidance/.openspec.yaml +0 -2
  421. package/OpenSpec-main/openspec/changes/workspace-agent-guidance/proposal.md +0 -100
  422. package/OpenSpec-main/openspec/changes/workspace-apply-repo-slice/proposal.md +0 -58
  423. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/HISTORICAL_DIRECTION.md +0 -511
  424. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/POC_REFERENCE_GUIDE.md +0 -266
  425. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/README.md +0 -107
  426. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/START_HERE.md +0 -105
  427. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/proposal.md +0 -62
  428. package/OpenSpec-main/openspec/changes/workspace-verify-and-archive/proposal.md +0 -57
  429. package/OpenSpec-main/openspec/config.yaml +0 -36
  430. package/OpenSpec-main/openspec/explorations/explore-workflow-ux.md +0 -116
  431. package/OpenSpec-main/openspec/explorations/workspace-architecture.md +0 -857
  432. package/OpenSpec-main/openspec/explorations/workspace-roadmap.md +0 -367
  433. package/OpenSpec-main/openspec/explorations/workspace-user-journeys.md +0 -2259
  434. package/OpenSpec-main/openspec/explorations/workspace-ux-simplification.md +0 -491
  435. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/.initiative.yaml +0 -27
  436. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/README.md +0 -33
  437. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/decisions.md +0 -204
  438. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/direction.md +0 -447
  439. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/questions.md +0 -23
  440. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/roadmap.md +0 -759
  441. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/tasks.md +0 -308
  442. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/evidence.md +0 -154
  443. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/plan.md +0 -90
  444. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/tasks.md +0 -44
  445. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/evidence.md +0 -68
  446. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/plan.md +0 -80
  447. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/tasks.md +0 -23
  448. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/evidence.md +0 -43
  449. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/plan.md +0 -85
  450. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/tasks.md +0 -17
  451. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/evidence.md +0 -77
  452. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/plan.md +0 -198
  453. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/tasks.md +0 -14
  454. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/evidence.md +0 -99
  455. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/plan.md +0 -236
  456. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/tasks.md +0 -21
  457. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/evidence.md +0 -97
  458. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/plan.md +0 -333
  459. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/tasks.md +0 -29
  460. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/evidence.md +0 -97
  461. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/plan.md +0 -184
  462. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/tasks.md +0 -27
  463. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/evidence.md +0 -239
  464. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/plan.md +0 -279
  465. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/tasks.md +0 -22
  466. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/decision-review.md +0 -64
  467. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/evidence.md +0 -106
  468. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/plan.md +0 -141
  469. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/tasks.md +0 -22
  470. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/10-let-workspaces-open-initiatives/plan.md +0 -430
  471. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/10-let-workspaces-open-initiatives/tasks.md +0 -43
  472. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/notes.md +0 -289
  473. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/plan.md +0 -39
  474. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/tasks.md +0 -8
  475. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/evidence.md +0 -45
  476. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/plan.md +0 -150
  477. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/tasks.md +0 -23
  478. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/evidence.md +0 -25
  479. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/plan.md +0 -98
  480. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/tasks.md +0 -25
  481. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/14-workspaces-beta-guide-split/plan.md +0 -37
  482. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/14-workspaces-beta-guide-split/tasks.md +0 -9
  483. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/evidence.md +0 -140
  484. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/plan.md +0 -344
  485. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/tasks.md +0 -39
  486. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/16-add-escalation-ux/plan.md +0 -26
  487. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/16-add-escalation-ux/tasks.md +0 -7
  488. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/17-harden-team-shared-coordination/plan.md +0 -25
  489. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/17-harden-team-shared-coordination/tasks.md +0 -7
  490. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/evidence.md +0 -397
  491. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/plan.md +0 -180
  492. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/tasks.md +0 -28
  493. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/plan.md +0 -62
  494. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/tasks.md +0 -16
  495. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/evidence.md +0 -47
  496. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/plan.md +0 -90
  497. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/tasks.md +0 -18
  498. package/OpenSpec-main/openspec/specs/ai-tool-paths/spec.md +0 -63
  499. package/OpenSpec-main/openspec/specs/artifact-graph/spec.md +0 -165
  500. package/OpenSpec-main/openspec/specs/change-creation/spec.md +0 -108
  501. package/OpenSpec-main/openspec/specs/ci-nix-validation/spec.md +0 -107
  502. package/OpenSpec-main/openspec/specs/cli-archive/spec.md +0 -210
  503. package/OpenSpec-main/openspec/specs/cli-artifact-workflow/spec.md +0 -398
  504. package/OpenSpec-main/openspec/specs/cli-change/spec.md +0 -92
  505. package/OpenSpec-main/openspec/specs/cli-completion/spec.md +0 -432
  506. package/OpenSpec-main/openspec/specs/cli-config/spec.md +0 -318
  507. package/OpenSpec-main/openspec/specs/cli-feedback/spec.md +0 -193
  508. package/OpenSpec-main/openspec/specs/cli-init/spec.md +0 -269
  509. package/OpenSpec-main/openspec/specs/cli-list/spec.md +0 -103
  510. package/OpenSpec-main/openspec/specs/cli-show/spec.md +0 -86
  511. package/OpenSpec-main/openspec/specs/cli-spec/spec.md +0 -88
  512. package/OpenSpec-main/openspec/specs/cli-update/spec.md +0 -229
  513. package/OpenSpec-main/openspec/specs/cli-validate/spec.md +0 -219
  514. package/OpenSpec-main/openspec/specs/cli-view/spec.md +0 -129
  515. package/OpenSpec-main/openspec/specs/command-generation/spec.md +0 -97
  516. package/OpenSpec-main/openspec/specs/config-loading/spec.md +0 -122
  517. package/OpenSpec-main/openspec/specs/context-injection/spec.md +0 -53
  518. package/OpenSpec-main/openspec/specs/docs-agent-instructions/spec.md +0 -62
  519. package/OpenSpec-main/openspec/specs/global-config/spec.md +0 -101
  520. package/OpenSpec-main/openspec/specs/instruction-loader/spec.md +0 -70
  521. package/OpenSpec-main/openspec/specs/legacy-cleanup/spec.md +0 -163
  522. package/OpenSpec-main/openspec/specs/openspec-conventions/spec.md +0 -556
  523. package/OpenSpec-main/openspec/specs/opsx-archive-skill/spec.md +0 -128
  524. package/OpenSpec-main/openspec/specs/opsx-onboard-skill/spec.md +0 -167
  525. package/OpenSpec-main/openspec/specs/opsx-verify-skill/spec.md +0 -189
  526. package/OpenSpec-main/openspec/specs/rules-injection/spec.md +0 -102
  527. package/OpenSpec-main/openspec/specs/schema-fork-command/spec.md +0 -71
  528. package/OpenSpec-main/openspec/specs/schema-init-command/spec.md +0 -76
  529. package/OpenSpec-main/openspec/specs/schema-resolution/spec.md +0 -201
  530. package/OpenSpec-main/openspec/specs/schema-validate-command/spec.md +0 -91
  531. package/OpenSpec-main/openspec/specs/schema-which-command/spec.md +0 -70
  532. package/OpenSpec-main/openspec/specs/specs-sync-skill/spec.md +0 -72
  533. package/OpenSpec-main/openspec/specs/telemetry/spec.md +0 -122
  534. package/OpenSpec-main/openspec/specs/workspace-change-planning/spec.md +0 -71
  535. package/OpenSpec-main/openspec/specs/workspace-foundation/spec.md +0 -279
  536. package/OpenSpec-main/openspec/specs/workspace-links/spec.md +0 -529
  537. package/OpenSpec-main/openspec/specs/workspace-open/spec.md +0 -205
  538. package/OpenSpec-main/openspec-parallel-merge-plan.md +0 -98
  539. package/OpenSpec-main/package-lock.json +0 -4978
  540. package/OpenSpec-main/package.json +0 -84
  541. package/OpenSpec-main/pnpm-lock.yaml +0 -3187
  542. package/OpenSpec-main/schemas/spec-driven/schema.yaml +0 -153
  543. package/OpenSpec-main/schemas/spec-driven/templates/design.md +0 -19
  544. package/OpenSpec-main/schemas/spec-driven/templates/proposal.md +0 -23
  545. package/OpenSpec-main/schemas/spec-driven/templates/spec.md +0 -8
  546. package/OpenSpec-main/schemas/spec-driven/templates/tasks.md +0 -9
  547. package/OpenSpec-main/schemas/workspace-planning/schema.yaml +0 -72
  548. package/OpenSpec-main/schemas/workspace-planning/templates/design.md +0 -33
  549. package/OpenSpec-main/schemas/workspace-planning/templates/proposal.md +0 -28
  550. package/OpenSpec-main/schemas/workspace-planning/templates/spec.md +0 -9
  551. package/OpenSpec-main/schemas/workspace-planning/templates/tasks.md +0 -15
  552. package/OpenSpec-main/scripts/README.md +0 -37
  553. package/OpenSpec-main/scripts/pack-version-check.mjs +0 -111
  554. package/OpenSpec-main/scripts/postinstall.js +0 -83
  555. package/OpenSpec-main/scripts/test-postinstall.sh +0 -57
  556. package/OpenSpec-main/scripts/update-flake.sh +0 -128
  557. package/OpenSpec-main/test/cli-e2e/basic.test.ts +0 -205
  558. package/OpenSpec-main/test/commands/artifact-workflow.test.ts +0 -1063
  559. package/OpenSpec-main/test/commands/change-initiative-link.test.ts +0 -532
  560. package/OpenSpec-main/test/commands/change.interactive-show.test.ts +0 -45
  561. package/OpenSpec-main/test/commands/change.interactive-validate.test.ts +0 -48
  562. package/OpenSpec-main/test/commands/completion.test.ts +0 -278
  563. package/OpenSpec-main/test/commands/config-profile.test.ts +0 -532
  564. package/OpenSpec-main/test/commands/config.test.ts +0 -285
  565. package/OpenSpec-main/test/commands/context-store.test.ts +0 -692
  566. package/OpenSpec-main/test/commands/feedback.test.ts +0 -429
  567. package/OpenSpec-main/test/commands/initiative.test.ts +0 -907
  568. package/OpenSpec-main/test/commands/schema.test.ts +0 -467
  569. package/OpenSpec-main/test/commands/show.test.ts +0 -123
  570. package/OpenSpec-main/test/commands/spec.interactive-show.test.ts +0 -44
  571. package/OpenSpec-main/test/commands/spec.interactive-validate.test.ts +0 -44
  572. package/OpenSpec-main/test/commands/spec.test.ts +0 -324
  573. package/OpenSpec-main/test/commands/validate.enriched-output.test.ts +0 -49
  574. package/OpenSpec-main/test/commands/validate.test.ts +0 -147
  575. package/OpenSpec-main/test/commands/workspace-initiative-open.test.ts +0 -638
  576. package/OpenSpec-main/test/commands/workspace-open.test.ts +0 -123
  577. package/OpenSpec-main/test/commands/workspace.interactive.test.ts +0 -696
  578. package/OpenSpec-main/test/commands/workspace.test.ts +0 -1812
  579. package/OpenSpec-main/test/core/archive.test.ts +0 -869
  580. package/OpenSpec-main/test/core/artifact-graph/graph.test.ts +0 -268
  581. package/OpenSpec-main/test/core/artifact-graph/instruction-loader.test.ts +0 -609
  582. package/OpenSpec-main/test/core/artifact-graph/outputs.test.ts +0 -175
  583. package/OpenSpec-main/test/core/artifact-graph/resolver.test.ts +0 -651
  584. package/OpenSpec-main/test/core/artifact-graph/schema.test.ts +0 -207
  585. package/OpenSpec-main/test/core/artifact-graph/state.test.ts +0 -174
  586. package/OpenSpec-main/test/core/artifact-graph/workflow.integration.test.ts +0 -182
  587. package/OpenSpec-main/test/core/available-tools.test.ts +0 -167
  588. package/OpenSpec-main/test/core/collections/initiatives/operations.test.ts +0 -342
  589. package/OpenSpec-main/test/core/collections/initiatives/resolution.test.ts +0 -21
  590. package/OpenSpec-main/test/core/collections/initiatives/schema.test.ts +0 -201
  591. package/OpenSpec-main/test/core/collections/initiatives/templates.test.ts +0 -74
  592. package/OpenSpec-main/test/core/collections/runtime.test.ts +0 -214
  593. package/OpenSpec-main/test/core/command-generation/adapters.test.ts +0 -710
  594. package/OpenSpec-main/test/core/command-generation/generator.test.ts +0 -110
  595. package/OpenSpec-main/test/core/command-generation/registry.test.ts +0 -108
  596. package/OpenSpec-main/test/core/command-generation/types.test.ts +0 -79
  597. package/OpenSpec-main/test/core/commands/change-command.list.test.ts +0 -76
  598. package/OpenSpec-main/test/core/commands/change-command.show-validate.test.ts +0 -111
  599. package/OpenSpec-main/test/core/completions/command-registry.test.ts +0 -201
  600. package/OpenSpec-main/test/core/completions/completion-provider.test.ts +0 -288
  601. package/OpenSpec-main/test/core/completions/generators/bash-generator.test.ts +0 -586
  602. package/OpenSpec-main/test/core/completions/generators/fish-generator.test.ts +0 -549
  603. package/OpenSpec-main/test/core/completions/generators/powershell-generator.test.ts +0 -621
  604. package/OpenSpec-main/test/core/completions/generators/zsh-generator.test.ts +0 -425
  605. package/OpenSpec-main/test/core/completions/installers/bash-installer.test.ts +0 -484
  606. package/OpenSpec-main/test/core/completions/installers/fish-installer.test.ts +0 -321
  607. package/OpenSpec-main/test/core/completions/installers/powershell-installer.test.ts +0 -824
  608. package/OpenSpec-main/test/core/completions/installers/zsh-installer.test.ts +0 -750
  609. package/OpenSpec-main/test/core/config-schema.test.ts +0 -340
  610. package/OpenSpec-main/test/core/context-store/foundation.test.ts +0 -364
  611. package/OpenSpec-main/test/core/context-store/registry.test.ts +0 -599
  612. package/OpenSpec-main/test/core/converters/json-converter.test.ts +0 -184
  613. package/OpenSpec-main/test/core/global-config.test.ts +0 -371
  614. package/OpenSpec-main/test/core/init.test.ts +0 -786
  615. package/OpenSpec-main/test/core/legacy-cleanup.test.ts +0 -1162
  616. package/OpenSpec-main/test/core/list.test.ts +0 -165
  617. package/OpenSpec-main/test/core/migration.test.ts +0 -150
  618. package/OpenSpec-main/test/core/parsers/change-parser.test.ts +0 -52
  619. package/OpenSpec-main/test/core/parsers/markdown-parser.test.ts +0 -355
  620. package/OpenSpec-main/test/core/parsers/requirement-blocks.test.ts +0 -46
  621. package/OpenSpec-main/test/core/planning-home.test.ts +0 -120
  622. package/OpenSpec-main/test/core/profile-sync-drift.test.ts +0 -92
  623. package/OpenSpec-main/test/core/profiles.test.ts +0 -63
  624. package/OpenSpec-main/test/core/project-config.test.ts +0 -610
  625. package/OpenSpec-main/test/core/shared/skill-generation.test.ts +0 -301
  626. package/OpenSpec-main/test/core/shared/tool-detection.test.ts +0 -333
  627. package/OpenSpec-main/test/core/templates/skill-templates-parity.test.ts +0 -172
  628. package/OpenSpec-main/test/core/update.test.ts +0 -1810
  629. package/OpenSpec-main/test/core/validation.enriched-messages.test.ts +0 -74
  630. package/OpenSpec-main/test/core/validation.test.ts +0 -680
  631. package/OpenSpec-main/test/core/view.test.ts +0 -129
  632. package/OpenSpec-main/test/core/workspace/foundation.test.ts +0 -694
  633. package/OpenSpec-main/test/core/workspace/legacy-state.test.ts +0 -221
  634. package/OpenSpec-main/test/core/workspace/skills.test.ts +0 -69
  635. package/OpenSpec-main/test/fixtures/tmp-init/openspec/changes/c1/proposal.md +0 -7
  636. package/OpenSpec-main/test/fixtures/tmp-init/openspec/changes/c1/specs/alpha/spec.md +0 -8
  637. package/OpenSpec-main/test/fixtures/tmp-init/openspec/specs/alpha/spec.md +0 -12
  638. package/OpenSpec-main/test/helpers/path-env.ts +0 -26
  639. package/OpenSpec-main/test/helpers/run-cli.ts +0 -150
  640. package/OpenSpec-main/test/prompts/searchable-multi-select.test.ts +0 -220
  641. package/OpenSpec-main/test/specs/source-specs-normalization.test.ts +0 -63
  642. package/OpenSpec-main/test/telemetry/config.test.ts +0 -298
  643. package/OpenSpec-main/test/telemetry/index.test.ts +0 -219
  644. package/OpenSpec-main/test/utils/change-metadata.test.ts +0 -368
  645. package/OpenSpec-main/test/utils/change-utils.test.ts +0 -201
  646. package/OpenSpec-main/test/utils/command-references.test.ts +0 -83
  647. package/OpenSpec-main/test/utils/file-system.test.ts +0 -322
  648. package/OpenSpec-main/test/utils/interactive.test.ts +0 -125
  649. package/OpenSpec-main/test/utils/marker-updates.test.ts +0 -448
  650. package/OpenSpec-main/test/utils/shell-detection.test.ts +0 -185
  651. package/OpenSpec-main/vitest.config.ts +0 -47
  652. package/OpenSpec-main/vitest.setup.ts +0 -15
  653. package/Scanner CLI Inteligente para Projetos.md +0 -433
@@ -1,1063 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { promises as fs } from 'fs';
3
- import path from 'path';
4
- import os from 'os';
5
- import { runCLI } from '../helpers/run-cli.js';
6
- import { FileSystemUtils } from '../../src/utils/file-system.js';
7
-
8
- describe('artifact-workflow CLI commands', () => {
9
- let tempDir: string;
10
- let changesDir: string;
11
-
12
- const canonical = (targetPath: string): string => FileSystemUtils.canonicalizeExistingPath(targetPath);
13
-
14
- beforeEach(async () => {
15
- tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'openspec-artifact-workflow-'));
16
- changesDir = path.join(tempDir, 'openspec', 'changes');
17
- await fs.mkdir(changesDir, { recursive: true });
18
- });
19
-
20
- afterEach(async () => {
21
- if (tempDir) {
22
- await fs.rm(tempDir, { recursive: true, force: true });
23
- }
24
- });
25
-
26
- /**
27
- * Gets combined output from CLI result (ora outputs to stdout).
28
- */
29
- function getOutput(result: { stdout: string; stderr: string }): string {
30
- return result.stdout + result.stderr;
31
- }
32
-
33
- /**
34
- * Normalizes path separators to forward slashes for cross-platform assertions.
35
- */
36
- function normalizePaths(str: string): string {
37
- return str.replace(/\\/g, '/');
38
- }
39
-
40
- /**
41
- * Creates a test change with the specified artifacts completed.
42
- * Note: An "active" change requires at least a proposal.md file to be detected.
43
- * If no artifacts are specified, we create an empty proposal to make it detectable.
44
- */
45
- async function createTestChange(
46
- changeName: string,
47
- artifacts: ('proposal' | 'design' | 'specs' | 'tasks')[] = []
48
- ): Promise<string> {
49
- const changeDir = path.join(changesDir, changeName);
50
- await fs.mkdir(changeDir, { recursive: true });
51
-
52
- // Always create proposal.md for the change to be detected as active
53
- // Content varies based on whether 'proposal' is in artifacts list
54
- const proposalContent = artifacts.includes('proposal')
55
- ? '## Why\nTest proposal content that is long enough.\n\n## What Changes\n- **test:** Something'
56
- : '## Why\nMinimal proposal.\n\n## What Changes\n- **test:** Placeholder';
57
- await fs.writeFile(path.join(changeDir, 'proposal.md'), proposalContent);
58
-
59
- if (artifacts.includes('design')) {
60
- await fs.writeFile(path.join(changeDir, 'design.md'), '# Design\n\nTechnical design.');
61
- }
62
-
63
- if (artifacts.includes('specs')) {
64
- // specs artifact uses glob pattern "specs/*.md" - files directly in specs/ directory
65
- const specsDir = path.join(changeDir, 'specs');
66
- await fs.mkdir(specsDir, { recursive: true });
67
- await fs.writeFile(path.join(specsDir, 'test-spec.md'), '## Purpose\nTest spec.');
68
- }
69
-
70
- if (artifacts.includes('tasks')) {
71
- await fs.writeFile(path.join(changeDir, 'tasks.md'), '## Tasks\n- [ ] Task 1');
72
- }
73
-
74
- return changeDir;
75
- }
76
-
77
- describe('status command', () => {
78
- it('shows status for scaffolded change without proposal.md', async () => {
79
- // Create empty change directory (no proposal.md)
80
- const changeDir = path.join(changesDir, 'scaffolded-change');
81
- await fs.mkdir(changeDir, { recursive: true });
82
-
83
- const result = await runCLI(['status', '--change', 'scaffolded-change'], { cwd: tempDir });
84
- expect(result.exitCode).toBe(0);
85
- expect(result.stdout).toContain('scaffolded-change');
86
- expect(result.stdout).toContain('0/4 artifacts complete');
87
- });
88
-
89
- it('shows status for a change with proposal only', async () => {
90
- // createTestChange always creates proposal.md, so this has 1 artifact complete
91
- await createTestChange('minimal-change');
92
-
93
- const result = await runCLI(['status', '--change', 'minimal-change'], { cwd: tempDir });
94
- expect(result.exitCode).toBe(0);
95
- expect(result.stdout).toContain('minimal-change');
96
- expect(result.stdout).toContain('spec-driven');
97
- expect(result.stdout).toContain('1/4 artifacts complete');
98
- });
99
-
100
- it('shows status for a change with proposal and design', async () => {
101
- await createTestChange('partial-change', ['proposal', 'design']);
102
-
103
- const result = await runCLI(['status', '--change', 'partial-change'], { cwd: tempDir });
104
- expect(result.exitCode).toBe(0);
105
- expect(result.stdout).toContain('2/4 artifacts complete');
106
- expect(result.stdout).toContain('[x]');
107
- });
108
-
109
- it('outputs JSON when --json flag is used', async () => {
110
- await createTestChange('json-change', ['proposal', 'design']);
111
-
112
- const result = await runCLI(['status', '--change', 'json-change', '--json'], {
113
- cwd: tempDir,
114
- });
115
- expect(result.exitCode).toBe(0);
116
- expect(result.stderr).toBe('');
117
-
118
- const json = JSON.parse(result.stdout);
119
- expect(json.changeName).toBe('json-change');
120
- expect(json.schemaName).toBe('spec-driven');
121
- expect(json.isComplete).toBe(false);
122
- expect(Array.isArray(json.artifacts)).toBe(true);
123
- expect(json.artifacts).toHaveLength(4);
124
-
125
- const proposalArtifact = json.artifacts.find((a: any) => a.id === 'proposal');
126
- expect(proposalArtifact.status).toBe('done');
127
- });
128
-
129
- it('shows complete status when all artifacts are done', async () => {
130
- await createTestChange('complete-change', ['proposal', 'design', 'specs', 'tasks']);
131
-
132
- const result = await runCLI(['status', '--change', 'complete-change'], { cwd: tempDir });
133
- expect(result.exitCode).toBe(0);
134
- expect(result.stdout).toContain('4/4 artifacts complete');
135
- expect(result.stdout).toContain('All artifacts complete!');
136
- });
137
-
138
- it('exits gracefully when no changes exist', async () => {
139
- const result = await runCLI(['status'], { cwd: tempDir });
140
- expect(result.exitCode).toBe(0);
141
- expect(result.stdout).toContain('No active changes');
142
- expect(result.stdout).toContain('openspec new change');
143
- });
144
-
145
- it('exits gracefully with JSON when no changes exist', async () => {
146
- const result = await runCLI(['status', '--json'], { cwd: tempDir });
147
- expect(result.exitCode).toBe(0);
148
-
149
- const json = JSON.parse(result.stdout);
150
- expect(json.changes).toEqual([]);
151
- expect(json.message).toBe('No active changes.');
152
- });
153
-
154
- it('errors when --change is missing and lists available changes', async () => {
155
- await createTestChange('some-change');
156
-
157
- const result = await runCLI(['status'], { cwd: tempDir });
158
- expect(result.exitCode).toBe(1);
159
- const output = getOutput(result);
160
- expect(output).toContain('Missing required option --change');
161
- expect(output).toContain('some-change');
162
- });
163
-
164
- it('errors for unknown change name and lists available changes', async () => {
165
- await createTestChange('existing-change');
166
-
167
- const result = await runCLI(['status', '--change', 'nonexistent'], { cwd: tempDir });
168
- expect(result.exitCode).toBe(1);
169
- const output = getOutput(result);
170
- expect(output).toContain("Change 'nonexistent' not found");
171
- expect(output).toContain('existing-change');
172
- });
173
-
174
- it('supports --schema option', async () => {
175
- await createTestChange('schema-change');
176
-
177
- const result = await runCLI(['status', '--change', 'schema-change', '--schema', 'spec-driven'], {
178
- cwd: tempDir,
179
- });
180
- expect(result.exitCode).toBe(0);
181
- expect(result.stdout).toContain('spec-driven');
182
- });
183
-
184
- it('errors for unknown schema', async () => {
185
- await createTestChange('test-change');
186
-
187
- const result = await runCLI(['status', '--change', 'test-change', '--schema', 'unknown'], {
188
- cwd: tempDir,
189
- });
190
- expect(result.exitCode).toBe(1);
191
- const output = getOutput(result);
192
- expect(output).toContain("Schema 'unknown' not found");
193
- });
194
-
195
- it('rejects path traversal in change name', async () => {
196
- const result = await runCLI(['status', '--change', '../foo'], { cwd: tempDir });
197
- expect(result.exitCode).toBe(1);
198
- const output = getOutput(result);
199
- expect(output).toContain('Invalid change name');
200
- });
201
-
202
- it('rejects absolute path in change name', async () => {
203
- const result = await runCLI(['status', '--change', '/etc/passwd'], { cwd: tempDir });
204
- expect(result.exitCode).toBe(1);
205
- const output = getOutput(result);
206
- expect(output).toContain('Invalid change name');
207
- });
208
-
209
- it('rejects slashes in change name', async () => {
210
- const result = await runCLI(['status', '--change', 'foo/bar'], { cwd: tempDir });
211
- expect(result.exitCode).toBe(1);
212
- const output = getOutput(result);
213
- expect(output).toContain('Invalid change name');
214
- });
215
- });
216
-
217
- describe('instructions command', () => {
218
- it('shows instructions for proposal on scaffolded change', async () => {
219
- // Create empty change directory (no proposal.md)
220
- const changeDir = path.join(changesDir, 'scaffolded-change');
221
- await fs.mkdir(changeDir, { recursive: true });
222
-
223
- const result = await runCLI(['instructions', 'proposal', '--change', 'scaffolded-change'], {
224
- cwd: tempDir,
225
- });
226
- expect(result.exitCode).toBe(0);
227
- expect(result.stdout).toContain('<artifact id="proposal"');
228
- expect(result.stdout).toContain('proposal.md');
229
- expect(result.stdout).toContain('<template>');
230
- });
231
-
232
- it('shows instructions for design artifact', async () => {
233
- await createTestChange('instr-change');
234
-
235
- const result = await runCLI(['instructions', 'design', '--change', 'instr-change'], {
236
- cwd: tempDir,
237
- });
238
- expect(result.exitCode).toBe(0);
239
- expect(result.stdout).toContain('<artifact id="design"');
240
- expect(result.stdout).toContain('design.md');
241
- expect(result.stdout).toContain('<template>');
242
- });
243
-
244
- it('shows blocked warning for artifact with unmet dependencies', async () => {
245
- // tasks depends on design and specs, which are not done yet
246
- await createTestChange('blocked-change');
247
-
248
- const result = await runCLI(['instructions', 'tasks', '--change', 'blocked-change'], {
249
- cwd: tempDir,
250
- });
251
- expect(result.exitCode).toBe(0);
252
- expect(result.stdout).toContain('<warning>');
253
- expect(result.stdout).toContain('status="missing"');
254
- });
255
-
256
- it('outputs JSON for instructions', async () => {
257
- await createTestChange('json-instr', ['proposal']);
258
-
259
- const result = await runCLI(['instructions', 'design', '--change', 'json-instr', '--json'], {
260
- cwd: tempDir,
261
- });
262
- expect(result.exitCode).toBe(0);
263
- expect(result.stderr).toBe('');
264
-
265
- const json = JSON.parse(result.stdout);
266
- expect(json.artifactId).toBe('design');
267
- expect(json.outputPath).toContain('design.md');
268
- expect(typeof json.template).toBe('string');
269
- expect(Array.isArray(json.dependencies)).toBe(true);
270
- });
271
-
272
- it('errors when artifact argument is missing', async () => {
273
- await createTestChange('test-change');
274
-
275
- const result = await runCLI(['instructions', '--change', 'test-change'], { cwd: tempDir });
276
- expect(result.exitCode).toBe(1);
277
- const output = getOutput(result);
278
- expect(output).toContain('Missing required argument <artifact>');
279
- expect(output).toContain('Valid artifacts');
280
- });
281
-
282
- it('errors for unknown artifact', async () => {
283
- await createTestChange('test-change');
284
-
285
- const result = await runCLI(['instructions', 'unknown-artifact', '--change', 'test-change'], {
286
- cwd: tempDir,
287
- });
288
- expect(result.exitCode).toBe(1);
289
- const output = getOutput(result);
290
- expect(output).toContain("Artifact 'unknown-artifact' not found");
291
- expect(output).toContain('Valid artifacts');
292
- });
293
- });
294
-
295
- describe('templates command', () => {
296
- it('shows template paths for default schema', async () => {
297
- const result = await runCLI(['templates'], { cwd: tempDir });
298
- expect(result.exitCode).toBe(0);
299
- expect(result.stdout).toContain('Schema: spec-driven');
300
- expect(result.stdout).toContain('proposal:');
301
- expect(result.stdout).toContain('design:');
302
- expect(result.stdout).toContain('specs:');
303
- expect(result.stdout).toContain('tasks:');
304
- });
305
-
306
- it('shows template paths for specified schema', async () => {
307
- const result = await runCLI(['templates', '--schema', 'spec-driven'], { cwd: tempDir });
308
- expect(result.exitCode).toBe(0);
309
- expect(result.stdout).toContain('Schema: spec-driven');
310
- expect(result.stdout).toContain('proposal:');
311
- expect(result.stdout).toContain('design:');
312
- });
313
-
314
- it('outputs JSON mapping of templates', async () => {
315
- const result = await runCLI(['templates', '--json'], { cwd: tempDir });
316
- expect(result.exitCode).toBe(0);
317
- expect(result.stderr).toBe('');
318
-
319
- const json = JSON.parse(result.stdout);
320
- expect(json.proposal).toBeDefined();
321
- expect(json.proposal.path).toContain('proposal.md');
322
- expect(json.proposal.source).toBe('package');
323
- });
324
-
325
- it('errors for unknown schema', async () => {
326
- const result = await runCLI(['templates', '--schema', 'nonexistent'], { cwd: tempDir });
327
- expect(result.exitCode).toBe(1);
328
- const output = getOutput(result);
329
- expect(output).toContain("Schema 'nonexistent' not found");
330
- });
331
- });
332
-
333
- describe('new change command', () => {
334
- it('creates a new change directory', async () => {
335
- const result = await runCLI(['new', 'change', 'my-new-feature'], { cwd: tempDir });
336
- expect(result.exitCode).toBe(0);
337
- const output = getOutput(result);
338
- expect(output).toContain("Created change 'my-new-feature'");
339
-
340
- const changeDir = path.join(changesDir, 'my-new-feature');
341
- const stat = await fs.stat(changeDir);
342
- expect(stat.isDirectory()).toBe(true);
343
- });
344
-
345
- it('creates workspace-planning changes under the workspace root without touching linked repos', async () => {
346
- const workspaceEnv = {
347
- XDG_DATA_HOME: path.join(tempDir, 'data'),
348
- XDG_CONFIG_HOME: path.join(tempDir, 'config'),
349
- OPEN_SPEC_INTERACTIVE: '0',
350
- OPENSPEC_TELEMETRY: '0',
351
- };
352
- const api = path.join(tempDir, 'linked-api');
353
- await fs.mkdir(path.join(api, 'openspec', 'specs'), { recursive: true });
354
- const apiEntriesBefore = (await fs.readdir(api)).sort();
355
-
356
- const setup = await runCLI(
357
- [
358
- 'workspace',
359
- 'setup',
360
- '--no-interactive',
361
- '--json',
362
- '--name',
363
- 'platform',
364
- '--link',
365
- `api=${api}`,
366
- ],
367
- { cwd: tempDir, env: workspaceEnv }
368
- );
369
- expect(setup.exitCode).toBe(0);
370
- const workspaceRoot = JSON.parse(setup.stdout).workspace.root;
371
-
372
- const create = await runCLI(
373
- [
374
- 'new',
375
- 'change',
376
- 'cross-repo-login',
377
- '--goal',
378
- 'Unify login across API and web',
379
- '--areas',
380
- 'api',
381
- ],
382
- { cwd: workspaceRoot, env: workspaceEnv }
383
- );
384
- expect(create.exitCode).toBe(0);
385
- const createOutput = getOutput(create);
386
- expect(createOutput).toContain('workspace change');
387
- expect(normalizePaths(createOutput)).toContain('changes/cross-repo-login');
388
-
389
- const changeDir = path.join(workspaceRoot, 'changes', 'cross-repo-login');
390
- const metadata = await fs.readFile(path.join(changeDir, '.openspec.yaml'), 'utf-8');
391
- expect(metadata).toContain('schema: workspace-planning');
392
- expect(metadata).toContain('goal: Unify login across API and web');
393
- expect(metadata).toContain('affected_areas:');
394
- expect(metadata).toContain('- api');
395
- expect((await fs.readdir(api)).sort()).toEqual(apiEntriesBefore);
396
- await expect(fs.stat(path.join(api, 'openspec', 'changes'))).rejects.toMatchObject({
397
- code: 'ENOENT',
398
- });
399
- });
400
-
401
- it('resolves nested workspace-planning specs as workspace-scoped paths', async () => {
402
- const workspaceEnv = {
403
- XDG_DATA_HOME: path.join(tempDir, 'data'),
404
- XDG_CONFIG_HOME: path.join(tempDir, 'config'),
405
- OPEN_SPEC_INTERACTIVE: '0',
406
- OPENSPEC_TELEMETRY: '0',
407
- };
408
- const api = path.join(tempDir, 'linked-api');
409
- await fs.mkdir(api, { recursive: true });
410
-
411
- const setup = await runCLI(
412
- [
413
- 'workspace',
414
- 'setup',
415
- '--no-interactive',
416
- '--json',
417
- '--name',
418
- 'platform',
419
- '--link',
420
- `api=${api}`,
421
- ],
422
- { cwd: tempDir, env: workspaceEnv }
423
- );
424
- expect(setup.exitCode).toBe(0);
425
- const workspaceRoot = JSON.parse(setup.stdout).workspace.root;
426
-
427
- const create = await runCLI(
428
- ['new', 'change', 'nested-workspace-spec', '--goal', 'Plan API login', '--areas', 'api'],
429
- { cwd: workspaceRoot, env: workspaceEnv }
430
- );
431
- expect(create.exitCode).toBe(0);
432
-
433
- const changeDir = path.join(workspaceRoot, 'changes', 'nested-workspace-spec');
434
- const specPath = path.join(changeDir, 'specs', 'api', 'login', 'spec.md');
435
- await fs.mkdir(path.dirname(specPath), { recursive: true });
436
- await fs.writeFile(
437
- specPath,
438
- '## ADDED Requirements\n\n### Requirement: API login\n\n#### Scenario: Valid login\n- **WHEN** credentials are valid\n- **THEN** login succeeds\n'
439
- );
440
-
441
- const status = await runCLI(['status', '--change', 'nested-workspace-spec', '--json'], {
442
- cwd: workspaceRoot,
443
- env: workspaceEnv,
444
- });
445
- expect(status.exitCode).toBe(0);
446
- const statusJson = JSON.parse(status.stdout);
447
- expect(statusJson.schemaName).toBe('workspace-planning');
448
- expect(statusJson.planningHome.kind).toBe('workspace');
449
- expect(statusJson.affectedAreas.known).toEqual(['api']);
450
- expect(statusJson.actionContext).toEqual(
451
- expect.objectContaining({
452
- mode: 'workspace-planning',
453
- sourceOfTruth: 'workspace-local',
454
- allowedEditRoots: [],
455
- constraints: expect.arrayContaining([
456
- 'Treat workspace-local planning artifacts as compatibility context for this local view.',
457
- 'Use initiatives for durable coordination when initiative context exists.',
458
- 'Treat linked repos and folders as context until an explicit edit root is selected.',
459
- ]),
460
- })
461
- );
462
- expect(statusJson.actionContext.constraints).not.toContain(
463
- 'Use workspace-level planning artifacts as the source of truth.'
464
- );
465
- expect(statusJson.artifactPaths.specs.existingOutputPaths).toEqual([canonical(specPath)]);
466
-
467
- const instructions = await runCLI(
468
- ['instructions', 'specs', '--change', 'nested-workspace-spec', '--json'],
469
- { cwd: workspaceRoot, env: workspaceEnv }
470
- );
471
- expect(instructions.exitCode).toBe(0);
472
- const instructionsJson = JSON.parse(instructions.stdout);
473
- expect(instructionsJson.planningHome.kind).toBe('workspace');
474
- expect(normalizePaths(instructionsJson.resolvedOutputPath)).toContain(
475
- 'changes/nested-workspace-spec/specs/**/*.md'
476
- );
477
- expect(instructionsJson.existingOutputPaths).toEqual([canonical(specPath)]);
478
- });
479
-
480
- it('creates README.md when --description is provided', async () => {
481
- const result = await runCLI(
482
- ['new', 'change', 'described-feature', '--description', 'This is a test feature'],
483
- { cwd: tempDir }
484
- );
485
- expect(result.exitCode).toBe(0);
486
-
487
- const readmePath = path.join(changesDir, 'described-feature', 'README.md');
488
- const content = await fs.readFile(readmePath, 'utf-8');
489
- expect(content).toContain('described-feature');
490
- expect(content).toContain('This is a test feature');
491
- });
492
-
493
- it('errors for invalid change name with spaces', async () => {
494
- const result = await runCLI(['new', 'change', 'invalid name'], { cwd: tempDir });
495
- expect(result.exitCode).toBe(1);
496
- const output = getOutput(result);
497
- expect(output).toContain('Error');
498
- });
499
-
500
- it('errors for duplicate change name', async () => {
501
- await createTestChange('existing-change');
502
-
503
- const result = await runCLI(['new', 'change', 'existing-change'], { cwd: tempDir });
504
- expect(result.exitCode).toBe(1);
505
- const output = getOutput(result);
506
- expect(output).toContain('exists');
507
- });
508
-
509
- it('errors when name argument is missing', async () => {
510
- const result = await runCLI(['new', 'change'], { cwd: tempDir });
511
- expect(result.exitCode).toBe(1);
512
- });
513
- });
514
-
515
- describe('instructions apply command', () => {
516
- it('shows apply instructions for spec-driven schema with tasks', async () => {
517
- await createTestChange('apply-change', ['proposal', 'design', 'specs', 'tasks']);
518
-
519
- const result = await runCLI(['instructions', 'apply', '--change', 'apply-change'], {
520
- cwd: tempDir,
521
- });
522
- expect(result.exitCode).toBe(0);
523
- expect(result.stdout).toContain('## Apply: apply-change');
524
- expect(result.stdout).toContain('Schema: spec-driven');
525
- expect(result.stdout).toContain('### Context Files');
526
- expect(result.stdout).toContain('### Instruction');
527
- });
528
-
529
- it('shows blocked state when required artifacts are missing', async () => {
530
- // Only create proposal - missing tasks (required by spec-driven apply block)
531
- await createTestChange('blocked-apply', ['proposal']);
532
-
533
- const result = await runCLI(['instructions', 'apply', '--change', 'blocked-apply'], {
534
- cwd: tempDir,
535
- });
536
- expect(result.exitCode).toBe(0);
537
- expect(result.stdout).toContain('Blocked');
538
- expect(result.stdout).toContain('Missing artifacts: tasks');
539
- });
540
-
541
- it('outputs JSON for apply instructions', async () => {
542
- await createTestChange('json-apply', ['proposal', 'design', 'specs', 'tasks']);
543
-
544
- const result = await runCLI(
545
- ['instructions', 'apply', '--change', 'json-apply', '--json'],
546
- { cwd: tempDir }
547
- );
548
- expect(result.exitCode).toBe(0);
549
- expect(result.stderr).toBe('');
550
-
551
- const json = JSON.parse(result.stdout);
552
- const expectedProposalPath = canonical(path.join(changesDir, 'json-apply', 'proposal.md'));
553
- const expectedSpecPath = canonical(path.join(changesDir, 'json-apply', 'specs', 'test-spec.md'));
554
- expect(json.changeName).toBe('json-apply');
555
- expect(json.schemaName).toBe('spec-driven');
556
- expect(json.state).toBe('ready');
557
- expect(json.contextFiles).toBeDefined();
558
- expect(typeof json.contextFiles).toBe('object');
559
- expect(json.contextFiles.proposal).toEqual([expectedProposalPath]);
560
- expect(json.contextFiles.specs).toEqual([expectedSpecPath]);
561
- });
562
-
563
- it('resolves single-star glob artifacts consistently between status and apply', async () => {
564
- const schemaDir = path.join(tempDir, 'openspec', 'schemas', 'glob-test');
565
- const templatesDir = path.join(schemaDir, 'templates');
566
- await fs.mkdir(templatesDir, { recursive: true });
567
-
568
- await fs.writeFile(
569
- path.join(schemaDir, 'schema.yaml'),
570
- `name: glob-test
571
- version: 1
572
- description: Test schema for single-star globs
573
- artifacts:
574
- - id: specs
575
- generates: specs/*/spec.md
576
- description: Nested specs
577
- template: spec.md
578
- requires: []
579
- apply:
580
- requires: [specs]
581
- instruction: Ready when specs exist.
582
- `
583
- );
584
- await fs.writeFile(path.join(templatesDir, 'spec.md'), '# Spec\n');
585
-
586
- const changeDir = path.join(changesDir, 'single-star-glob');
587
- const specPath = path.join(changeDir, 'specs', 'single-star-glob', 'spec.md');
588
- await fs.mkdir(path.dirname(specPath), { recursive: true });
589
- await fs.writeFile(path.join(changeDir, '.openspec.yaml'), 'schema: glob-test\n');
590
- await fs.writeFile(specPath, '# Nested spec\n');
591
-
592
- const statusResult = await runCLI(['status', '--change', 'single-star-glob', '--json'], {
593
- cwd: tempDir,
594
- });
595
- expect(statusResult.exitCode).toBe(0);
596
- const statusJson = JSON.parse(statusResult.stdout);
597
- expect(statusJson.artifacts).toEqual([
598
- {
599
- id: 'specs',
600
- outputPath: 'specs/*/spec.md',
601
- status: 'done',
602
- },
603
- ]);
604
-
605
- const applyResult = await runCLI(
606
- ['instructions', 'apply', '--change', 'single-star-glob', '--json'],
607
- { cwd: tempDir }
608
- );
609
- expect(applyResult.exitCode).toBe(0);
610
- const applyJson = JSON.parse(applyResult.stdout);
611
- const resolvedSpecPath = canonical(specPath);
612
- expect(applyJson.state).toBe('ready');
613
- expect(applyJson.missingArtifacts).toBeUndefined();
614
- expect(applyJson.contextFiles).toEqual({
615
- specs: [resolvedSpecPath],
616
- });
617
- });
618
-
619
- it('shows schema instruction from apply block', async () => {
620
- await createTestChange('instr-apply', ['proposal', 'design', 'specs', 'tasks']);
621
-
622
- const result = await runCLI(['instructions', 'apply', '--change', 'instr-apply'], {
623
- cwd: tempDir,
624
- });
625
- expect(result.exitCode).toBe(0);
626
- // Should show the instruction from spec-driven schema apply block
627
- expect(result.stdout).toContain('work through pending tasks');
628
- });
629
-
630
- it('shows all_done state when all tasks are complete', async () => {
631
- const changeDir = await createTestChange('done-apply', [
632
- 'proposal',
633
- 'design',
634
- 'specs',
635
- 'tasks',
636
- ]);
637
- // Overwrite tasks with all completed
638
- await fs.writeFile(
639
- path.join(changeDir, 'tasks.md'),
640
- '## Tasks\n- [x] Task 1\n- [x] Task 2'
641
- );
642
-
643
- const result = await runCLI(['instructions', 'apply', '--change', 'done-apply'], {
644
- cwd: tempDir,
645
- });
646
- expect(result.exitCode).toBe(0);
647
- expect(result.stdout).toContain('complete ✓');
648
- expect(result.stdout).toContain('ready to be archived');
649
- });
650
-
651
- it('uses spec-driven schema apply configuration', async () => {
652
- // Create a spec-driven style change with all artifacts
653
- await createTestChange('apply-schema-test', ['proposal', 'design', 'specs', 'tasks']);
654
-
655
- const result = await runCLI(
656
- ['instructions', 'apply', '--change', 'apply-schema-test', '--schema', 'spec-driven'],
657
- { cwd: tempDir }
658
- );
659
- expect(result.exitCode).toBe(0);
660
- expect(result.stdout).toContain('Schema: spec-driven');
661
- });
662
-
663
- it('spec-driven schema uses apply block configuration', async () => {
664
- // Verify that spec-driven schema uses its apply block (requires: [tasks])
665
- await createTestChange('apply-config-test', ['proposal', 'design', 'specs', 'tasks']);
666
-
667
- const result = await runCLI(
668
- ['instructions', 'apply', '--change', 'apply-config-test', '--json'],
669
- { cwd: tempDir }
670
- );
671
- expect(result.exitCode).toBe(0);
672
-
673
- const json = JSON.parse(result.stdout);
674
- // spec-driven schema has apply block with requires: [tasks], so should be ready
675
- expect(json.schemaName).toBe('spec-driven');
676
- expect(json.state).toBe('ready');
677
- });
678
-
679
- it('fallback: requires all artifacts when schema has no apply block', async () => {
680
- // Create a minimal schema without an apply block in user schemas dir
681
- const userDataDir = path.join(tempDir, 'user-data');
682
- const noApplySchemaDir = path.join(userDataDir, 'openspec', 'schemas', 'no-apply');
683
- const templatesDir = path.join(noApplySchemaDir, 'templates');
684
- await fs.mkdir(templatesDir, { recursive: true });
685
-
686
- // Minimal schema with 2 artifacts, no apply block
687
- const schemaContent = `
688
- name: no-apply
689
- version: 1
690
- description: Test schema without apply block
691
- artifacts:
692
- - id: first
693
- generates: first.md
694
- description: First artifact
695
- template: first.md
696
- requires: []
697
- - id: second
698
- generates: second.md
699
- description: Second artifact
700
- template: second.md
701
- requires: [first]
702
- `;
703
- await fs.writeFile(path.join(noApplySchemaDir, 'schema.yaml'), schemaContent);
704
- await fs.writeFile(path.join(templatesDir, 'first.md'), '# First\n');
705
- await fs.writeFile(path.join(templatesDir, 'second.md'), '# Second\n');
706
-
707
- // Create a change with only the first artifact (missing second)
708
- const changeDir = path.join(changesDir, 'no-apply-test');
709
- await fs.mkdir(changeDir, { recursive: true });
710
- await fs.writeFile(path.join(changeDir, 'first.md'), '# First artifact content');
711
-
712
- // Run with XDG_DATA_HOME pointing to our temp user data dir
713
- const result = await runCLI(
714
- ['instructions', 'apply', '--change', 'no-apply-test', '--schema', 'no-apply', '--json'],
715
- {
716
- cwd: tempDir,
717
- env: { XDG_DATA_HOME: userDataDir },
718
- }
719
- );
720
- expect(result.exitCode).toBe(0);
721
-
722
- const json = JSON.parse(result.stdout);
723
- // Without apply block, fallback requires ALL artifacts - second is missing
724
- expect(json.schemaName).toBe('no-apply');
725
- expect(json.state).toBe('blocked');
726
- expect(json.missingArtifacts).toContain('second');
727
- });
728
-
729
- it('fallback: ready when all artifacts exist for schema without apply block', async () => {
730
- // Create a minimal schema without an apply block
731
- const userDataDir = path.join(tempDir, 'user-data-2');
732
- const noApplySchemaDir = path.join(userDataDir, 'openspec', 'schemas', 'no-apply-full');
733
- const templatesDir = path.join(noApplySchemaDir, 'templates');
734
- await fs.mkdir(templatesDir, { recursive: true });
735
-
736
- const schemaContent = `
737
- name: no-apply-full
738
- version: 1
739
- description: Test schema without apply block
740
- artifacts:
741
- - id: only
742
- generates: only.md
743
- description: Only artifact
744
- template: only.md
745
- requires: []
746
- `;
747
- await fs.writeFile(path.join(noApplySchemaDir, 'schema.yaml'), schemaContent);
748
- await fs.writeFile(path.join(templatesDir, 'only.md'), '# Only\n');
749
-
750
- // Create a change with the artifact present
751
- const changeDir = path.join(changesDir, 'no-apply-full-test');
752
- await fs.mkdir(changeDir, { recursive: true });
753
- await fs.writeFile(path.join(changeDir, 'only.md'), '# Content');
754
-
755
- const result = await runCLI(
756
- ['instructions', 'apply', '--change', 'no-apply-full-test', '--schema', 'no-apply-full', '--json'],
757
- {
758
- cwd: tempDir,
759
- env: { XDG_DATA_HOME: userDataDir },
760
- }
761
- );
762
- expect(result.exitCode).toBe(0);
763
-
764
- const json = JSON.parse(result.stdout);
765
- // All artifacts exist, should be ready with default instruction
766
- expect(json.schemaName).toBe('no-apply-full');
767
- expect(json.state).toBe('ready');
768
- expect(json.instruction).toContain('All required artifacts complete');
769
- });
770
- });
771
-
772
- describe('help text', () => {
773
- it('status command help shows description', async () => {
774
- const result = await runCLI(['status', '--help']);
775
- expect(result.exitCode).toBe(0);
776
- expect(result.stdout).toContain('Display artifact completion status');
777
- });
778
-
779
- it('instructions command help shows description', async () => {
780
- const result = await runCLI(['instructions', '--help']);
781
- expect(result.exitCode).toBe(0);
782
- expect(result.stdout).toContain('Output enriched instructions');
783
- });
784
-
785
- it('templates command help shows description', async () => {
786
- const result = await runCLI(['templates', '--help']);
787
- expect(result.exitCode).toBe(0);
788
- expect(result.stdout).toContain('Show resolved template paths');
789
- });
790
-
791
- it('new command help shows description', async () => {
792
- const result = await runCLI(['new', '--help']);
793
- expect(result.exitCode).toBe(0);
794
- expect(result.stdout).toContain('Create new items');
795
- });
796
- });
797
-
798
- describe('experimental command (deprecated alias for init)', () => {
799
- it('shows deprecation notice', async () => {
800
- const result = await runCLI(['experimental', '--tool', 'claude'], { cwd: tempDir });
801
- // May succeed or fail depending on setup, but should show deprecation notice
802
- const output = getOutput(result);
803
- expect(output).toContain('deprecated');
804
- });
805
-
806
- it('errors for unknown tool', async () => {
807
- const result = await runCLI(['experimental', '--tool', 'unknown-tool'], {
808
- cwd: tempDir,
809
- });
810
- expect(result.exitCode).toBe(1);
811
- const output = getOutput(result);
812
- expect(output).toContain('Invalid tool(s): unknown-tool');
813
- });
814
-
815
- it('errors for tool without skillsDir', async () => {
816
- // Using 'agents' which doesn't have skillsDir configured
817
- const result = await runCLI(['experimental', '--tool', 'agents'], {
818
- cwd: tempDir,
819
- });
820
- expect(result.exitCode).toBe(1);
821
- const output = getOutput(result);
822
- expect(output).toContain('Invalid tool(s): agents');
823
- });
824
-
825
- it('creates skills for Claude tool', async () => {
826
- const result = await runCLI(['experimental', '--tool', 'claude'], {
827
- cwd: tempDir,
828
- });
829
- expect(result.exitCode).toBe(0);
830
- const output = normalizePaths(getOutput(result));
831
- expect(output).toContain('Claude Code');
832
- expect(output).toContain('.claude/');
833
-
834
- // Verify skill files were created
835
- const skillFile = path.join(tempDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
836
- const stat = await fs.stat(skillFile);
837
- expect(stat.isFile()).toBe(true);
838
- });
839
-
840
- it('creates skills for Cursor tool', async () => {
841
- const result = await runCLI(['experimental', '--tool', 'cursor'], {
842
- cwd: tempDir,
843
- });
844
- expect(result.exitCode).toBe(0);
845
- const output = normalizePaths(getOutput(result));
846
- expect(output).toContain('Cursor');
847
- expect(output).toContain('.cursor/');
848
-
849
- // Verify skill files were created
850
- const skillFile = path.join(tempDir, '.cursor', 'skills', 'openspec-explore', 'SKILL.md');
851
- const stat = await fs.stat(skillFile);
852
- expect(stat.isFile()).toBe(true);
853
-
854
- // Verify commands were created with Cursor format
855
- const commandFile = path.join(tempDir, '.cursor', 'commands', 'opsx-explore.md');
856
- const content = await fs.readFile(commandFile, 'utf-8');
857
- expect(content).toContain('name: /opsx-explore');
858
- });
859
-
860
- it('creates skills for Windsurf tool', async () => {
861
- const result = await runCLI(['experimental', '--tool', 'windsurf'], {
862
- cwd: tempDir,
863
- });
864
- expect(result.exitCode).toBe(0);
865
- const output = normalizePaths(getOutput(result));
866
- expect(output).toContain('Windsurf');
867
- expect(output).toContain('.windsurf/');
868
-
869
- // Verify skill files were created
870
- const skillFile = path.join(tempDir, '.windsurf', 'skills', 'openspec-explore', 'SKILL.md');
871
- const stat = await fs.stat(skillFile);
872
- expect(stat.isFile()).toBe(true);
873
- });
874
- });
875
-
876
- describe('project config integration', () => {
877
- describe('new change uses config schema', () => {
878
- it('creates change with schema from project config', async () => {
879
- // Create project config with spec-driven schema
880
- // Note: changesDir is already at tempDir/openspec/changes (created in beforeEach)
881
- await fs.writeFile(
882
- path.join(tempDir, 'openspec', 'config.yaml'),
883
- 'schema: spec-driven\n'
884
- );
885
-
886
- // Create a new change without specifying schema
887
- const result = await runCLI(['new', 'change', 'test-change'], { cwd: tempDir, timeoutMs: 30000 });
888
- expect(result.exitCode).toBe(0);
889
-
890
- // Verify the change was created with spec-driven schema
891
- const metadataPath = path.join(changesDir, 'test-change', '.openspec.yaml');
892
- const metadata = await fs.readFile(metadataPath, 'utf-8');
893
- expect(metadata).toContain('schema: spec-driven');
894
- }, 60000);
895
-
896
- it('CLI schema overrides config schema', async () => {
897
- // Create project config with spec-driven schema
898
- // Note: openspec directory already exists (from changesDir creation in beforeEach)
899
- await fs.writeFile(
900
- path.join(tempDir, 'openspec', 'config.yaml'),
901
- 'schema: spec-driven\n'
902
- );
903
-
904
- // Create change with explicit schema
905
- const result = await runCLI(
906
- ['new', 'change', 'override-test', '--schema', 'spec-driven'],
907
- { cwd: tempDir, timeoutMs: 30000 }
908
- );
909
- expect(result.exitCode).toBe(0);
910
-
911
- // Verify the change uses the CLI-specified schema
912
- const metadataPath = path.join(changesDir, 'override-test', '.openspec.yaml');
913
- const metadata = await fs.readFile(metadataPath, 'utf-8');
914
- expect(metadata).toContain('schema: spec-driven');
915
- }, 60000);
916
- });
917
-
918
- describe('instructions command with config', () => {
919
- it('injects context and rules from config into instructions', async () => {
920
- // Create project config with context and rules
921
- // Note: openspec directory already exists (from changesDir creation in beforeEach)
922
- await fs.writeFile(
923
- path.join(tempDir, 'openspec', 'config.yaml'),
924
- `schema: spec-driven
925
- context: |
926
- Tech stack: TypeScript, React
927
- API style: RESTful
928
- rules:
929
- proposal:
930
- - Include rollback plan
931
- - Identify affected teams
932
- `
933
- );
934
-
935
- // Create a test change
936
- await createTestChange('config-test');
937
-
938
- // Get instructions for proposal
939
- const result = await runCLI(
940
- ['instructions', 'proposal', '--change', 'config-test'],
941
- { cwd: tempDir, timeoutMs: 30000 }
942
- );
943
- expect(result.exitCode).toBe(0);
944
-
945
- // Verify context is injected
946
- expect(result.stdout).toContain('Tech stack: TypeScript, React');
947
- expect(result.stdout).toContain('API style: RESTful');
948
-
949
- // Verify rules are injected for proposal
950
- expect(result.stdout).toContain('Include rollback plan');
951
- expect(result.stdout).toContain('Identify affected teams');
952
- }, 60000);
953
-
954
- it('does not inject rules for non-matching artifact', async () => {
955
- // Create project config with rules only for proposal
956
- // Note: openspec directory already exists (from changesDir creation in beforeEach)
957
- await fs.writeFile(
958
- path.join(tempDir, 'openspec', 'config.yaml'),
959
- `schema: spec-driven
960
- rules:
961
- proposal:
962
- - Include rollback plan
963
- `
964
- );
965
-
966
- // Create a test change
967
- await createTestChange('non-matching-test');
968
-
969
- // Get instructions for design (not proposal)
970
- const result = await runCLI(
971
- ['instructions', 'design', '--change', 'non-matching-test'],
972
- { cwd: tempDir, timeoutMs: 30000 }
973
- );
974
- expect(result.exitCode).toBe(0);
975
-
976
- // Verify rules are NOT injected for design
977
- expect(result.stdout).not.toContain('Include rollback plan');
978
- }, 60000);
979
- });
980
-
981
- describe('backwards compatibility', () => {
982
- it('existing changes work without config file', async () => {
983
- // Create change without any config file
984
- await createTestChange('no-config-change', ['proposal']);
985
-
986
- // Status command should work
987
- const statusResult = await runCLI(
988
- ['status', '--change', 'no-config-change'],
989
- { cwd: tempDir, timeoutMs: 30000 }
990
- );
991
- expect(statusResult.exitCode).toBe(0);
992
- expect(statusResult.stdout).toContain('no-config-change');
993
- expect(statusResult.stdout).toContain('spec-driven'); // Default schema
994
-
995
- // Instructions command should work
996
- const instrResult = await runCLI(
997
- ['instructions', 'design', '--change', 'no-config-change'],
998
- { cwd: tempDir, timeoutMs: 30000 }
999
- );
1000
- expect(instrResult.exitCode).toBe(0);
1001
- expect(instrResult.stdout).toContain('<artifact');
1002
- }, 60000);
1003
-
1004
- it('changes with metadata work without config file', async () => {
1005
- // Create change with explicit schema in metadata
1006
- const changeDir = await createTestChange('metadata-only-change');
1007
- await fs.writeFile(
1008
- path.join(changeDir, '.openspec.yaml'),
1009
- 'schema: spec-driven\ncreated: "2025-01-05"\n'
1010
- );
1011
-
1012
- // Status should use schema from metadata
1013
- const result = await runCLI(
1014
- ['status', '--change', 'metadata-only-change'],
1015
- { cwd: tempDir, timeoutMs: 30000 }
1016
- );
1017
- expect(result.exitCode).toBe(0);
1018
- expect(result.stdout).toContain('spec-driven');
1019
- }, 60000);
1020
- });
1021
-
1022
- describe('config changes reflected immediately', () => {
1023
- it('config changes are reflected without restart', async () => {
1024
- // Create initial config
1025
- // Note: openspec directory already exists (from changesDir creation in beforeEach)
1026
- await fs.writeFile(
1027
- path.join(tempDir, 'openspec', 'config.yaml'),
1028
- `schema: spec-driven
1029
- context: Initial context
1030
- `
1031
- );
1032
-
1033
- // Create a test change
1034
- await createTestChange('immediate-test');
1035
-
1036
- // Get instructions - should have initial context
1037
- const result1 = await runCLI(
1038
- ['instructions', 'proposal', '--change', 'immediate-test'],
1039
- { cwd: tempDir, timeoutMs: 30000 }
1040
- );
1041
- expect(result1.exitCode).toBe(0);
1042
- expect(result1.stdout).toContain('Initial context');
1043
-
1044
- // Update config
1045
- await fs.writeFile(
1046
- path.join(tempDir, 'openspec', 'config.yaml'),
1047
- `schema: spec-driven
1048
- context: Updated context
1049
- `
1050
- );
1051
-
1052
- // Get instructions again - should have updated context
1053
- const result2 = await runCLI(
1054
- ['instructions', 'proposal', '--change', 'immediate-test'],
1055
- { cwd: tempDir, timeoutMs: 30000 }
1056
- );
1057
- expect(result2.exitCode).toBe(0);
1058
- expect(result2.stdout).toContain('Updated context');
1059
- expect(result2.stdout).not.toContain('Initial context');
1060
- }, 60000);
1061
- });
1062
- });
1063
- });