sauron-cli 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (653) hide show
  1. package/README.md +4 -2
  2. package/dist/index.js +8 -8
  3. package/package.json +1 -1
  4. package/templates/.agents/rules/memory.md +68 -68
  5. package/templates/.agents/skills/wiki/SKILL.md +14 -14
  6. package/55ea973d-e255-4f08-a313-a5d68243bd2d.png +0 -0
  7. package/OpenSpec-main/.actrc +0 -1
  8. package/OpenSpec-main/.changeset/README.md +0 -97
  9. package/OpenSpec-main/.changeset/config.json +0 -15
  10. package/OpenSpec-main/.coderabbit.yaml +0 -11
  11. package/OpenSpec-main/.devcontainer/README.md +0 -92
  12. package/OpenSpec-main/.devcontainer/devcontainer.json +0 -68
  13. package/OpenSpec-main/.github/CODEOWNERS +0 -2
  14. package/OpenSpec-main/.github/workflows/README.md +0 -20
  15. package/OpenSpec-main/.github/workflows/ci.yml +0 -346
  16. package/OpenSpec-main/.github/workflows/release-prepare.yml +0 -60
  17. package/OpenSpec-main/CHANGELOG.md +0 -594
  18. package/OpenSpec-main/LICENSE +0 -22
  19. package/OpenSpec-main/MAINTAINERS.md +0 -17
  20. package/OpenSpec-main/README.md +0 -206
  21. package/OpenSpec-main/README_OLD.md +0 -475
  22. package/OpenSpec-main/assets/openspec_bg.png +0 -0
  23. package/OpenSpec-main/assets/openspec_dashboard.png +0 -0
  24. package/OpenSpec-main/assets/openspec_pixel_dark.svg +0 -89
  25. package/OpenSpec-main/assets/openspec_pixel_light.svg +0 -89
  26. package/OpenSpec-main/bin/openspec.js +0 -5
  27. package/OpenSpec-main/build.js +0 -31
  28. package/OpenSpec-main/eslint.config.js +0 -42
  29. package/OpenSpec-main/flake.lock +0 -27
  30. package/OpenSpec-main/flake.nix +0 -114
  31. package/OpenSpec-main/openspec/changes/IMPLEMENTATION_ORDER.md +0 -68
  32. package/OpenSpec-main/openspec/changes/add-artifact-regeneration-support/proposal.md +0 -136
  33. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/.openspec.yaml +0 -2
  34. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/proposal.md +0 -93
  35. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/change-creation/spec.md +0 -15
  36. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/change-stacking-workflow/spec.md +0 -65
  37. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/cli-change/spec.md +0 -27
  38. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/openspec-conventions/spec.md +0 -29
  39. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/tasks.md +0 -39
  40. package/OpenSpec-main/openspec/changes/add-global-install-scope/.openspec.yaml +0 -2
  41. package/OpenSpec-main/openspec/changes/add-global-install-scope/design.md +0 -161
  42. package/OpenSpec-main/openspec/changes/add-global-install-scope/proposal.md +0 -101
  43. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/ai-tool-paths/spec.md +0 -35
  44. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-config/spec.md +0 -21
  45. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-init/spec.md +0 -28
  46. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-update/spec.md +0 -34
  47. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/command-generation/spec.md +0 -22
  48. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/global-config/spec.md +0 -24
  49. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/installation-scope/spec.md +0 -71
  50. package/OpenSpec-main/openspec/changes/add-global-install-scope/tasks.md +0 -61
  51. package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/.openspec.yaml +0 -2
  52. package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/proposal.md +0 -45
  53. package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/specs/developer-qa-workflow/spec.md +0 -49
  54. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/.openspec.yaml +0 -2
  55. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/proposal.md +0 -111
  56. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/specs/cli-init/spec.md +0 -121
  57. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/specs/cli-update/spec.md +0 -48
  58. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/tasks.md +0 -53
  59. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/design.md +0 -86
  60. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/proposal.md +0 -29
  61. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/specs/cli-update/spec.md +0 -59
  62. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/tasks.md +0 -20
  63. package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/proposal.md +0 -20
  64. package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/specs/cli-list/spec.md +0 -69
  65. package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/tasks.md +0 -26
  66. package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/design.md +0 -64
  67. package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/proposal.md +0 -18
  68. package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/tasks.md +0 -25
  69. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/design.md +0 -104
  70. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/proposal.md +0 -30
  71. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/specs/cli-init/spec.md +0 -148
  72. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/tasks.md +0 -38
  73. package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/proposal.md +0 -24
  74. package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/specs/openspec-conventions/spec.md +0 -120
  75. package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/tasks.md +0 -38
  76. package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/proposal.md +0 -13
  77. package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/specs/openspec-docs/README.md +0 -472
  78. package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/tasks.md +0 -9
  79. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/proposal.md +0 -15
  80. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/specs/cli-archive/spec.md +0 -111
  81. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/tasks.md +0 -44
  82. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/proposal.md +0 -19
  83. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/specs/cli-diff/spec.md +0 -77
  84. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/tasks.md +0 -23
  85. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/design.md +0 -56
  86. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/proposal.md +0 -17
  87. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/specs/cli-change/spec.md +0 -48
  88. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/specs/cli-list/spec.md +0 -12
  89. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/tasks.md +0 -34
  90. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/proposal.md +0 -20
  91. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-change/spec.md +0 -23
  92. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-show/spec.md +0 -83
  93. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-spec/spec.md +0 -23
  94. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/tasks.md +0 -142
  95. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/proposal.md +0 -13
  96. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/specs/cli-archive/spec.md +0 -191
  97. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/tasks.md +0 -57
  98. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/design.md +0 -45
  99. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/proposal.md +0 -19
  100. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/specs/cli-spec/spec.md +0 -43
  101. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/tasks.md +0 -22
  102. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/design.md +0 -104
  103. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/proposal.md +0 -22
  104. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/specs/cli-archive/spec.md +0 -18
  105. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/specs/cli-diff/spec.md +0 -12
  106. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/tasks.md +0 -59
  107. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/proposal.md +0 -93
  108. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/cli-archive/spec.md +0 -48
  109. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/cli-diff/spec.md +0 -45
  110. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/openspec-conventions/spec.md +0 -101
  111. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/tasks.md +0 -55
  112. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/design.md +0 -19
  113. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/proposal.md +0 -67
  114. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/specs/cli-list/spec.md +0 -57
  115. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/specs/openspec-conventions/spec.md +0 -23
  116. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/tasks.md +0 -27
  117. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/proposal.md +0 -20
  118. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-change/spec.md +0 -22
  119. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-spec/spec.md +0 -23
  120. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-validate/spec.md +0 -149
  121. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/tasks.md +0 -81
  122. package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/proposal.md +0 -40
  123. package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/specs/cli-update/spec.md +0 -23
  124. package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/tasks.md +0 -21
  125. package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/proposal.md +0 -25
  126. package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/specs/cli-validate/spec.md +0 -55
  127. package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/tasks.md +0 -21
  128. package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/proposal.md +0 -36
  129. package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/specs/openspec-conventions/spec.md +0 -192
  130. package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/tasks.md +0 -19
  131. package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/proposal.md +0 -38
  132. package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/specs/cli-view/spec.md +0 -109
  133. package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/tasks.md +0 -47
  134. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/proposal.md +0 -28
  135. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/specs/cli-init/spec.md +0 -71
  136. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/specs/cli-update/spec.md +0 -41
  137. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/tasks.md +0 -17
  138. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/proposal.md +0 -35
  139. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/specs/cli-init/spec.md +0 -45
  140. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/tasks.md +0 -16
  141. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/proposal.md +0 -119
  142. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/specs/cli-init/spec.md +0 -21
  143. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/specs/cli-update/spec.md +0 -22
  144. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/tasks.md +0 -20
  145. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-cli-e2e-plan/proposal.md +0 -19
  146. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-cli-e2e-plan/tasks.md +0 -9
  147. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-deterministic-tests/proposal.md +0 -78
  148. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-deterministic-tests/tasks.md +0 -25
  149. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/proposal.md +0 -13
  150. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/specs/cli-init/spec.md +0 -92
  151. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/tasks.md +0 -12
  152. package/OpenSpec-main/openspec/changes/archive/2025-09-29-remove-diff-command/proposal.md +0 -81
  153. package/OpenSpec-main/openspec/changes/archive/2025-09-29-remove-diff-command/tasks.md +0 -37
  154. package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/proposal.md +0 -25
  155. package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/specs/cli-view/spec.md +0 -9
  156. package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/tasks.md +0 -8
  157. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/proposal.md +0 -29
  158. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/cli-init/spec.md +0 -40
  159. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/cli-update/spec.md +0 -22
  160. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/openspec-conventions/spec.md +0 -27
  161. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/tasks.md +0 -22
  162. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/design.md +0 -130
  163. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/proposal.md +0 -117
  164. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/tasks.md +0 -69
  165. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/proposal.md +0 -19
  166. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/specs/cli-validate/spec.md +0 -9
  167. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/tasks.md +0 -11
  168. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/proposal.md +0 -25
  169. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/specs/cli-init/spec.md +0 -56
  170. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/specs/cli-update/spec.md +0 -41
  171. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/tasks.md +0 -19
  172. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/proposal.md +0 -25
  173. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/specs/cli-init/spec.md +0 -48
  174. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/specs/cli-update/spec.md +0 -48
  175. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/tasks.md +0 -30
  176. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/proposal.md +0 -17
  177. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/specs/cli-init/spec.md +0 -43
  178. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/specs/cli-update/spec.md +0 -27
  179. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/tasks.md +0 -15
  180. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/proposal.md +0 -12
  181. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/specs/cli-init/spec.md +0 -39
  182. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/tasks.md +0 -17
  183. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/proposal.md +0 -17
  184. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/specs/cli-init/spec.md +0 -42
  185. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/specs/cli-update/spec.md +0 -27
  186. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/tasks.md +0 -17
  187. package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/proposal.md +0 -12
  188. package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/specs/cli-validate/spec.md +0 -39
  189. package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/tasks.md +0 -12
  190. package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/proposal.md +0 -12
  191. package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/specs/docs-agent-instructions/spec.md +0 -33
  192. package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/tasks.md +0 -11
  193. package/OpenSpec-main/openspec/changes/archive/2025-10-14-slim-root-agents-file/proposal.md +0 -13
  194. package/OpenSpec-main/openspec/changes/archive/2025-10-14-slim-root-agents-file/tasks.md +0 -15
  195. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/proposal.md +0 -14
  196. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/specs/cli-init/spec.md +0 -10
  197. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/tasks.md +0 -8
  198. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/proposal.md +0 -15
  199. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/specs/cli-init/spec.md +0 -32
  200. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/specs/cli-update/spec.md +0 -10
  201. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/tasks.md +0 -11
  202. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-release-automation/proposal.md +0 -49
  203. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-release-automation/tasks.md +0 -12
  204. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/proposal.md +0 -17
  205. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/specs/cli-update/spec.md +0 -32
  206. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/tasks.md +0 -15
  207. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/proposal.md +0 -15
  208. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/specs/cli-init/spec.md +0 -97
  209. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/tasks.md +0 -19
  210. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/proposal.md +0 -13
  211. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/specs/cli-init/spec.md +0 -67
  212. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/tasks.md +0 -7
  213. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/proposal.md +0 -12
  214. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/specs/cli-init/spec.md +0 -54
  215. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/specs/cli-update/spec.md +0 -54
  216. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/tasks.md +0 -11
  217. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/design.md +0 -525
  218. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/proposal.md +0 -29
  219. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/specs/cli-completion/spec.md +0 -300
  220. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/tasks.md +0 -81
  221. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/design.md +0 -105
  222. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/proposal.md +0 -20
  223. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/specs/global-config/spec.md +0 -76
  224. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/tasks.md +0 -26
  225. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/design.md +0 -89
  226. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/proposal.md +0 -60
  227. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/specs/cli-config/spec.md +0 -213
  228. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/tasks.md +0 -28
  229. package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/proposal.md +0 -15
  230. package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/specs/cli-completion/spec.md +0 -328
  231. package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/tasks.md +0 -49
  232. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/design.md +0 -197
  233. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/proposal.md +0 -18
  234. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/specs/artifact-graph/spec.md +0 -103
  235. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/tasks.md +0 -61
  236. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/design.md +0 -74
  237. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/proposal.md +0 -45
  238. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/specs/change-creation/spec.md +0 -63
  239. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/tasks.md +0 -30
  240. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/design.md +0 -112
  241. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/proposal.md +0 -33
  242. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/specs/cli-artifact-workflow/spec.md +0 -153
  243. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/tasks.md +0 -48
  244. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/design.md +0 -149
  245. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/proposal.md +0 -20
  246. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/specs/instruction-loader/spec.md +0 -70
  247. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/tasks.md +0 -13
  248. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/design.md +0 -129
  249. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/proposal.md +0 -20
  250. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/specs/artifact-graph/spec.md +0 -49
  251. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/tasks.md +0 -32
  252. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/design.md +0 -151
  253. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/proposal.md +0 -101
  254. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/specs/cli-artifact-workflow/spec.md +0 -109
  255. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/specs/cli-view/spec.md +0 -60
  256. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/tasks.md +0 -25
  257. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/proposal.md +0 -11
  258. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-init/spec.md +0 -105
  259. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-update/spec.md +0 -92
  260. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/tasks.md +0 -12
  261. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/proposal.md +0 -13
  262. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-init/spec.md +0 -105
  263. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-update/spec.md +0 -92
  264. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/tasks.md +0 -13
  265. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-agent-schema-selection/proposal.md +0 -26
  266. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-agent-schema-selection/tasks.md +0 -32
  267. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/design.md +0 -147
  268. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/proposal.md +0 -29
  269. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/specs/cli-artifact-workflow/spec.md +0 -98
  270. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/tasks.md +0 -29
  271. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/.openspec.yaml +0 -2
  272. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/design.md +0 -77
  273. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/proposal.md +0 -32
  274. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/specs/specs-sync-skill/spec.md +0 -67
  275. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/tasks.md +0 -40
  276. package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/proposal.md +0 -138
  277. package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/specs/cli-artifact-workflow/spec.md +0 -60
  278. package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/tasks.md +0 -35
  279. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/.openspec.yaml +0 -2
  280. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/design.md +0 -84
  281. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/proposal.md +0 -28
  282. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/specs/opsx-archive-skill/spec.md +0 -122
  283. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/tasks.md +0 -23
  284. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/.openspec.yaml +0 -2
  285. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/design.md +0 -94
  286. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/proposal.md +0 -25
  287. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/specs/nix-flake-support/spec.md +0 -79
  288. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/tasks.md +0 -65
  289. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/.openspec.yaml +0 -2
  290. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/design.md +0 -117
  291. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/proposal.md +0 -23
  292. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/specs/flake-update-script/spec.md +0 -93
  293. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/tasks.md +0 -55
  294. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/.openspec.yaml +0 -2
  295. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/design.md +0 -175
  296. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/proposal.md +0 -37
  297. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/specs/global-config/spec.md +0 -21
  298. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/specs/telemetry/spec.md +0 -116
  299. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/tasks.md +0 -47
  300. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/proposal.md +0 -16
  301. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/specs/cli-init/spec.md +0 -75
  302. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/specs/cli-update/spec.md +0 -56
  303. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/tasks.md +0 -6
  304. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/design.md +0 -206
  305. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/proposal.md +0 -21
  306. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/specs/ci-nix-validation/spec.md +0 -104
  307. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/tasks.md +0 -49
  308. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/.openspec.yaml +0 -2
  309. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/README.md +0 -3
  310. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/design.md +0 -70
  311. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/proposal.md +0 -32
  312. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/specs/no-changes.md +0 -9
  313. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/tasks.md +0 -22
  314. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/proposal.md +0 -20
  315. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/specs/cli-feedback/spec.md +0 -188
  316. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/tasks.md +0 -30
  317. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/.openspec.yaml +0 -2
  318. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/design.md +0 -115
  319. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/proposal.md +0 -27
  320. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/specs/opsx-onboard-skill/spec.md +0 -162
  321. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/tasks.md +0 -21
  322. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/design.md +0 -96
  323. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/proposal.md +0 -48
  324. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/specs/opsx-verify-skill/spec.md +0 -190
  325. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/tasks.md +0 -15
  326. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/.openspec.yaml +0 -2
  327. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/design.md +0 -193
  328. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/proposal.md +0 -32
  329. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/specs/cli-init/spec.md +0 -176
  330. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/specs/legacy-cleanup/spec.md +0 -158
  331. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/tasks.md +0 -67
  332. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/.openspec.yaml +0 -2
  333. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/design.md +0 -144
  334. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/proposal.md +0 -36
  335. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/ai-tool-paths/spec.md +0 -63
  336. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/cli-artifact-workflow/spec.md +0 -60
  337. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/command-generation/spec.md +0 -98
  338. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/tasks.md +0 -55
  339. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/.openspec.yaml +0 -2
  340. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/design.md +0 -665
  341. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/proposal.md +0 -774
  342. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/config-loading/spec.md +0 -119
  343. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/context-injection/spec.md +0 -51
  344. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/rules-injection/spec.md +0 -99
  345. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/schema-resolution/spec.md +0 -83
  346. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/tasks.md +0 -72
  347. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/.openspec.yaml +0 -2
  348. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/design.md +0 -117
  349. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/proposal.md +0 -167
  350. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/specs/schema-resolution/spec.md +0 -88
  351. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/tasks.md +0 -28
  352. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/.openspec.yaml +0 -2
  353. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/design.md +0 -113
  354. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/proposal.md +0 -55
  355. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-fork-command/spec.md +0 -66
  356. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-init-command/spec.md +0 -71
  357. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-validate-command/spec.md +0 -86
  358. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-which-command/spec.md +0 -65
  359. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/tasks.md +0 -67
  360. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/.openspec.yaml +0 -2
  361. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/README.md +0 -3
  362. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/design.md +0 -85
  363. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/proposal.md +0 -38
  364. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/specs/ai-tool-paths/spec.md +0 -12
  365. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/specs/cli-init/spec.md +0 -37
  366. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/tasks.md +0 -22
  367. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/design.md +0 -208
  368. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/proposal.md +0 -142
  369. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/specs/openspec-conventions/spec.md +0 -29
  370. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/specs/workspace-foundation/spec.md +0 -199
  371. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/tasks.md +0 -56
  372. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/design.md +0 -356
  373. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/proposal.md +0 -128
  374. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/cli-artifact-workflow/spec.md +0 -24
  375. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/workspace-foundation/spec.md +0 -35
  376. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/workspace-links/spec.md +0 -356
  377. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/tasks.md +0 -121
  378. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/design.md +0 -266
  379. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/proposal.md +0 -65
  380. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/specs/workspace-foundation/spec.md +0 -76
  381. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/specs/workspace-open/spec.md +0 -199
  382. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/tasks.md +0 -89
  383. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/design.md +0 -242
  384. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/proposal.md +0 -78
  385. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/artifact-graph/spec.md +0 -36
  386. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/change-creation/spec.md +0 -42
  387. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-artifact-workflow/spec.md +0 -100
  388. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-config/spec.md +0 -55
  389. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-update/spec.md +0 -21
  390. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/openspec-conventions/spec.md +0 -32
  391. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/schema-resolution/spec.md +0 -25
  392. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/workspace-change-planning/spec.md +0 -67
  393. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/workspace-links/spec.md +0 -163
  394. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/tasks.md +0 -133
  395. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/.openspec.yaml +0 -2
  396. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/design.md +0 -48
  397. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/proposal.md +0 -26
  398. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/specs/command-generation/spec.md +0 -63
  399. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/tasks.md +0 -19
  400. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/.openspec.yaml +0 -2
  401. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/design.md +0 -38
  402. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/proposal.md +0 -25
  403. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/specs/graceful-status-empty/spec.md +0 -27
  404. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/tasks.md +0 -16
  405. package/OpenSpec-main/openspec/changes/schema-alias-support/.openspec.yaml +0 -2
  406. package/OpenSpec-main/openspec/changes/schema-alias-support/proposal.md +0 -28
  407. package/OpenSpec-main/openspec/changes/simplify-skill-installation/.openspec.yaml +0 -2
  408. package/OpenSpec-main/openspec/changes/simplify-skill-installation/design.md +0 -288
  409. package/OpenSpec-main/openspec/changes/simplify-skill-installation/proposal.md +0 -202
  410. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/cli-init/spec.md +0 -199
  411. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/cli-update/spec.md +0 -177
  412. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/profiles/spec.md +0 -142
  413. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/propose-workflow/spec.md +0 -42
  414. package/OpenSpec-main/openspec/changes/simplify-skill-installation/tasks.md +0 -132
  415. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/.openspec.yaml +0 -2
  416. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/design.md +0 -149
  417. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/proposal.md +0 -47
  418. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/specs/template-artifact-pipeline/spec.md +0 -89
  419. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/tasks.md +0 -41
  420. package/OpenSpec-main/openspec/changes/workspace-agent-guidance/.openspec.yaml +0 -2
  421. package/OpenSpec-main/openspec/changes/workspace-agent-guidance/proposal.md +0 -100
  422. package/OpenSpec-main/openspec/changes/workspace-apply-repo-slice/proposal.md +0 -58
  423. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/HISTORICAL_DIRECTION.md +0 -511
  424. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/POC_REFERENCE_GUIDE.md +0 -266
  425. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/README.md +0 -107
  426. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/START_HERE.md +0 -105
  427. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/proposal.md +0 -62
  428. package/OpenSpec-main/openspec/changes/workspace-verify-and-archive/proposal.md +0 -57
  429. package/OpenSpec-main/openspec/config.yaml +0 -36
  430. package/OpenSpec-main/openspec/explorations/explore-workflow-ux.md +0 -116
  431. package/OpenSpec-main/openspec/explorations/workspace-architecture.md +0 -857
  432. package/OpenSpec-main/openspec/explorations/workspace-roadmap.md +0 -367
  433. package/OpenSpec-main/openspec/explorations/workspace-user-journeys.md +0 -2259
  434. package/OpenSpec-main/openspec/explorations/workspace-ux-simplification.md +0 -491
  435. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/.initiative.yaml +0 -27
  436. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/README.md +0 -33
  437. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/decisions.md +0 -204
  438. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/direction.md +0 -447
  439. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/questions.md +0 -23
  440. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/roadmap.md +0 -759
  441. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/tasks.md +0 -308
  442. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/evidence.md +0 -154
  443. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/plan.md +0 -90
  444. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/tasks.md +0 -44
  445. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/evidence.md +0 -68
  446. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/plan.md +0 -80
  447. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/tasks.md +0 -23
  448. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/evidence.md +0 -43
  449. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/plan.md +0 -85
  450. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/tasks.md +0 -17
  451. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/evidence.md +0 -77
  452. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/plan.md +0 -198
  453. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/tasks.md +0 -14
  454. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/evidence.md +0 -99
  455. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/plan.md +0 -236
  456. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/tasks.md +0 -21
  457. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/evidence.md +0 -97
  458. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/plan.md +0 -333
  459. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/tasks.md +0 -29
  460. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/evidence.md +0 -97
  461. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/plan.md +0 -184
  462. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/tasks.md +0 -27
  463. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/evidence.md +0 -239
  464. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/plan.md +0 -279
  465. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/tasks.md +0 -22
  466. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/decision-review.md +0 -64
  467. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/evidence.md +0 -106
  468. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/plan.md +0 -141
  469. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/tasks.md +0 -22
  470. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/10-let-workspaces-open-initiatives/plan.md +0 -430
  471. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/10-let-workspaces-open-initiatives/tasks.md +0 -43
  472. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/notes.md +0 -289
  473. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/plan.md +0 -39
  474. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/tasks.md +0 -8
  475. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/evidence.md +0 -45
  476. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/plan.md +0 -150
  477. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/tasks.md +0 -23
  478. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/evidence.md +0 -25
  479. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/plan.md +0 -98
  480. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/tasks.md +0 -25
  481. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/14-workspaces-beta-guide-split/plan.md +0 -37
  482. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/14-workspaces-beta-guide-split/tasks.md +0 -9
  483. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/evidence.md +0 -140
  484. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/plan.md +0 -344
  485. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/tasks.md +0 -39
  486. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/16-add-escalation-ux/plan.md +0 -26
  487. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/16-add-escalation-ux/tasks.md +0 -7
  488. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/17-harden-team-shared-coordination/plan.md +0 -25
  489. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/17-harden-team-shared-coordination/tasks.md +0 -7
  490. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/evidence.md +0 -397
  491. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/plan.md +0 -180
  492. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/tasks.md +0 -28
  493. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/plan.md +0 -62
  494. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/tasks.md +0 -16
  495. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/evidence.md +0 -47
  496. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/plan.md +0 -90
  497. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/tasks.md +0 -18
  498. package/OpenSpec-main/openspec/specs/ai-tool-paths/spec.md +0 -63
  499. package/OpenSpec-main/openspec/specs/artifact-graph/spec.md +0 -165
  500. package/OpenSpec-main/openspec/specs/change-creation/spec.md +0 -108
  501. package/OpenSpec-main/openspec/specs/ci-nix-validation/spec.md +0 -107
  502. package/OpenSpec-main/openspec/specs/cli-archive/spec.md +0 -210
  503. package/OpenSpec-main/openspec/specs/cli-artifact-workflow/spec.md +0 -398
  504. package/OpenSpec-main/openspec/specs/cli-change/spec.md +0 -92
  505. package/OpenSpec-main/openspec/specs/cli-completion/spec.md +0 -432
  506. package/OpenSpec-main/openspec/specs/cli-config/spec.md +0 -318
  507. package/OpenSpec-main/openspec/specs/cli-feedback/spec.md +0 -193
  508. package/OpenSpec-main/openspec/specs/cli-init/spec.md +0 -269
  509. package/OpenSpec-main/openspec/specs/cli-list/spec.md +0 -103
  510. package/OpenSpec-main/openspec/specs/cli-show/spec.md +0 -86
  511. package/OpenSpec-main/openspec/specs/cli-spec/spec.md +0 -88
  512. package/OpenSpec-main/openspec/specs/cli-update/spec.md +0 -229
  513. package/OpenSpec-main/openspec/specs/cli-validate/spec.md +0 -219
  514. package/OpenSpec-main/openspec/specs/cli-view/spec.md +0 -129
  515. package/OpenSpec-main/openspec/specs/command-generation/spec.md +0 -97
  516. package/OpenSpec-main/openspec/specs/config-loading/spec.md +0 -122
  517. package/OpenSpec-main/openspec/specs/context-injection/spec.md +0 -53
  518. package/OpenSpec-main/openspec/specs/docs-agent-instructions/spec.md +0 -62
  519. package/OpenSpec-main/openspec/specs/global-config/spec.md +0 -101
  520. package/OpenSpec-main/openspec/specs/instruction-loader/spec.md +0 -70
  521. package/OpenSpec-main/openspec/specs/legacy-cleanup/spec.md +0 -163
  522. package/OpenSpec-main/openspec/specs/openspec-conventions/spec.md +0 -556
  523. package/OpenSpec-main/openspec/specs/opsx-archive-skill/spec.md +0 -128
  524. package/OpenSpec-main/openspec/specs/opsx-onboard-skill/spec.md +0 -167
  525. package/OpenSpec-main/openspec/specs/opsx-verify-skill/spec.md +0 -189
  526. package/OpenSpec-main/openspec/specs/rules-injection/spec.md +0 -102
  527. package/OpenSpec-main/openspec/specs/schema-fork-command/spec.md +0 -71
  528. package/OpenSpec-main/openspec/specs/schema-init-command/spec.md +0 -76
  529. package/OpenSpec-main/openspec/specs/schema-resolution/spec.md +0 -201
  530. package/OpenSpec-main/openspec/specs/schema-validate-command/spec.md +0 -91
  531. package/OpenSpec-main/openspec/specs/schema-which-command/spec.md +0 -70
  532. package/OpenSpec-main/openspec/specs/specs-sync-skill/spec.md +0 -72
  533. package/OpenSpec-main/openspec/specs/telemetry/spec.md +0 -122
  534. package/OpenSpec-main/openspec/specs/workspace-change-planning/spec.md +0 -71
  535. package/OpenSpec-main/openspec/specs/workspace-foundation/spec.md +0 -279
  536. package/OpenSpec-main/openspec/specs/workspace-links/spec.md +0 -529
  537. package/OpenSpec-main/openspec/specs/workspace-open/spec.md +0 -205
  538. package/OpenSpec-main/openspec-parallel-merge-plan.md +0 -98
  539. package/OpenSpec-main/package-lock.json +0 -4978
  540. package/OpenSpec-main/package.json +0 -84
  541. package/OpenSpec-main/pnpm-lock.yaml +0 -3187
  542. package/OpenSpec-main/schemas/spec-driven/schema.yaml +0 -153
  543. package/OpenSpec-main/schemas/spec-driven/templates/design.md +0 -19
  544. package/OpenSpec-main/schemas/spec-driven/templates/proposal.md +0 -23
  545. package/OpenSpec-main/schemas/spec-driven/templates/spec.md +0 -8
  546. package/OpenSpec-main/schemas/spec-driven/templates/tasks.md +0 -9
  547. package/OpenSpec-main/schemas/workspace-planning/schema.yaml +0 -72
  548. package/OpenSpec-main/schemas/workspace-planning/templates/design.md +0 -33
  549. package/OpenSpec-main/schemas/workspace-planning/templates/proposal.md +0 -28
  550. package/OpenSpec-main/schemas/workspace-planning/templates/spec.md +0 -9
  551. package/OpenSpec-main/schemas/workspace-planning/templates/tasks.md +0 -15
  552. package/OpenSpec-main/scripts/README.md +0 -37
  553. package/OpenSpec-main/scripts/pack-version-check.mjs +0 -111
  554. package/OpenSpec-main/scripts/postinstall.js +0 -83
  555. package/OpenSpec-main/scripts/test-postinstall.sh +0 -57
  556. package/OpenSpec-main/scripts/update-flake.sh +0 -128
  557. package/OpenSpec-main/test/cli-e2e/basic.test.ts +0 -205
  558. package/OpenSpec-main/test/commands/artifact-workflow.test.ts +0 -1063
  559. package/OpenSpec-main/test/commands/change-initiative-link.test.ts +0 -532
  560. package/OpenSpec-main/test/commands/change.interactive-show.test.ts +0 -45
  561. package/OpenSpec-main/test/commands/change.interactive-validate.test.ts +0 -48
  562. package/OpenSpec-main/test/commands/completion.test.ts +0 -278
  563. package/OpenSpec-main/test/commands/config-profile.test.ts +0 -532
  564. package/OpenSpec-main/test/commands/config.test.ts +0 -285
  565. package/OpenSpec-main/test/commands/context-store.test.ts +0 -692
  566. package/OpenSpec-main/test/commands/feedback.test.ts +0 -429
  567. package/OpenSpec-main/test/commands/initiative.test.ts +0 -907
  568. package/OpenSpec-main/test/commands/schema.test.ts +0 -467
  569. package/OpenSpec-main/test/commands/show.test.ts +0 -123
  570. package/OpenSpec-main/test/commands/spec.interactive-show.test.ts +0 -44
  571. package/OpenSpec-main/test/commands/spec.interactive-validate.test.ts +0 -44
  572. package/OpenSpec-main/test/commands/spec.test.ts +0 -324
  573. package/OpenSpec-main/test/commands/validate.enriched-output.test.ts +0 -49
  574. package/OpenSpec-main/test/commands/validate.test.ts +0 -147
  575. package/OpenSpec-main/test/commands/workspace-initiative-open.test.ts +0 -638
  576. package/OpenSpec-main/test/commands/workspace-open.test.ts +0 -123
  577. package/OpenSpec-main/test/commands/workspace.interactive.test.ts +0 -696
  578. package/OpenSpec-main/test/commands/workspace.test.ts +0 -1812
  579. package/OpenSpec-main/test/core/archive.test.ts +0 -869
  580. package/OpenSpec-main/test/core/artifact-graph/graph.test.ts +0 -268
  581. package/OpenSpec-main/test/core/artifact-graph/instruction-loader.test.ts +0 -609
  582. package/OpenSpec-main/test/core/artifact-graph/outputs.test.ts +0 -175
  583. package/OpenSpec-main/test/core/artifact-graph/resolver.test.ts +0 -651
  584. package/OpenSpec-main/test/core/artifact-graph/schema.test.ts +0 -207
  585. package/OpenSpec-main/test/core/artifact-graph/state.test.ts +0 -174
  586. package/OpenSpec-main/test/core/artifact-graph/workflow.integration.test.ts +0 -182
  587. package/OpenSpec-main/test/core/available-tools.test.ts +0 -167
  588. package/OpenSpec-main/test/core/collections/initiatives/operations.test.ts +0 -342
  589. package/OpenSpec-main/test/core/collections/initiatives/resolution.test.ts +0 -21
  590. package/OpenSpec-main/test/core/collections/initiatives/schema.test.ts +0 -201
  591. package/OpenSpec-main/test/core/collections/initiatives/templates.test.ts +0 -74
  592. package/OpenSpec-main/test/core/collections/runtime.test.ts +0 -214
  593. package/OpenSpec-main/test/core/command-generation/adapters.test.ts +0 -710
  594. package/OpenSpec-main/test/core/command-generation/generator.test.ts +0 -110
  595. package/OpenSpec-main/test/core/command-generation/registry.test.ts +0 -108
  596. package/OpenSpec-main/test/core/command-generation/types.test.ts +0 -79
  597. package/OpenSpec-main/test/core/commands/change-command.list.test.ts +0 -76
  598. package/OpenSpec-main/test/core/commands/change-command.show-validate.test.ts +0 -111
  599. package/OpenSpec-main/test/core/completions/command-registry.test.ts +0 -201
  600. package/OpenSpec-main/test/core/completions/completion-provider.test.ts +0 -288
  601. package/OpenSpec-main/test/core/completions/generators/bash-generator.test.ts +0 -586
  602. package/OpenSpec-main/test/core/completions/generators/fish-generator.test.ts +0 -549
  603. package/OpenSpec-main/test/core/completions/generators/powershell-generator.test.ts +0 -621
  604. package/OpenSpec-main/test/core/completions/generators/zsh-generator.test.ts +0 -425
  605. package/OpenSpec-main/test/core/completions/installers/bash-installer.test.ts +0 -484
  606. package/OpenSpec-main/test/core/completions/installers/fish-installer.test.ts +0 -321
  607. package/OpenSpec-main/test/core/completions/installers/powershell-installer.test.ts +0 -824
  608. package/OpenSpec-main/test/core/completions/installers/zsh-installer.test.ts +0 -750
  609. package/OpenSpec-main/test/core/config-schema.test.ts +0 -340
  610. package/OpenSpec-main/test/core/context-store/foundation.test.ts +0 -364
  611. package/OpenSpec-main/test/core/context-store/registry.test.ts +0 -599
  612. package/OpenSpec-main/test/core/converters/json-converter.test.ts +0 -184
  613. package/OpenSpec-main/test/core/global-config.test.ts +0 -371
  614. package/OpenSpec-main/test/core/init.test.ts +0 -786
  615. package/OpenSpec-main/test/core/legacy-cleanup.test.ts +0 -1162
  616. package/OpenSpec-main/test/core/list.test.ts +0 -165
  617. package/OpenSpec-main/test/core/migration.test.ts +0 -150
  618. package/OpenSpec-main/test/core/parsers/change-parser.test.ts +0 -52
  619. package/OpenSpec-main/test/core/parsers/markdown-parser.test.ts +0 -355
  620. package/OpenSpec-main/test/core/parsers/requirement-blocks.test.ts +0 -46
  621. package/OpenSpec-main/test/core/planning-home.test.ts +0 -120
  622. package/OpenSpec-main/test/core/profile-sync-drift.test.ts +0 -92
  623. package/OpenSpec-main/test/core/profiles.test.ts +0 -63
  624. package/OpenSpec-main/test/core/project-config.test.ts +0 -610
  625. package/OpenSpec-main/test/core/shared/skill-generation.test.ts +0 -301
  626. package/OpenSpec-main/test/core/shared/tool-detection.test.ts +0 -333
  627. package/OpenSpec-main/test/core/templates/skill-templates-parity.test.ts +0 -172
  628. package/OpenSpec-main/test/core/update.test.ts +0 -1810
  629. package/OpenSpec-main/test/core/validation.enriched-messages.test.ts +0 -74
  630. package/OpenSpec-main/test/core/validation.test.ts +0 -680
  631. package/OpenSpec-main/test/core/view.test.ts +0 -129
  632. package/OpenSpec-main/test/core/workspace/foundation.test.ts +0 -694
  633. package/OpenSpec-main/test/core/workspace/legacy-state.test.ts +0 -221
  634. package/OpenSpec-main/test/core/workspace/skills.test.ts +0 -69
  635. package/OpenSpec-main/test/fixtures/tmp-init/openspec/changes/c1/proposal.md +0 -7
  636. package/OpenSpec-main/test/fixtures/tmp-init/openspec/changes/c1/specs/alpha/spec.md +0 -8
  637. package/OpenSpec-main/test/fixtures/tmp-init/openspec/specs/alpha/spec.md +0 -12
  638. package/OpenSpec-main/test/helpers/path-env.ts +0 -26
  639. package/OpenSpec-main/test/helpers/run-cli.ts +0 -150
  640. package/OpenSpec-main/test/prompts/searchable-multi-select.test.ts +0 -220
  641. package/OpenSpec-main/test/specs/source-specs-normalization.test.ts +0 -63
  642. package/OpenSpec-main/test/telemetry/config.test.ts +0 -298
  643. package/OpenSpec-main/test/telemetry/index.test.ts +0 -219
  644. package/OpenSpec-main/test/utils/change-metadata.test.ts +0 -368
  645. package/OpenSpec-main/test/utils/change-utils.test.ts +0 -201
  646. package/OpenSpec-main/test/utils/command-references.test.ts +0 -83
  647. package/OpenSpec-main/test/utils/file-system.test.ts +0 -322
  648. package/OpenSpec-main/test/utils/interactive.test.ts +0 -125
  649. package/OpenSpec-main/test/utils/marker-updates.test.ts +0 -448
  650. package/OpenSpec-main/test/utils/shell-detection.test.ts +0 -185
  651. package/OpenSpec-main/vitest.config.ts +0 -47
  652. package/OpenSpec-main/vitest.setup.ts +0 -15
  653. package/Scanner CLI Inteligente para Projetos.md +0 -433
