sauron-cli 1.3.0 → 1.4.1

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 (655) hide show
  1. package/.genesis/prompts/CLI Init_ Atualiza/303/247/303/243o com Mem/303/263ria.md" +133 -0
  2. package/.genesis/prompts/prompt-sauron-update-intelligence.md +20 -0
  3. package/README.md +4 -2
  4. package/dist/index.js +59 -15
  5. package/package.json +1 -1
  6. package/templates/.agents/rules/memory.md +68 -68
  7. package/templates/.agents/skills/wiki/SKILL.md +14 -14
  8. package/55ea973d-e255-4f08-a313-a5d68243bd2d.png +0 -0
  9. package/OpenSpec-main/.actrc +0 -1
  10. package/OpenSpec-main/.changeset/README.md +0 -97
  11. package/OpenSpec-main/.changeset/config.json +0 -15
  12. package/OpenSpec-main/.coderabbit.yaml +0 -11
  13. package/OpenSpec-main/.devcontainer/README.md +0 -92
  14. package/OpenSpec-main/.devcontainer/devcontainer.json +0 -68
  15. package/OpenSpec-main/.github/CODEOWNERS +0 -2
  16. package/OpenSpec-main/.github/workflows/README.md +0 -20
  17. package/OpenSpec-main/.github/workflows/ci.yml +0 -346
  18. package/OpenSpec-main/.github/workflows/release-prepare.yml +0 -60
  19. package/OpenSpec-main/CHANGELOG.md +0 -594
  20. package/OpenSpec-main/LICENSE +0 -22
  21. package/OpenSpec-main/MAINTAINERS.md +0 -17
  22. package/OpenSpec-main/README.md +0 -206
  23. package/OpenSpec-main/README_OLD.md +0 -475
  24. package/OpenSpec-main/assets/openspec_bg.png +0 -0
  25. package/OpenSpec-main/assets/openspec_dashboard.png +0 -0
  26. package/OpenSpec-main/assets/openspec_pixel_dark.svg +0 -89
  27. package/OpenSpec-main/assets/openspec_pixel_light.svg +0 -89
  28. package/OpenSpec-main/bin/openspec.js +0 -5
  29. package/OpenSpec-main/build.js +0 -31
  30. package/OpenSpec-main/eslint.config.js +0 -42
  31. package/OpenSpec-main/flake.lock +0 -27
  32. package/OpenSpec-main/flake.nix +0 -114
  33. package/OpenSpec-main/openspec/changes/IMPLEMENTATION_ORDER.md +0 -68
  34. package/OpenSpec-main/openspec/changes/add-artifact-regeneration-support/proposal.md +0 -136
  35. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/.openspec.yaml +0 -2
  36. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/proposal.md +0 -93
  37. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/change-creation/spec.md +0 -15
  38. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/change-stacking-workflow/spec.md +0 -65
  39. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/cli-change/spec.md +0 -27
  40. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/openspec-conventions/spec.md +0 -29
  41. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/tasks.md +0 -39
  42. package/OpenSpec-main/openspec/changes/add-global-install-scope/.openspec.yaml +0 -2
  43. package/OpenSpec-main/openspec/changes/add-global-install-scope/design.md +0 -161
  44. package/OpenSpec-main/openspec/changes/add-global-install-scope/proposal.md +0 -101
  45. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/ai-tool-paths/spec.md +0 -35
  46. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-config/spec.md +0 -21
  47. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-init/spec.md +0 -28
  48. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-update/spec.md +0 -34
  49. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/command-generation/spec.md +0 -22
  50. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/global-config/spec.md +0 -24
  51. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/installation-scope/spec.md +0 -71
  52. package/OpenSpec-main/openspec/changes/add-global-install-scope/tasks.md +0 -61
  53. package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/.openspec.yaml +0 -2
  54. package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/proposal.md +0 -45
  55. package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/specs/developer-qa-workflow/spec.md +0 -49
  56. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/.openspec.yaml +0 -2
  57. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/proposal.md +0 -111
  58. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/specs/cli-init/spec.md +0 -121
  59. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/specs/cli-update/spec.md +0 -48
  60. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/tasks.md +0 -53
  61. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/design.md +0 -86
  62. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/proposal.md +0 -29
  63. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/specs/cli-update/spec.md +0 -59
  64. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/tasks.md +0 -20
  65. package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/proposal.md +0 -20
  66. package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/specs/cli-list/spec.md +0 -69
  67. package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/tasks.md +0 -26
  68. package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/design.md +0 -64
  69. package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/proposal.md +0 -18
  70. package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/tasks.md +0 -25
  71. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/design.md +0 -104
  72. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/proposal.md +0 -30
  73. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/specs/cli-init/spec.md +0 -148
  74. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/tasks.md +0 -38
  75. package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/proposal.md +0 -24
  76. package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/specs/openspec-conventions/spec.md +0 -120
  77. package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/tasks.md +0 -38
  78. package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/proposal.md +0 -13
  79. package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/specs/openspec-docs/README.md +0 -472
  80. package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/tasks.md +0 -9
  81. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/proposal.md +0 -15
  82. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/specs/cli-archive/spec.md +0 -111
  83. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/tasks.md +0 -44
  84. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/proposal.md +0 -19
  85. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/specs/cli-diff/spec.md +0 -77
  86. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/tasks.md +0 -23
  87. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/design.md +0 -56
  88. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/proposal.md +0 -17
  89. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/specs/cli-change/spec.md +0 -48
  90. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/specs/cli-list/spec.md +0 -12
  91. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/tasks.md +0 -34
  92. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/proposal.md +0 -20
  93. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-change/spec.md +0 -23
  94. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-show/spec.md +0 -83
  95. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-spec/spec.md +0 -23
  96. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/tasks.md +0 -142
  97. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/proposal.md +0 -13
  98. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/specs/cli-archive/spec.md +0 -191
  99. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/tasks.md +0 -57
  100. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/design.md +0 -45
  101. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/proposal.md +0 -19
  102. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/specs/cli-spec/spec.md +0 -43
  103. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/tasks.md +0 -22
  104. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/design.md +0 -104
  105. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/proposal.md +0 -22
  106. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/specs/cli-archive/spec.md +0 -18
  107. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/specs/cli-diff/spec.md +0 -12
  108. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/tasks.md +0 -59
  109. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/proposal.md +0 -93
  110. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/cli-archive/spec.md +0 -48
  111. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/cli-diff/spec.md +0 -45
  112. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/openspec-conventions/spec.md +0 -101
  113. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/tasks.md +0 -55
  114. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/design.md +0 -19
  115. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/proposal.md +0 -67
  116. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/specs/cli-list/spec.md +0 -57
  117. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/specs/openspec-conventions/spec.md +0 -23
  118. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/tasks.md +0 -27
  119. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/proposal.md +0 -20
  120. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-change/spec.md +0 -22
  121. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-spec/spec.md +0 -23
  122. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-validate/spec.md +0 -149
  123. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/tasks.md +0 -81
  124. package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/proposal.md +0 -40
  125. package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/specs/cli-update/spec.md +0 -23
  126. package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/tasks.md +0 -21
  127. package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/proposal.md +0 -25
  128. package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/specs/cli-validate/spec.md +0 -55
  129. package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/tasks.md +0 -21
  130. package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/proposal.md +0 -36
  131. package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/specs/openspec-conventions/spec.md +0 -192
  132. package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/tasks.md +0 -19
  133. package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/proposal.md +0 -38
  134. package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/specs/cli-view/spec.md +0 -109
  135. package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/tasks.md +0 -47
  136. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/proposal.md +0 -28
  137. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/specs/cli-init/spec.md +0 -71
  138. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/specs/cli-update/spec.md +0 -41
  139. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/tasks.md +0 -17
  140. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/proposal.md +0 -35
  141. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/specs/cli-init/spec.md +0 -45
  142. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/tasks.md +0 -16
  143. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/proposal.md +0 -119
  144. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/specs/cli-init/spec.md +0 -21
  145. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/specs/cli-update/spec.md +0 -22
  146. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/tasks.md +0 -20
  147. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-cli-e2e-plan/proposal.md +0 -19
  148. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-cli-e2e-plan/tasks.md +0 -9
  149. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-deterministic-tests/proposal.md +0 -78
  150. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-deterministic-tests/tasks.md +0 -25
  151. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/proposal.md +0 -13
  152. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/specs/cli-init/spec.md +0 -92
  153. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/tasks.md +0 -12
  154. package/OpenSpec-main/openspec/changes/archive/2025-09-29-remove-diff-command/proposal.md +0 -81
  155. package/OpenSpec-main/openspec/changes/archive/2025-09-29-remove-diff-command/tasks.md +0 -37
  156. package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/proposal.md +0 -25
  157. package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/specs/cli-view/spec.md +0 -9
  158. package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/tasks.md +0 -8
  159. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/proposal.md +0 -29
  160. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/cli-init/spec.md +0 -40
  161. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/cli-update/spec.md +0 -22
  162. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/openspec-conventions/spec.md +0 -27
  163. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/tasks.md +0 -22
  164. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/design.md +0 -130
  165. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/proposal.md +0 -117
  166. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/tasks.md +0 -69
  167. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/proposal.md +0 -19
  168. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/specs/cli-validate/spec.md +0 -9
  169. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/tasks.md +0 -11
  170. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/proposal.md +0 -25
  171. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/specs/cli-init/spec.md +0 -56
  172. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/specs/cli-update/spec.md +0 -41
  173. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/tasks.md +0 -19
  174. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/proposal.md +0 -25
  175. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/specs/cli-init/spec.md +0 -48
  176. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/specs/cli-update/spec.md +0 -48
  177. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/tasks.md +0 -30
  178. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/proposal.md +0 -17
  179. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/specs/cli-init/spec.md +0 -43
  180. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/specs/cli-update/spec.md +0 -27
  181. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/tasks.md +0 -15
  182. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/proposal.md +0 -12
  183. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/specs/cli-init/spec.md +0 -39
  184. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/tasks.md +0 -17
  185. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/proposal.md +0 -17
  186. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/specs/cli-init/spec.md +0 -42
  187. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/specs/cli-update/spec.md +0 -27
  188. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/tasks.md +0 -17
  189. package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/proposal.md +0 -12
  190. package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/specs/cli-validate/spec.md +0 -39
  191. package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/tasks.md +0 -12
  192. package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/proposal.md +0 -12
  193. package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/specs/docs-agent-instructions/spec.md +0 -33
  194. package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/tasks.md +0 -11
  195. package/OpenSpec-main/openspec/changes/archive/2025-10-14-slim-root-agents-file/proposal.md +0 -13
  196. package/OpenSpec-main/openspec/changes/archive/2025-10-14-slim-root-agents-file/tasks.md +0 -15
  197. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/proposal.md +0 -14
  198. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/specs/cli-init/spec.md +0 -10
  199. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/tasks.md +0 -8
  200. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/proposal.md +0 -15
  201. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/specs/cli-init/spec.md +0 -32
  202. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/specs/cli-update/spec.md +0 -10
  203. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/tasks.md +0 -11
  204. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-release-automation/proposal.md +0 -49
  205. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-release-automation/tasks.md +0 -12
  206. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/proposal.md +0 -17
  207. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/specs/cli-update/spec.md +0 -32
  208. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/tasks.md +0 -15
  209. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/proposal.md +0 -15
  210. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/specs/cli-init/spec.md +0 -97
  211. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/tasks.md +0 -19
  212. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/proposal.md +0 -13
  213. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/specs/cli-init/spec.md +0 -67
  214. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/tasks.md +0 -7
  215. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/proposal.md +0 -12
  216. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/specs/cli-init/spec.md +0 -54
  217. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/specs/cli-update/spec.md +0 -54
  218. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/tasks.md +0 -11
  219. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/design.md +0 -525
  220. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/proposal.md +0 -29
  221. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/specs/cli-completion/spec.md +0 -300
  222. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/tasks.md +0 -81
  223. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/design.md +0 -105
  224. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/proposal.md +0 -20
  225. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/specs/global-config/spec.md +0 -76
  226. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/tasks.md +0 -26
  227. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/design.md +0 -89
  228. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/proposal.md +0 -60
  229. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/specs/cli-config/spec.md +0 -213
  230. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/tasks.md +0 -28
  231. package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/proposal.md +0 -15
  232. package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/specs/cli-completion/spec.md +0 -328
  233. package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/tasks.md +0 -49
  234. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/design.md +0 -197
  235. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/proposal.md +0 -18
  236. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/specs/artifact-graph/spec.md +0 -103
  237. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/tasks.md +0 -61
  238. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/design.md +0 -74
  239. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/proposal.md +0 -45
  240. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/specs/change-creation/spec.md +0 -63
  241. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/tasks.md +0 -30
  242. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/design.md +0 -112
  243. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/proposal.md +0 -33
  244. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/specs/cli-artifact-workflow/spec.md +0 -153
  245. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/tasks.md +0 -48
  246. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/design.md +0 -149
  247. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/proposal.md +0 -20
  248. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/specs/instruction-loader/spec.md +0 -70
  249. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/tasks.md +0 -13
  250. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/design.md +0 -129
  251. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/proposal.md +0 -20
  252. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/specs/artifact-graph/spec.md +0 -49
  253. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/tasks.md +0 -32
  254. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/design.md +0 -151
  255. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/proposal.md +0 -101
  256. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/specs/cli-artifact-workflow/spec.md +0 -109
  257. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/specs/cli-view/spec.md +0 -60
  258. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/tasks.md +0 -25
  259. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/proposal.md +0 -11
  260. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-init/spec.md +0 -105
  261. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-update/spec.md +0 -92
  262. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/tasks.md +0 -12
  263. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/proposal.md +0 -13
  264. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-init/spec.md +0 -105
  265. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-update/spec.md +0 -92
  266. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/tasks.md +0 -13
  267. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-agent-schema-selection/proposal.md +0 -26
  268. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-agent-schema-selection/tasks.md +0 -32
  269. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/design.md +0 -147
  270. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/proposal.md +0 -29
  271. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/specs/cli-artifact-workflow/spec.md +0 -98
  272. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/tasks.md +0 -29
  273. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/.openspec.yaml +0 -2
  274. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/design.md +0 -77
  275. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/proposal.md +0 -32
  276. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/specs/specs-sync-skill/spec.md +0 -67
  277. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/tasks.md +0 -40
  278. package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/proposal.md +0 -138
  279. package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/specs/cli-artifact-workflow/spec.md +0 -60
  280. package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/tasks.md +0 -35
  281. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/.openspec.yaml +0 -2
  282. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/design.md +0 -84
  283. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/proposal.md +0 -28
  284. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/specs/opsx-archive-skill/spec.md +0 -122
  285. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/tasks.md +0 -23
  286. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/.openspec.yaml +0 -2
  287. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/design.md +0 -94
  288. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/proposal.md +0 -25
  289. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/specs/nix-flake-support/spec.md +0 -79
  290. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/tasks.md +0 -65
  291. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/.openspec.yaml +0 -2
  292. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/design.md +0 -117
  293. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/proposal.md +0 -23
  294. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/specs/flake-update-script/spec.md +0 -93
  295. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/tasks.md +0 -55
  296. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/.openspec.yaml +0 -2
  297. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/design.md +0 -175
  298. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/proposal.md +0 -37
  299. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/specs/global-config/spec.md +0 -21
  300. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/specs/telemetry/spec.md +0 -116
  301. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/tasks.md +0 -47
  302. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/proposal.md +0 -16
  303. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/specs/cli-init/spec.md +0 -75
  304. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/specs/cli-update/spec.md +0 -56
  305. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/tasks.md +0 -6
  306. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/design.md +0 -206
  307. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/proposal.md +0 -21
  308. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/specs/ci-nix-validation/spec.md +0 -104
  309. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/tasks.md +0 -49
  310. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/.openspec.yaml +0 -2
  311. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/README.md +0 -3
  312. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/design.md +0 -70
  313. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/proposal.md +0 -32
  314. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/specs/no-changes.md +0 -9
  315. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/tasks.md +0 -22
  316. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/proposal.md +0 -20
  317. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/specs/cli-feedback/spec.md +0 -188
  318. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/tasks.md +0 -30
  319. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/.openspec.yaml +0 -2
  320. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/design.md +0 -115
  321. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/proposal.md +0 -27
  322. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/specs/opsx-onboard-skill/spec.md +0 -162
  323. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/tasks.md +0 -21
  324. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/design.md +0 -96
  325. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/proposal.md +0 -48
  326. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/specs/opsx-verify-skill/spec.md +0 -190
  327. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/tasks.md +0 -15
  328. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/.openspec.yaml +0 -2
  329. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/design.md +0 -193
  330. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/proposal.md +0 -32
  331. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/specs/cli-init/spec.md +0 -176
  332. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/specs/legacy-cleanup/spec.md +0 -158
  333. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/tasks.md +0 -67
  334. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/.openspec.yaml +0 -2
  335. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/design.md +0 -144
  336. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/proposal.md +0 -36
  337. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/ai-tool-paths/spec.md +0 -63
  338. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/cli-artifact-workflow/spec.md +0 -60
  339. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/command-generation/spec.md +0 -98
  340. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/tasks.md +0 -55
  341. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/.openspec.yaml +0 -2
  342. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/design.md +0 -665
  343. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/proposal.md +0 -774
  344. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/config-loading/spec.md +0 -119
  345. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/context-injection/spec.md +0 -51
  346. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/rules-injection/spec.md +0 -99
  347. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/schema-resolution/spec.md +0 -83
  348. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/tasks.md +0 -72
  349. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/.openspec.yaml +0 -2
  350. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/design.md +0 -117
  351. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/proposal.md +0 -167
  352. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/specs/schema-resolution/spec.md +0 -88
  353. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/tasks.md +0 -28
  354. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/.openspec.yaml +0 -2
  355. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/design.md +0 -113
  356. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/proposal.md +0 -55
  357. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-fork-command/spec.md +0 -66
  358. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-init-command/spec.md +0 -71
  359. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-validate-command/spec.md +0 -86
  360. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-which-command/spec.md +0 -65
  361. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/tasks.md +0 -67
  362. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/.openspec.yaml +0 -2
  363. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/README.md +0 -3
  364. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/design.md +0 -85
  365. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/proposal.md +0 -38
  366. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/specs/ai-tool-paths/spec.md +0 -12
  367. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/specs/cli-init/spec.md +0 -37
  368. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/tasks.md +0 -22
  369. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/design.md +0 -208
  370. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/proposal.md +0 -142
  371. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/specs/openspec-conventions/spec.md +0 -29
  372. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/specs/workspace-foundation/spec.md +0 -199
  373. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/tasks.md +0 -56
  374. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/design.md +0 -356
  375. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/proposal.md +0 -128
  376. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/cli-artifact-workflow/spec.md +0 -24
  377. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/workspace-foundation/spec.md +0 -35
  378. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/workspace-links/spec.md +0 -356
  379. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/tasks.md +0 -121
  380. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/design.md +0 -266
  381. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/proposal.md +0 -65
  382. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/specs/workspace-foundation/spec.md +0 -76
  383. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/specs/workspace-open/spec.md +0 -199
  384. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/tasks.md +0 -89
  385. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/design.md +0 -242
  386. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/proposal.md +0 -78
  387. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/artifact-graph/spec.md +0 -36
  388. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/change-creation/spec.md +0 -42
  389. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-artifact-workflow/spec.md +0 -100
  390. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-config/spec.md +0 -55
  391. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-update/spec.md +0 -21
  392. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/openspec-conventions/spec.md +0 -32
  393. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/schema-resolution/spec.md +0 -25
  394. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/workspace-change-planning/spec.md +0 -67
  395. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/workspace-links/spec.md +0 -163
  396. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/tasks.md +0 -133
  397. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/.openspec.yaml +0 -2
  398. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/design.md +0 -48
  399. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/proposal.md +0 -26
  400. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/specs/command-generation/spec.md +0 -63
  401. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/tasks.md +0 -19
  402. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/.openspec.yaml +0 -2
  403. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/design.md +0 -38
  404. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/proposal.md +0 -25
  405. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/specs/graceful-status-empty/spec.md +0 -27
  406. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/tasks.md +0 -16
  407. package/OpenSpec-main/openspec/changes/schema-alias-support/.openspec.yaml +0 -2
  408. package/OpenSpec-main/openspec/changes/schema-alias-support/proposal.md +0 -28
  409. package/OpenSpec-main/openspec/changes/simplify-skill-installation/.openspec.yaml +0 -2
  410. package/OpenSpec-main/openspec/changes/simplify-skill-installation/design.md +0 -288
  411. package/OpenSpec-main/openspec/changes/simplify-skill-installation/proposal.md +0 -202
  412. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/cli-init/spec.md +0 -199
  413. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/cli-update/spec.md +0 -177
  414. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/profiles/spec.md +0 -142
  415. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/propose-workflow/spec.md +0 -42
  416. package/OpenSpec-main/openspec/changes/simplify-skill-installation/tasks.md +0 -132
  417. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/.openspec.yaml +0 -2
  418. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/design.md +0 -149
  419. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/proposal.md +0 -47
  420. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/specs/template-artifact-pipeline/spec.md +0 -89
  421. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/tasks.md +0 -41
  422. package/OpenSpec-main/openspec/changes/workspace-agent-guidance/.openspec.yaml +0 -2
  423. package/OpenSpec-main/openspec/changes/workspace-agent-guidance/proposal.md +0 -100
  424. package/OpenSpec-main/openspec/changes/workspace-apply-repo-slice/proposal.md +0 -58
  425. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/HISTORICAL_DIRECTION.md +0 -511
  426. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/POC_REFERENCE_GUIDE.md +0 -266
  427. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/README.md +0 -107
  428. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/START_HERE.md +0 -105
  429. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/proposal.md +0 -62
  430. package/OpenSpec-main/openspec/changes/workspace-verify-and-archive/proposal.md +0 -57
  431. package/OpenSpec-main/openspec/config.yaml +0 -36
  432. package/OpenSpec-main/openspec/explorations/explore-workflow-ux.md +0 -116
  433. package/OpenSpec-main/openspec/explorations/workspace-architecture.md +0 -857
  434. package/OpenSpec-main/openspec/explorations/workspace-roadmap.md +0 -367
  435. package/OpenSpec-main/openspec/explorations/workspace-user-journeys.md +0 -2259
  436. package/OpenSpec-main/openspec/explorations/workspace-ux-simplification.md +0 -491
  437. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/.initiative.yaml +0 -27
  438. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/README.md +0 -33
  439. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/decisions.md +0 -204
  440. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/direction.md +0 -447
  441. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/questions.md +0 -23
  442. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/roadmap.md +0 -759
  443. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/tasks.md +0 -308
  444. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/evidence.md +0 -154
  445. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/plan.md +0 -90
  446. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/tasks.md +0 -44
  447. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/evidence.md +0 -68
  448. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/plan.md +0 -80
  449. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/tasks.md +0 -23
  450. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/evidence.md +0 -43
  451. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/plan.md +0 -85
  452. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/tasks.md +0 -17
  453. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/evidence.md +0 -77
  454. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/plan.md +0 -198
  455. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/tasks.md +0 -14
  456. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/evidence.md +0 -99
  457. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/plan.md +0 -236
  458. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/tasks.md +0 -21
  459. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/evidence.md +0 -97
  460. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/plan.md +0 -333
  461. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/tasks.md +0 -29
  462. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/evidence.md +0 -97
  463. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/plan.md +0 -184
  464. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/tasks.md +0 -27
  465. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/evidence.md +0 -239
  466. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/plan.md +0 -279
  467. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/tasks.md +0 -22
  468. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/decision-review.md +0 -64
  469. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/evidence.md +0 -106
  470. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/plan.md +0 -141
  471. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/tasks.md +0 -22
  472. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/10-let-workspaces-open-initiatives/plan.md +0 -430
  473. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/10-let-workspaces-open-initiatives/tasks.md +0 -43
  474. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/notes.md +0 -289
  475. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/plan.md +0 -39
  476. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/tasks.md +0 -8
  477. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/evidence.md +0 -45
  478. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/plan.md +0 -150
  479. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/tasks.md +0 -23
  480. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/evidence.md +0 -25
  481. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/plan.md +0 -98
  482. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/tasks.md +0 -25
  483. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/14-workspaces-beta-guide-split/plan.md +0 -37
  484. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/14-workspaces-beta-guide-split/tasks.md +0 -9
  485. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/evidence.md +0 -140
  486. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/plan.md +0 -344
  487. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/tasks.md +0 -39
  488. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/16-add-escalation-ux/plan.md +0 -26
  489. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/16-add-escalation-ux/tasks.md +0 -7
  490. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/17-harden-team-shared-coordination/plan.md +0 -25
  491. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/17-harden-team-shared-coordination/tasks.md +0 -7
  492. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/evidence.md +0 -397
  493. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/plan.md +0 -180
  494. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/tasks.md +0 -28
  495. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/plan.md +0 -62
  496. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/tasks.md +0 -16
  497. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/evidence.md +0 -47
  498. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/plan.md +0 -90
  499. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/tasks.md +0 -18
  500. package/OpenSpec-main/openspec/specs/ai-tool-paths/spec.md +0 -63
  501. package/OpenSpec-main/openspec/specs/artifact-graph/spec.md +0 -165
  502. package/OpenSpec-main/openspec/specs/change-creation/spec.md +0 -108
  503. package/OpenSpec-main/openspec/specs/ci-nix-validation/spec.md +0 -107
  504. package/OpenSpec-main/openspec/specs/cli-archive/spec.md +0 -210
  505. package/OpenSpec-main/openspec/specs/cli-artifact-workflow/spec.md +0 -398
  506. package/OpenSpec-main/openspec/specs/cli-change/spec.md +0 -92
  507. package/OpenSpec-main/openspec/specs/cli-completion/spec.md +0 -432
  508. package/OpenSpec-main/openspec/specs/cli-config/spec.md +0 -318
  509. package/OpenSpec-main/openspec/specs/cli-feedback/spec.md +0 -193
  510. package/OpenSpec-main/openspec/specs/cli-init/spec.md +0 -269
  511. package/OpenSpec-main/openspec/specs/cli-list/spec.md +0 -103
  512. package/OpenSpec-main/openspec/specs/cli-show/spec.md +0 -86
  513. package/OpenSpec-main/openspec/specs/cli-spec/spec.md +0 -88
  514. package/OpenSpec-main/openspec/specs/cli-update/spec.md +0 -229
  515. package/OpenSpec-main/openspec/specs/cli-validate/spec.md +0 -219
  516. package/OpenSpec-main/openspec/specs/cli-view/spec.md +0 -129
  517. package/OpenSpec-main/openspec/specs/command-generation/spec.md +0 -97
  518. package/OpenSpec-main/openspec/specs/config-loading/spec.md +0 -122
  519. package/OpenSpec-main/openspec/specs/context-injection/spec.md +0 -53
  520. package/OpenSpec-main/openspec/specs/docs-agent-instructions/spec.md +0 -62
  521. package/OpenSpec-main/openspec/specs/global-config/spec.md +0 -101
  522. package/OpenSpec-main/openspec/specs/instruction-loader/spec.md +0 -70
  523. package/OpenSpec-main/openspec/specs/legacy-cleanup/spec.md +0 -163
  524. package/OpenSpec-main/openspec/specs/openspec-conventions/spec.md +0 -556
  525. package/OpenSpec-main/openspec/specs/opsx-archive-skill/spec.md +0 -128
  526. package/OpenSpec-main/openspec/specs/opsx-onboard-skill/spec.md +0 -167
  527. package/OpenSpec-main/openspec/specs/opsx-verify-skill/spec.md +0 -189
  528. package/OpenSpec-main/openspec/specs/rules-injection/spec.md +0 -102
  529. package/OpenSpec-main/openspec/specs/schema-fork-command/spec.md +0 -71
  530. package/OpenSpec-main/openspec/specs/schema-init-command/spec.md +0 -76
  531. package/OpenSpec-main/openspec/specs/schema-resolution/spec.md +0 -201
  532. package/OpenSpec-main/openspec/specs/schema-validate-command/spec.md +0 -91
  533. package/OpenSpec-main/openspec/specs/schema-which-command/spec.md +0 -70
  534. package/OpenSpec-main/openspec/specs/specs-sync-skill/spec.md +0 -72
  535. package/OpenSpec-main/openspec/specs/telemetry/spec.md +0 -122
  536. package/OpenSpec-main/openspec/specs/workspace-change-planning/spec.md +0 -71
  537. package/OpenSpec-main/openspec/specs/workspace-foundation/spec.md +0 -279
  538. package/OpenSpec-main/openspec/specs/workspace-links/spec.md +0 -529
  539. package/OpenSpec-main/openspec/specs/workspace-open/spec.md +0 -205
  540. package/OpenSpec-main/openspec-parallel-merge-plan.md +0 -98
  541. package/OpenSpec-main/package-lock.json +0 -4978
  542. package/OpenSpec-main/package.json +0 -84
  543. package/OpenSpec-main/pnpm-lock.yaml +0 -3187
  544. package/OpenSpec-main/schemas/spec-driven/schema.yaml +0 -153
  545. package/OpenSpec-main/schemas/spec-driven/templates/design.md +0 -19
  546. package/OpenSpec-main/schemas/spec-driven/templates/proposal.md +0 -23
  547. package/OpenSpec-main/schemas/spec-driven/templates/spec.md +0 -8
  548. package/OpenSpec-main/schemas/spec-driven/templates/tasks.md +0 -9
  549. package/OpenSpec-main/schemas/workspace-planning/schema.yaml +0 -72
  550. package/OpenSpec-main/schemas/workspace-planning/templates/design.md +0 -33
  551. package/OpenSpec-main/schemas/workspace-planning/templates/proposal.md +0 -28
  552. package/OpenSpec-main/schemas/workspace-planning/templates/spec.md +0 -9
  553. package/OpenSpec-main/schemas/workspace-planning/templates/tasks.md +0 -15
  554. package/OpenSpec-main/scripts/README.md +0 -37
  555. package/OpenSpec-main/scripts/pack-version-check.mjs +0 -111
  556. package/OpenSpec-main/scripts/postinstall.js +0 -83
  557. package/OpenSpec-main/scripts/test-postinstall.sh +0 -57
  558. package/OpenSpec-main/scripts/update-flake.sh +0 -128
  559. package/OpenSpec-main/test/cli-e2e/basic.test.ts +0 -205
  560. package/OpenSpec-main/test/commands/artifact-workflow.test.ts +0 -1063
  561. package/OpenSpec-main/test/commands/change-initiative-link.test.ts +0 -532
  562. package/OpenSpec-main/test/commands/change.interactive-show.test.ts +0 -45
  563. package/OpenSpec-main/test/commands/change.interactive-validate.test.ts +0 -48
  564. package/OpenSpec-main/test/commands/completion.test.ts +0 -278
  565. package/OpenSpec-main/test/commands/config-profile.test.ts +0 -532
  566. package/OpenSpec-main/test/commands/config.test.ts +0 -285
  567. package/OpenSpec-main/test/commands/context-store.test.ts +0 -692
  568. package/OpenSpec-main/test/commands/feedback.test.ts +0 -429
  569. package/OpenSpec-main/test/commands/initiative.test.ts +0 -907
  570. package/OpenSpec-main/test/commands/schema.test.ts +0 -467
  571. package/OpenSpec-main/test/commands/show.test.ts +0 -123
  572. package/OpenSpec-main/test/commands/spec.interactive-show.test.ts +0 -44
  573. package/OpenSpec-main/test/commands/spec.interactive-validate.test.ts +0 -44
  574. package/OpenSpec-main/test/commands/spec.test.ts +0 -324
  575. package/OpenSpec-main/test/commands/validate.enriched-output.test.ts +0 -49
  576. package/OpenSpec-main/test/commands/validate.test.ts +0 -147
  577. package/OpenSpec-main/test/commands/workspace-initiative-open.test.ts +0 -638
  578. package/OpenSpec-main/test/commands/workspace-open.test.ts +0 -123
  579. package/OpenSpec-main/test/commands/workspace.interactive.test.ts +0 -696
  580. package/OpenSpec-main/test/commands/workspace.test.ts +0 -1812
  581. package/OpenSpec-main/test/core/archive.test.ts +0 -869
  582. package/OpenSpec-main/test/core/artifact-graph/graph.test.ts +0 -268
  583. package/OpenSpec-main/test/core/artifact-graph/instruction-loader.test.ts +0 -609
  584. package/OpenSpec-main/test/core/artifact-graph/outputs.test.ts +0 -175
  585. package/OpenSpec-main/test/core/artifact-graph/resolver.test.ts +0 -651
  586. package/OpenSpec-main/test/core/artifact-graph/schema.test.ts +0 -207
  587. package/OpenSpec-main/test/core/artifact-graph/state.test.ts +0 -174
  588. package/OpenSpec-main/test/core/artifact-graph/workflow.integration.test.ts +0 -182
  589. package/OpenSpec-main/test/core/available-tools.test.ts +0 -167
  590. package/OpenSpec-main/test/core/collections/initiatives/operations.test.ts +0 -342
  591. package/OpenSpec-main/test/core/collections/initiatives/resolution.test.ts +0 -21
  592. package/OpenSpec-main/test/core/collections/initiatives/schema.test.ts +0 -201
  593. package/OpenSpec-main/test/core/collections/initiatives/templates.test.ts +0 -74
  594. package/OpenSpec-main/test/core/collections/runtime.test.ts +0 -214
  595. package/OpenSpec-main/test/core/command-generation/adapters.test.ts +0 -710
  596. package/OpenSpec-main/test/core/command-generation/generator.test.ts +0 -110
  597. package/OpenSpec-main/test/core/command-generation/registry.test.ts +0 -108
  598. package/OpenSpec-main/test/core/command-generation/types.test.ts +0 -79
  599. package/OpenSpec-main/test/core/commands/change-command.list.test.ts +0 -76
  600. package/OpenSpec-main/test/core/commands/change-command.show-validate.test.ts +0 -111
  601. package/OpenSpec-main/test/core/completions/command-registry.test.ts +0 -201
  602. package/OpenSpec-main/test/core/completions/completion-provider.test.ts +0 -288
  603. package/OpenSpec-main/test/core/completions/generators/bash-generator.test.ts +0 -586
  604. package/OpenSpec-main/test/core/completions/generators/fish-generator.test.ts +0 -549
  605. package/OpenSpec-main/test/core/completions/generators/powershell-generator.test.ts +0 -621
  606. package/OpenSpec-main/test/core/completions/generators/zsh-generator.test.ts +0 -425
  607. package/OpenSpec-main/test/core/completions/installers/bash-installer.test.ts +0 -484
  608. package/OpenSpec-main/test/core/completions/installers/fish-installer.test.ts +0 -321
  609. package/OpenSpec-main/test/core/completions/installers/powershell-installer.test.ts +0 -824
  610. package/OpenSpec-main/test/core/completions/installers/zsh-installer.test.ts +0 -750
  611. package/OpenSpec-main/test/core/config-schema.test.ts +0 -340
  612. package/OpenSpec-main/test/core/context-store/foundation.test.ts +0 -364
  613. package/OpenSpec-main/test/core/context-store/registry.test.ts +0 -599
  614. package/OpenSpec-main/test/core/converters/json-converter.test.ts +0 -184
  615. package/OpenSpec-main/test/core/global-config.test.ts +0 -371
  616. package/OpenSpec-main/test/core/init.test.ts +0 -786
  617. package/OpenSpec-main/test/core/legacy-cleanup.test.ts +0 -1162
  618. package/OpenSpec-main/test/core/list.test.ts +0 -165
  619. package/OpenSpec-main/test/core/migration.test.ts +0 -150
  620. package/OpenSpec-main/test/core/parsers/change-parser.test.ts +0 -52
  621. package/OpenSpec-main/test/core/parsers/markdown-parser.test.ts +0 -355
  622. package/OpenSpec-main/test/core/parsers/requirement-blocks.test.ts +0 -46
  623. package/OpenSpec-main/test/core/planning-home.test.ts +0 -120
  624. package/OpenSpec-main/test/core/profile-sync-drift.test.ts +0 -92
  625. package/OpenSpec-main/test/core/profiles.test.ts +0 -63
  626. package/OpenSpec-main/test/core/project-config.test.ts +0 -610
  627. package/OpenSpec-main/test/core/shared/skill-generation.test.ts +0 -301
  628. package/OpenSpec-main/test/core/shared/tool-detection.test.ts +0 -333
  629. package/OpenSpec-main/test/core/templates/skill-templates-parity.test.ts +0 -172
  630. package/OpenSpec-main/test/core/update.test.ts +0 -1810
  631. package/OpenSpec-main/test/core/validation.enriched-messages.test.ts +0 -74
  632. package/OpenSpec-main/test/core/validation.test.ts +0 -680
  633. package/OpenSpec-main/test/core/view.test.ts +0 -129
  634. package/OpenSpec-main/test/core/workspace/foundation.test.ts +0 -694
  635. package/OpenSpec-main/test/core/workspace/legacy-state.test.ts +0 -221
  636. package/OpenSpec-main/test/core/workspace/skills.test.ts +0 -69
  637. package/OpenSpec-main/test/fixtures/tmp-init/openspec/changes/c1/proposal.md +0 -7
  638. package/OpenSpec-main/test/fixtures/tmp-init/openspec/changes/c1/specs/alpha/spec.md +0 -8
  639. package/OpenSpec-main/test/fixtures/tmp-init/openspec/specs/alpha/spec.md +0 -12
  640. package/OpenSpec-main/test/helpers/path-env.ts +0 -26
  641. package/OpenSpec-main/test/helpers/run-cli.ts +0 -150
  642. package/OpenSpec-main/test/prompts/searchable-multi-select.test.ts +0 -220
  643. package/OpenSpec-main/test/specs/source-specs-normalization.test.ts +0 -63
  644. package/OpenSpec-main/test/telemetry/config.test.ts +0 -298
  645. package/OpenSpec-main/test/telemetry/index.test.ts +0 -219
  646. package/OpenSpec-main/test/utils/change-metadata.test.ts +0 -368
  647. package/OpenSpec-main/test/utils/change-utils.test.ts +0 -201
  648. package/OpenSpec-main/test/utils/command-references.test.ts +0 -83
  649. package/OpenSpec-main/test/utils/file-system.test.ts +0 -322
  650. package/OpenSpec-main/test/utils/interactive.test.ts +0 -125
  651. package/OpenSpec-main/test/utils/marker-updates.test.ts +0 -448
  652. package/OpenSpec-main/test/utils/shell-detection.test.ts +0 -185
  653. package/OpenSpec-main/vitest.config.ts +0 -47
  654. package/OpenSpec-main/vitest.setup.ts +0 -15
  655. 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
- });