@@ -1,786 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { promises as fs } from 'fs';
3
- import path from 'path';
4
- import os from 'os';
5
- import { InitCommand } from '../../src/core/init.js';
6
- import { saveGlobalConfig, getGlobalConfig } from '../../src/core/global-config.js';
7
-
8
- const { confirmMock, showWelcomeScreenMock, searchableMultiSelectMock } = vi.hoisted(() => ({
9
- confirmMock: vi.fn(),
10
- showWelcomeScreenMock: vi.fn().mockResolvedValue(undefined),
11
- searchableMultiSelectMock: vi.fn(),
12
- }));
13
-
14
- vi.mock('@inquirer/prompts', () => ({
15
- confirm: confirmMock,
16
- }));
17
-
18
- vi.mock('../../src/ui/welcome-screen.js', () => ({
19
- showWelcomeScreen: showWelcomeScreenMock,
20
- }));
21
-
22
- vi.mock('../../src/prompts/searchable-multi-select.js', () => ({
23
- searchableMultiSelect: searchableMultiSelectMock,
24
- }));
25
-
26
- describe('InitCommand', () => {
27
- let testDir: string;
28
- let configTempDir: string;
29
- let originalEnv: NodeJS.ProcessEnv;
30
-
31
- beforeEach(async () => {
32
- testDir = path.join(os.tmpdir(), `openspec-init-test-${Date.now()}`);
33
- await fs.mkdir(testDir, { recursive: true });
34
- originalEnv = { ...process.env };
35
- // Use a temp dir for global config to avoid reading real config
36
- configTempDir = path.join(os.tmpdir(), `openspec-config-init-${Date.now()}`);
37
- await fs.mkdir(configTempDir, { recursive: true });
38
- process.env.XDG_CONFIG_HOME = configTempDir;
39
-
40
- // Mock console.log to suppress output during tests
41
- vi.spyOn(console, 'log').mockImplementation(() => { });
42
- confirmMock.mockReset();
43
- confirmMock.mockResolvedValue(true);
44
- showWelcomeScreenMock.mockClear();
45
- searchableMultiSelectMock.mockReset();
46
- });
47
-
48
- afterEach(async () => {
49
- process.env = originalEnv;
50
- await fs.rm(testDir, { recursive: true, force: true });
51
- await fs.rm(configTempDir, { recursive: true, force: true });
52
- vi.restoreAllMocks();
53
- });
54
-
55
- describe('execute with --tools flag', () => {
56
- it('should create OpenSpec directory structure', async () => {
57
- const initCommand = new InitCommand({ tools: 'claude', force: true });
58
-
59
- await initCommand.execute(testDir);
60
-
61
- const openspecPath = path.join(testDir, 'openspec');
62
- expect(await directoryExists(openspecPath)).toBe(true);
63
- expect(await directoryExists(path.join(openspecPath, 'specs'))).toBe(true);
64
- expect(await directoryExists(path.join(openspecPath, 'changes'))).toBe(true);
65
- expect(await directoryExists(path.join(openspecPath, 'changes', 'archive'))).toBe(true);
66
- });
67
-
68
- it('should create config.yaml with default schema', async () => {
69
- const initCommand = new InitCommand({ tools: 'claude', force: true });
70
-
71
- await initCommand.execute(testDir);
72
-
73
- const configPath = path.join(testDir, 'openspec', 'config.yaml');
74
- expect(await fileExists(configPath)).toBe(true);
75
-
76
- const content = await fs.readFile(configPath, 'utf-8');
77
- expect(content).toContain('schema: spec-driven');
78
- });
79
-
80
- it('should create core profile skills for Claude Code by default', async () => {
81
- const initCommand = new InitCommand({ tools: 'claude', force: true });
82
-
83
- await initCommand.execute(testDir);
84
-
85
- // Core profile: propose, explore, apply, sync, archive
86
- const coreSkillNames = [
87
- 'openspec-propose',
88
- 'openspec-explore',
89
- 'openspec-apply-change',
90
- 'openspec-sync-specs',
91
- 'openspec-archive-change',
92
- ];
93
-
94
- for (const skillName of coreSkillNames) {
95
- const skillFile = path.join(testDir, '.claude', 'skills', skillName, 'SKILL.md');
96
- expect(await fileExists(skillFile)).toBe(true);
97
-
98
- const content = await fs.readFile(skillFile, 'utf-8');
99
- expect(content).toContain('---');
100
- expect(content).toContain('name:');
101
- expect(content).toContain('description:');
102
- }
103
-
104
- // Non-core skills should NOT be created
105
- const nonCoreSkillNames = [
106
- 'openspec-new-change',
107
- 'openspec-continue-change',
108
- 'openspec-ff-change',
109
- 'openspec-bulk-archive-change',
110
- 'openspec-verify-change',
111
- ];
112
-
113
- for (const skillName of nonCoreSkillNames) {
114
- const skillFile = path.join(testDir, '.claude', 'skills', skillName, 'SKILL.md');
115
- expect(await fileExists(skillFile)).toBe(false);
116
- }
117
- });
118
-
119
- it('should create core profile commands for Claude Code by default', async () => {
120
- const initCommand = new InitCommand({ tools: 'claude', force: true });
121
-
122
- await initCommand.execute(testDir);
123
-
124
- // Core profile: propose, explore, apply, sync, archive
125
- const coreCommandNames = [
126
- 'opsx/propose.md',
127
- 'opsx/explore.md',
128
- 'opsx/apply.md',
129
- 'opsx/sync.md',
130
- 'opsx/archive.md',
131
- ];
132
-
133
- for (const cmdName of coreCommandNames) {
134
- const cmdFile = path.join(testDir, '.claude', 'commands', cmdName);
135
- expect(await fileExists(cmdFile)).toBe(true);
136
- }
137
-
138
- // Non-core commands should NOT be created
139
- const nonCoreCommandNames = [
140
- 'opsx/new.md',
141
- 'opsx/continue.md',
142
- 'opsx/ff.md',
143
- 'opsx/bulk-archive.md',
144
- 'opsx/verify.md',
145
- ];
146
-
147
- for (const cmdName of nonCoreCommandNames) {
148
- const cmdFile = path.join(testDir, '.claude', 'commands', cmdName);
149
- expect(await fileExists(cmdFile)).toBe(false);
150
- }
151
- });
152
-
153
- it('should create skills in Cursor skills directory', async () => {
154
- const initCommand = new InitCommand({ tools: 'cursor', force: true });
155
-
156
- await initCommand.execute(testDir);
157
-
158
- const skillFile = path.join(testDir, '.cursor', 'skills', 'openspec-explore', 'SKILL.md');
159
- expect(await fileExists(skillFile)).toBe(true);
160
- });
161
-
162
- it('should create skills in Windsurf skills directory', async () => {
163
- const initCommand = new InitCommand({ tools: 'windsurf', force: true });
164
-
165
- await initCommand.execute(testDir);
166
-
167
- const skillFile = path.join(testDir, '.windsurf', 'skills', 'openspec-explore', 'SKILL.md');
168
- expect(await fileExists(skillFile)).toBe(true);
169
- });
170
-
171
- it('should support Kimi CLI as an adapterless skills-only tool', async () => {
172
- saveGlobalConfig({
173
- featureFlags: {},
174
- profile: 'core',
175
- delivery: 'both',
176
- });
177
-
178
- const initCommand = new InitCommand({ tools: 'kimi', force: true });
179
- await initCommand.execute(testDir);
180
-
181
- const skillFile = path.join(testDir, '.kimi', 'skills', 'openspec-explore', 'SKILL.md');
182
- expect(await fileExists(skillFile)).toBe(true);
183
-
184
- const commandsDir = path.join(testDir, '.kimi', 'commands');
185
- expect(await directoryExists(commandsDir)).toBe(false);
186
-
187
- const logCalls = (console.log as unknown as { mock: { calls: unknown[][] } }).mock.calls.flat().map(String);
188
- expect(
189
- logCalls.some(
190
- (entry) => entry.includes('Commands skipped for: kimi') && entry.includes('(no adapter)'),
191
- ),
192
- ).toBe(true);
193
- });
194
-
195
- it('should create skills for multiple tools at once', async () => {
196
- const initCommand = new InitCommand({ tools: 'claude,cursor', force: true });
197
-
198
- await initCommand.execute(testDir);
199
-
200
- const claudeSkill = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
201
- const cursorSkill = path.join(testDir, '.cursor', 'skills', 'openspec-explore', 'SKILL.md');
202
-
203
- expect(await fileExists(claudeSkill)).toBe(true);
204
- expect(await fileExists(cursorSkill)).toBe(true);
205
- });
206
-
207
- it('should select all tools with --tools all option', async () => {
208
- const initCommand = new InitCommand({ tools: 'all', force: true });
209
-
210
- await initCommand.execute(testDir);
211
-
212
- // Check a few representative tools
213
- const claudeSkill = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
214
- const cursorSkill = path.join(testDir, '.cursor', 'skills', 'openspec-explore', 'SKILL.md');
215
- const windsurfSkill = path.join(testDir, '.windsurf', 'skills', 'openspec-explore', 'SKILL.md');
216
-
217
- expect(await fileExists(claudeSkill)).toBe(true);
218
- expect(await fileExists(cursorSkill)).toBe(true);
219
- expect(await fileExists(windsurfSkill)).toBe(true);
220
- });
221
-
222
- it('should skip tool configuration with --tools none option', async () => {
223
- const initCommand = new InitCommand({ tools: 'none', force: true });
224
-
225
- await initCommand.execute(testDir);
226
-
227
- // Should create OpenSpec structure but no skills
228
- const openspecPath = path.join(testDir, 'openspec');
229
- expect(await directoryExists(openspecPath)).toBe(true);
230
-
231
- // No tool-specific directories should be created
232
- const claudeSkillsDir = path.join(testDir, '.claude', 'skills');
233
- expect(await directoryExists(claudeSkillsDir)).toBe(false);
234
- });
235
-
236
- it('should throw error for invalid tool names', async () => {
237
- const initCommand = new InitCommand({ tools: 'invalid-tool', force: true });
238
-
239
- await expect(initCommand.execute(testDir)).rejects.toThrow(/Invalid tool\(s\): invalid-tool/);
240
- });
241
-
242
- it('should handle comma-separated tool names with spaces', async () => {
243
- const initCommand = new InitCommand({ tools: 'claude, cursor', force: true });
244
-
245
- await initCommand.execute(testDir);
246
-
247
- const claudeSkill = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
248
- const cursorSkill = path.join(testDir, '.cursor', 'skills', 'openspec-explore', 'SKILL.md');
249
-
250
- expect(await fileExists(claudeSkill)).toBe(true);
251
- expect(await fileExists(cursorSkill)).toBe(true);
252
- });
253
-
254
- it('should reject combining reserved keywords with explicit tool ids', async () => {
255
- const initCommand = new InitCommand({ tools: 'all,claude', force: true });
256
-
257
- await expect(initCommand.execute(testDir)).rejects.toThrow(
258
- /Cannot combine reserved values "all" or "none" with specific tool IDs/
259
- );
260
- });
261
-
262
- it('should not create config.yaml if it already exists', async () => {
263
- // Pre-create config.yaml
264
- const openspecDir = path.join(testDir, 'openspec');
265
- await fs.mkdir(openspecDir, { recursive: true });
266
- const configPath = path.join(openspecDir, 'config.yaml');
267
- const existingContent = 'schema: custom-schema\n';
268
- await fs.writeFile(configPath, existingContent);
269
-
270
- const initCommand = new InitCommand({ tools: 'claude', force: true });
271
- await initCommand.execute(testDir);
272
-
273
- const content = await fs.readFile(configPath, 'utf-8');
274
- expect(content).toBe(existingContent);
275
- });
276
-
277
- it('should handle non-existent target directory', async () => {
278
- const newDir = path.join(testDir, 'new-project');
279
- const initCommand = new InitCommand({ tools: 'claude', force: true });
280
-
281
- await initCommand.execute(newDir);
282
-
283
- const openspecPath = path.join(newDir, 'openspec');
284
- expect(await directoryExists(openspecPath)).toBe(true);
285
- });
286
-
287
- it('should work in extend mode (re-running init)', async () => {
288
- const initCommand1 = new InitCommand({ tools: 'claude', force: true });
289
- await initCommand1.execute(testDir);
290
-
291
- // Run init again with a different tool
292
- const initCommand2 = new InitCommand({ tools: 'cursor', force: true });
293
- await initCommand2.execute(testDir);
294
-
295
- // Both tools should have skills
296
- const claudeSkill = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
297
- const cursorSkill = path.join(testDir, '.cursor', 'skills', 'openspec-explore', 'SKILL.md');
298
-
299
- expect(await fileExists(claudeSkill)).toBe(true);
300
- expect(await fileExists(cursorSkill)).toBe(true);
301
- });
302
-
303
- it('should refresh skills on re-run for the same tool', async () => {
304
- const initCommand1 = new InitCommand({ tools: 'claude', force: true });
305
- await initCommand1.execute(testDir);
306
-
307
- const skillFile = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
308
- const originalContent = await fs.readFile(skillFile, 'utf-8');
309
-
310
- // Modify the file
311
- await fs.writeFile(skillFile, '# Modified content\n');
312
-
313
- // Run init again
314
- const initCommand2 = new InitCommand({ tools: 'claude', force: true });
315
- await initCommand2.execute(testDir);
316
-
317
- const newContent = await fs.readFile(skillFile, 'utf-8');
318
- expect(newContent).toBe(originalContent);
319
- });
320
- });
321
-
322
- describe('skill content validation', () => {
323
- it('should generate valid SKILL.md with YAML frontmatter', async () => {
324
- const initCommand = new InitCommand({ tools: 'claude', force: true });
325
- await initCommand.execute(testDir);
326
-
327
- const skillFile = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
328
- const content = await fs.readFile(skillFile, 'utf-8');
329
-
330
- // Should have YAML frontmatter
331
- expect(content).toMatch(/^---\n/);
332
- expect(content).toContain('name: openspec-explore');
333
- expect(content).toContain('description:');
334
- expect(content).toContain('license:');
335
- expect(content).toContain('compatibility:');
336
- expect(content).toContain('metadata:');
337
- expect(content).toMatch(/---\n\n/); // End of frontmatter
338
- });
339
-
340
- it('should include explore mode instructions', async () => {
341
- const initCommand = new InitCommand({ tools: 'claude', force: true });
342
- await initCommand.execute(testDir);
343
-
344
- const skillFile = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
345
- const content = await fs.readFile(skillFile, 'utf-8');
346
-
347
- expect(content).toContain('Enter explore mode');
348
- expect(content).toContain('thinking partner');
349
- });
350
-
351
- it('should include propose skill instructions', async () => {
352
- const initCommand = new InitCommand({ tools: 'claude', force: true });
353
- await initCommand.execute(testDir);
354
-
355
- const skillFile = path.join(testDir, '.claude', 'skills', 'openspec-propose', 'SKILL.md');
356
- const content = await fs.readFile(skillFile, 'utf-8');
357
-
358
- expect(content).toContain('name: openspec-propose');
359
- });
360
-
361
- it('should include apply-change skill instructions', async () => {
362
- const initCommand = new InitCommand({ tools: 'claude', force: true });
363
- await initCommand.execute(testDir);
364
-
365
- const skillFile = path.join(testDir, '.claude', 'skills', 'openspec-apply-change', 'SKILL.md');
366
- const content = await fs.readFile(skillFile, 'utf-8');
367
-
368
- expect(content).toContain('name: openspec-apply-change');
369
- });
370
-
371
- it('should embed generatedBy version in skill files', async () => {
372
- const initCommand = new InitCommand({ tools: 'claude', force: true });
373
- await initCommand.execute(testDir);
374
-
375
- const skillFile = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
376
- const content = await fs.readFile(skillFile, 'utf-8');
377
-
378
- // Should contain generatedBy field with a version string
379
- expect(content).toMatch(/generatedBy:\s*["']?\d+\.\d+\.\d+["']?/);
380
- });
381
- });
382
-
383
- describe('command generation', () => {
384
- it('should generate Claude Code commands with correct format', async () => {
385
- const initCommand = new InitCommand({ tools: 'claude', force: true });
386
- await initCommand.execute(testDir);
387
-
388
- const cmdFile = path.join(testDir, '.claude', 'commands', 'opsx', 'explore.md');
389
- const content = await fs.readFile(cmdFile, 'utf-8');
390
-
391
- // Claude commands use YAML frontmatter
392
- expect(content).toMatch(/^---\n/);
393
- expect(content).toContain('name:');
394
- expect(content).toContain('description:');
395
- });
396
-
397
- it('should generate Cursor commands with correct format', async () => {
398
- const initCommand = new InitCommand({ tools: 'cursor', force: true });
399
- await initCommand.execute(testDir);
400
-
401
- const cmdFile = path.join(testDir, '.cursor', 'commands', 'opsx-explore.md');
402
- expect(await fileExists(cmdFile)).toBe(true);
403
-
404
- const content = await fs.readFile(cmdFile, 'utf-8');
405
- expect(content).toMatch(/^---\n/);
406
- });
407
- });
408
-
409
- describe('error handling', () => {
410
- it('should provide helpful error for insufficient permissions', async () => {
411
- // Mock the permission check to fail
412
- const readOnlyDir = path.join(testDir, 'readonly');
413
- await fs.mkdir(readOnlyDir);
414
-
415
- const originalWriteFile = fs.writeFile;
416
- vi.spyOn(fs, 'writeFile').mockImplementation(
417
- async (filePath: any, ...args: any[]) => {
418
- if (
419
- typeof filePath === 'string' &&
420
- filePath.includes('.openspec-test-')
421
- ) {
422
- throw new Error('EACCES: permission denied');
423
- }
424
- return originalWriteFile.call(fs, filePath, ...args);
425
- }
426
- );
427
-
428
- const initCommand = new InitCommand({ tools: 'claude', force: true });
429
- await expect(initCommand.execute(readOnlyDir)).rejects.toThrow(/Insufficient permissions/);
430
- });
431
-
432
- it('should throw error in non-interactive mode without --tools flag and no detected tools', async () => {
433
- const initCommand = new InitCommand({ interactive: false });
434
-
435
- await expect(initCommand.execute(testDir)).rejects.toThrow(/No tools detected and no --tools flag/);
436
- });
437
- });
438
-
439
- describe('tool-specific adapters', () => {
440
- it('should generate Gemini CLI commands as TOML files', async () => {
441
- const initCommand = new InitCommand({ tools: 'gemini', force: true });
442
- await initCommand.execute(testDir);
443
-
444
- const cmdFile = path.join(testDir, '.gemini', 'commands', 'opsx', 'explore.toml');
445
- expect(await fileExists(cmdFile)).toBe(true);
446
-
447
- const content = await fs.readFile(cmdFile, 'utf-8');
448
- expect(content).toContain('description =');
449
- expect(content).toContain('prompt =');
450
- });
451
-
452
- it('should generate Windsurf commands', async () => {
453
- const initCommand = new InitCommand({ tools: 'windsurf', force: true });
454
- await initCommand.execute(testDir);
455
-
456
- const cmdFile = path.join(testDir, '.windsurf', 'workflows', 'opsx-explore.md');
457
- expect(await fileExists(cmdFile)).toBe(true);
458
- });
459
-
460
- it('should generate Continue prompt files', async () => {
461
- const initCommand = new InitCommand({ tools: 'continue', force: true });
462
- await initCommand.execute(testDir);
463
-
464
- const cmdFile = path.join(testDir, '.continue', 'prompts', 'opsx-explore.prompt');
465
- expect(await fileExists(cmdFile)).toBe(true);
466
-
467
- const content = await fs.readFile(cmdFile, 'utf-8');
468
- expect(content).toContain('name: opsx-explore');
469
- expect(content).toContain('invokable: true');
470
- });
471
-
472
- it('should generate Cline workflow files', async () => {
473
- const initCommand = new InitCommand({ tools: 'cline', force: true });
474
- await initCommand.execute(testDir);
475
-
476
- const cmdFile = path.join(testDir, '.clinerules', 'workflows', 'opsx-explore.md');
477
- expect(await fileExists(cmdFile)).toBe(true);
478
- });
479
-
480
- it('should generate GitHub Copilot prompt files', async () => {
481
- const initCommand = new InitCommand({ tools: 'github-copilot', force: true });
482
- await initCommand.execute(testDir);
483
-
484
- const cmdFile = path.join(testDir, '.github', 'prompts', 'opsx-explore.prompt.md');
485
- expect(await fileExists(cmdFile)).toBe(true);
486
- });
487
- });
488
- });
489
-
490
- describe('InitCommand - profile and detection features', () => {
491
- let testDir: string;
492
- let configTempDir: string;
493
- let originalEnv: NodeJS.ProcessEnv;
494
-
495
- beforeEach(async () => {
496
- testDir = path.join(os.tmpdir(), `openspec-init-profile-test-${Date.now()}`);
497
- await fs.mkdir(testDir, { recursive: true });
498
- originalEnv = { ...process.env };
499
- // Use a temp dir for global config to avoid polluting real config
500
- configTempDir = path.join(os.tmpdir(), `openspec-config-test-${Date.now()}`);
501
- await fs.mkdir(configTempDir, { recursive: true });
502
- process.env.XDG_CONFIG_HOME = configTempDir;
503
- vi.spyOn(console, 'log').mockImplementation(() => {});
504
- confirmMock.mockReset();
505
- confirmMock.mockResolvedValue(true);
506
- showWelcomeScreenMock.mockClear();
507
- searchableMultiSelectMock.mockReset();
508
- });
509
-
510
- afterEach(async () => {
511
- process.env = originalEnv;
512
- await fs.rm(testDir, { recursive: true, force: true });
513
- await fs.rm(configTempDir, { recursive: true, force: true });
514
- vi.restoreAllMocks();
515
- });
516
-
517
- it('should use --profile flag to override global config', async () => {
518
- // Set global config to custom profile
519
- saveGlobalConfig({
520
- featureFlags: {},
521
- profile: 'custom',
522
- delivery: 'both',
523
- workflows: ['explore', 'new', 'apply'],
524
- });
525
-
526
- // Override with --profile core
527
- const initCommand = new InitCommand({ tools: 'claude', force: true, profile: 'core' });
528
- await initCommand.execute(testDir);
529
-
530
- // Core profile skills should be created
531
- const proposeSkill = path.join(testDir, '.claude', 'skills', 'openspec-propose', 'SKILL.md');
532
- expect(await fileExists(proposeSkill)).toBe(true);
533
-
534
- // Non-core skills (from the custom profile) should NOT be created
535
- const newChangeSkill = path.join(testDir, '.claude', 'skills', 'openspec-new-change', 'SKILL.md');
536
- expect(await fileExists(newChangeSkill)).toBe(false);
537
- });
538
-
539
- it('should reject invalid --profile values', async () => {
540
- const initCommand = new InitCommand({
541
- tools: 'claude',
542
- force: true,
543
- profile: 'invalid-profile',
544
- });
545
-
546
- await expect(initCommand.execute(testDir)).rejects.toThrow(
547
- /Invalid profile "invalid-profile"/
548
- );
549
- });
550
-
551
- it('should use detected tools in non-interactive mode when no --tools flag', async () => {
552
- // Create a .claude directory to simulate detected tool
553
- await fs.mkdir(path.join(testDir, '.claude'), { recursive: true });
554
-
555
- const initCommand = new InitCommand({ interactive: false, force: true });
556
- await initCommand.execute(testDir);
557
-
558
- // Should have used claude (detected)
559
- const skillFile = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
560
- expect(await fileExists(skillFile)).toBe(true);
561
- });
562
-
563
- it('should auto-cleanup legacy artifacts in non-interactive mode without --force', async () => {
564
- // Create legacy OpenCode command files (singular 'command' path)
565
- const legacyDir = path.join(testDir, '.opencode', 'command');
566
- await fs.mkdir(legacyDir, { recursive: true });
567
- await fs.writeFile(path.join(legacyDir, 'opsx-propose.md'), 'legacy content');
568
-
569
- // Run init in non-interactive mode without --force
570
- const initCommand = new InitCommand({ tools: 'opencode' });
571
- await initCommand.execute(testDir);
572
-
573
- // Legacy files should be cleaned up automatically
574
- expect(await fileExists(path.join(legacyDir, 'opsx-propose.md'))).toBe(false);
575
-
576
- // New commands should be at the correct plural path
577
- const newCommandsDir = path.join(testDir, '.opencode', 'commands');
578
- expect(await directoryExists(newCommandsDir)).toBe(true);
579
- });
580
-
581
- it('should preselect configured tools but not directory-detected tools in extend mode', async () => {
582
- // Simulate existing OpenSpec project (extend mode).
583
- await fs.mkdir(path.join(testDir, 'openspec'), { recursive: true });
584
-
585
- // Configured with OpenSpec
586
- const claudeSkillDir = path.join(testDir, '.claude', 'skills', 'openspec-explore');
587
- await fs.mkdir(claudeSkillDir, { recursive: true });
588
- await fs.writeFile(path.join(claudeSkillDir, 'SKILL.md'), 'configured');
589
-
590
- // Directory detected only (not configured with OpenSpec)
591
- await fs.mkdir(path.join(testDir, '.github'), { recursive: true });
592
- await fs.writeFile(path.join(testDir, '.github', 'copilot-instructions.md'), '');
593
-
594
- searchableMultiSelectMock.mockResolvedValue(['claude']);
595
-
596
- const initCommand = new InitCommand({ force: true });
597
- vi.spyOn(initCommand as any, 'canPromptInteractively').mockReturnValue(true);
598
-
599
- await initCommand.execute(testDir);
600
-
601
- expect(searchableMultiSelectMock).toHaveBeenCalledTimes(1);
602
- const [{ choices }] = searchableMultiSelectMock.mock.calls[0] as [{ choices: Array<{ value: string; preSelected?: boolean; detected?: boolean }> }];
603
-
604
- const claude = choices.find((choice) => choice.value === 'claude');
605
- const githubCopilot = choices.find((choice) => choice.value === 'github-copilot');
606
-
607
- expect(claude?.preSelected).toBe(true);
608
- expect(githubCopilot?.preSelected).toBe(false);
609
- expect(githubCopilot?.detected).toBe(true);
610
- });
611
-
612
- it('should preselect detected tools for first-time interactive setup', async () => {
613
- // First-time init: no openspec/ directory and no configured OpenSpec skills.
614
- await fs.mkdir(path.join(testDir, '.github'), { recursive: true });
615
- await fs.writeFile(path.join(testDir, '.github', 'copilot-instructions.md'), '');
616
-
617
- searchableMultiSelectMock.mockResolvedValue(['github-copilot']);
618
-
619
- const initCommand = new InitCommand({ force: true });
620
- vi.spyOn(initCommand as any, 'canPromptInteractively').mockReturnValue(true);
621
-
622
- await initCommand.execute(testDir);
623
-
624
- expect(searchableMultiSelectMock).toHaveBeenCalledTimes(1);
625
- const [{ choices }] = searchableMultiSelectMock.mock.calls[0] as [{ choices: Array<{ value: string; preSelected?: boolean }> }];
626
- const githubCopilot = choices.find((choice) => choice.value === 'github-copilot');
627
-
628
- expect(githubCopilot?.preSelected).toBe(true);
629
- });
630
-
631
- it('should respect custom profile from global config', async () => {
632
- saveGlobalConfig({
633
- featureFlags: {},
634
- profile: 'custom',
635
- delivery: 'both',
636
- workflows: ['explore', 'new'],
637
- });
638
-
639
- const initCommand = new InitCommand({ tools: 'claude', force: true });
640
- await initCommand.execute(testDir);
641
-
642
- // Custom profile skills should be created
643
- const exploreSkill = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
644
- const newChangeSkill = path.join(testDir, '.claude', 'skills', 'openspec-new-change', 'SKILL.md');
645
- expect(await fileExists(exploreSkill)).toBe(true);
646
- expect(await fileExists(newChangeSkill)).toBe(true);
647
-
648
- // Non-selected skills should NOT be created
649
- const proposeSkill = path.join(testDir, '.claude', 'skills', 'openspec-propose', 'SKILL.md');
650
- expect(await fileExists(proposeSkill)).toBe(false);
651
- });
652
-
653
- it('should migrate commands-only extend mode to custom profile without injecting propose', async () => {
654
- await fs.mkdir(path.join(testDir, 'openspec'), { recursive: true });
655
- await fs.mkdir(path.join(testDir, '.claude', 'commands', 'opsx'), { recursive: true });
656
- await fs.writeFile(path.join(testDir, '.claude', 'commands', 'opsx', 'explore.md'), '# explore\n');
657
-
658
- const initCommand = new InitCommand({ tools: 'claude', force: true });
659
- await initCommand.execute(testDir);
660
-
661
- const config = getGlobalConfig();
662
- expect(config.profile).toBe('custom');
663
- expect(config.delivery).toBe('commands');
664
- expect(config.workflows).toEqual(['explore']);
665
-
666
- const exploreCommand = path.join(testDir, '.claude', 'commands', 'opsx', 'explore.md');
667
- const proposeCommand = path.join(testDir, '.claude', 'commands', 'opsx', 'propose.md');
668
- expect(await fileExists(exploreCommand)).toBe(true);
669
- expect(await fileExists(proposeCommand)).toBe(false);
670
-
671
- const exploreSkill = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
672
- const proposeSkill = path.join(testDir, '.claude', 'skills', 'openspec-propose', 'SKILL.md');
673
- expect(await fileExists(exploreSkill)).toBe(false);
674
- expect(await fileExists(proposeSkill)).toBe(false);
675
- });
676
-
677
- it('should not prompt for confirmation when applying custom profile in interactive init', async () => {
678
- saveGlobalConfig({
679
- featureFlags: {},
680
- profile: 'custom',
681
- delivery: 'both',
682
- workflows: ['explore', 'new'],
683
- });
684
-
685
- const initCommand = new InitCommand({ force: true });
686
- vi.spyOn(initCommand as any, 'canPromptInteractively').mockReturnValue(true);
687
- vi.spyOn(initCommand as any, 'getSelectedTools').mockResolvedValue(['claude']);
688
-
689
- await initCommand.execute(testDir);
690
-
691
- expect(showWelcomeScreenMock).toHaveBeenCalled();
692
- expect(confirmMock).not.toHaveBeenCalled();
693
-
694
- const exploreSkill = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
695
- const newChangeSkill = path.join(testDir, '.claude', 'skills', 'openspec-new-change', 'SKILL.md');
696
- expect(await fileExists(exploreSkill)).toBe(true);
697
- expect(await fileExists(newChangeSkill)).toBe(true);
698
-
699
- const logCalls = (console.log as unknown as { mock: { calls: unknown[][] } }).mock.calls.flat().map(String);
700
- expect(logCalls.some((entry) => entry.includes('Applying custom profile'))).toBe(false);
701
- });
702
-
703
- it('should respect delivery=skills setting (no commands)', async () => {
704
- saveGlobalConfig({
705
- featureFlags: {},
706
- profile: 'core',
707
- delivery: 'skills',
708
- });
709
-
710
- const initCommand = new InitCommand({ tools: 'claude', force: true });
711
- await initCommand.execute(testDir);
712
-
713
- // Skills should exist
714
- const skillFile = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
715
- expect(await fileExists(skillFile)).toBe(true);
716
-
717
- // Commands should NOT exist
718
- const cmdFile = path.join(testDir, '.claude', 'commands', 'opsx', 'explore.md');
719
- expect(await fileExists(cmdFile)).toBe(false);
720
- });
721
-
722
- it('should respect delivery=commands setting (no skills)', async () => {
723
- saveGlobalConfig({
724
- featureFlags: {},
725
- profile: 'core',
726
- delivery: 'commands',
727
- });
728
-
729
- const initCommand = new InitCommand({ tools: 'claude', force: true });
730
- await initCommand.execute(testDir);
731
-
732
- // Skills should NOT exist
733
- const skillFile = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
734
- expect(await fileExists(skillFile)).toBe(false);
735
-
736
- // Commands should exist
737
- const cmdFile = path.join(testDir, '.claude', 'commands', 'opsx', 'explore.md');
738
- expect(await fileExists(cmdFile)).toBe(true);
739
- });
740
-
741
- it('should remove commands on re-init when delivery changes to skills', async () => {
742
- saveGlobalConfig({
743
- featureFlags: {},
744
- profile: 'core',
745
- delivery: 'both',
746
- });
747
-
748
- const initCommand1 = new InitCommand({ tools: 'claude', force: true });
749
- await initCommand1.execute(testDir);
750
-
751
- const cmdFile = path.join(testDir, '.claude', 'commands', 'opsx', 'explore.md');
752
- expect(await fileExists(cmdFile)).toBe(true);
753
-
754
- saveGlobalConfig({
755
- featureFlags: {},
756
- profile: 'core',
757
- delivery: 'skills',
758
- });
759
-
760
- const initCommand2 = new InitCommand({ tools: 'claude', force: true });
761
- await initCommand2.execute(testDir);
762
-
763
- expect(await fileExists(cmdFile)).toBe(false);
764
-
765
- const skillFile = path.join(testDir, '.claude', 'skills', 'openspec-explore', 'SKILL.md');
766
- expect(await fileExists(skillFile)).toBe(true);
767
- });
768
- });
769
-
770
- async function fileExists(filePath: string): Promise<boolean> {
771
- try {
772
- await fs.access(filePath);
773
- return true;
774
- } catch {
775
- return false;
776
- }
777
- }
778
-
779
- async function directoryExists(dirPath: string): Promise<boolean> {
780
- try {
781
- const stats = await fs.stat(dirPath);
782
- return stats.isDirectory();
783
- } catch {
784
- return false;
785
- }
786
- }