sauron-cli 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (655) hide show
  1. package/.genesis/prompts/CLI Init_ Atualiza/303/247/303/243o com Mem/303/263ria.md" +133 -0
  2. package/.genesis/prompts/prompt-sauron-update-intelligence.md +20 -0
  3. package/README.md +4 -2
  4. package/dist/index.js +59 -15
  5. package/package.json +1 -1
  6. package/templates/.agents/rules/memory.md +68 -68
  7. package/templates/.agents/skills/wiki/SKILL.md +14 -14
  8. package/55ea973d-e255-4f08-a313-a5d68243bd2d.png +0 -0
  9. package/OpenSpec-main/.actrc +0 -1
  10. package/OpenSpec-main/.changeset/README.md +0 -97
  11. package/OpenSpec-main/.changeset/config.json +0 -15
  12. package/OpenSpec-main/.coderabbit.yaml +0 -11
  13. package/OpenSpec-main/.devcontainer/README.md +0 -92
  14. package/OpenSpec-main/.devcontainer/devcontainer.json +0 -68
  15. package/OpenSpec-main/.github/CODEOWNERS +0 -2
  16. package/OpenSpec-main/.github/workflows/README.md +0 -20
  17. package/OpenSpec-main/.github/workflows/ci.yml +0 -346
  18. package/OpenSpec-main/.github/workflows/release-prepare.yml +0 -60
  19. package/OpenSpec-main/CHANGELOG.md +0 -594
  20. package/OpenSpec-main/LICENSE +0 -22
  21. package/OpenSpec-main/MAINTAINERS.md +0 -17
  22. package/OpenSpec-main/README.md +0 -206
  23. package/OpenSpec-main/README_OLD.md +0 -475
  24. package/OpenSpec-main/assets/openspec_bg.png +0 -0
  25. package/OpenSpec-main/assets/openspec_dashboard.png +0 -0
  26. package/OpenSpec-main/assets/openspec_pixel_dark.svg +0 -89
  27. package/OpenSpec-main/assets/openspec_pixel_light.svg +0 -89
  28. package/OpenSpec-main/bin/openspec.js +0 -5
  29. package/OpenSpec-main/build.js +0 -31
  30. package/OpenSpec-main/eslint.config.js +0 -42
  31. package/OpenSpec-main/flake.lock +0 -27
  32. package/OpenSpec-main/flake.nix +0 -114
  33. package/OpenSpec-main/openspec/changes/IMPLEMENTATION_ORDER.md +0 -68
  34. package/OpenSpec-main/openspec/changes/add-artifact-regeneration-support/proposal.md +0 -136
  35. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/.openspec.yaml +0 -2
  36. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/proposal.md +0 -93
  37. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/change-creation/spec.md +0 -15
  38. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/change-stacking-workflow/spec.md +0 -65
  39. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/cli-change/spec.md +0 -27
  40. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/specs/openspec-conventions/spec.md +0 -29
  41. package/OpenSpec-main/openspec/changes/add-change-stacking-awareness/tasks.md +0 -39
  42. package/OpenSpec-main/openspec/changes/add-global-install-scope/.openspec.yaml +0 -2
  43. package/OpenSpec-main/openspec/changes/add-global-install-scope/design.md +0 -161
  44. package/OpenSpec-main/openspec/changes/add-global-install-scope/proposal.md +0 -101
  45. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/ai-tool-paths/spec.md +0 -35
  46. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-config/spec.md +0 -21
  47. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-init/spec.md +0 -28
  48. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/cli-update/spec.md +0 -34
  49. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/command-generation/spec.md +0 -22
  50. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/global-config/spec.md +0 -24
  51. package/OpenSpec-main/openspec/changes/add-global-install-scope/specs/installation-scope/spec.md +0 -71
  52. package/OpenSpec-main/openspec/changes/add-global-install-scope/tasks.md +0 -61
  53. package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/.openspec.yaml +0 -2
  54. package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/proposal.md +0 -45
  55. package/OpenSpec-main/openspec/changes/add-qa-smoke-harness/specs/developer-qa-workflow/spec.md +0 -49
  56. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/.openspec.yaml +0 -2
  57. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/proposal.md +0 -111
  58. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/specs/cli-init/spec.md +0 -121
  59. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/specs/cli-update/spec.md +0 -48
  60. package/OpenSpec-main/openspec/changes/add-tool-command-surface-capabilities/tasks.md +0 -53
  61. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/design.md +0 -86
  62. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/proposal.md +0 -29
  63. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/specs/cli-update/spec.md +0 -59
  64. package/OpenSpec-main/openspec/changes/archive/2025-01-11-add-update-command/tasks.md +0 -20
  65. package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/proposal.md +0 -20
  66. package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/specs/cli-list/spec.md +0 -69
  67. package/OpenSpec-main/openspec/changes/archive/2025-01-13-add-list-command/tasks.md +0 -26
  68. package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/design.md +0 -64
  69. package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/proposal.md +0 -18
  70. package/OpenSpec-main/openspec/changes/archive/2025-08-05-initialize-typescript-project/tasks.md +0 -25
  71. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/design.md +0 -104
  72. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/proposal.md +0 -30
  73. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/specs/cli-init/spec.md +0 -148
  74. package/OpenSpec-main/openspec/changes/archive/2025-08-06-add-init-command/tasks.md +0 -38
  75. package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/proposal.md +0 -24
  76. package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/specs/openspec-conventions/spec.md +0 -120
  77. package/OpenSpec-main/openspec/changes/archive/2025-08-06-adopt-future-state-storage/tasks.md +0 -38
  78. package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/proposal.md +0 -13
  79. package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/specs/openspec-docs/README.md +0 -472
  80. package/OpenSpec-main/openspec/changes/archive/2025-08-11-add-complexity-guidelines/tasks.md +0 -9
  81. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/proposal.md +0 -15
  82. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/specs/cli-archive/spec.md +0 -111
  83. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-archive-command/tasks.md +0 -44
  84. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/proposal.md +0 -19
  85. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/specs/cli-diff/spec.md +0 -77
  86. package/OpenSpec-main/openspec/changes/archive/2025-08-13-add-diff-command/tasks.md +0 -23
  87. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/design.md +0 -56
  88. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/proposal.md +0 -17
  89. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/specs/cli-change/spec.md +0 -48
  90. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/specs/cli-list/spec.md +0 -12
  91. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-change-commands/tasks.md +0 -34
  92. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/proposal.md +0 -20
  93. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-change/spec.md +0 -23
  94. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-show/spec.md +0 -83
  95. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/specs/cli-spec/spec.md +0 -23
  96. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-interactive-show-command/tasks.md +0 -142
  97. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/proposal.md +0 -13
  98. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/specs/cli-archive/spec.md +0 -191
  99. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-skip-specs-archive-option/tasks.md +0 -57
  100. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/design.md +0 -45
  101. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/proposal.md +0 -19
  102. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/specs/cli-spec/spec.md +0 -43
  103. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-spec-commands/tasks.md +0 -22
  104. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/design.md +0 -104
  105. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/proposal.md +0 -22
  106. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/specs/cli-archive/spec.md +0 -18
  107. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/specs/cli-diff/spec.md +0 -12
  108. package/OpenSpec-main/openspec/changes/archive/2025-08-19-add-zod-validation/tasks.md +0 -59
  109. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/proposal.md +0 -93
  110. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/cli-archive/spec.md +0 -48
  111. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/cli-diff/spec.md +0 -45
  112. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/specs/openspec-conventions/spec.md +0 -101
  113. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-delta-based-changes/tasks.md +0 -55
  114. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/design.md +0 -19
  115. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/proposal.md +0 -67
  116. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/specs/cli-list/spec.md +0 -57
  117. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/specs/openspec-conventions/spec.md +0 -23
  118. package/OpenSpec-main/openspec/changes/archive/2025-08-19-adopt-verb-noun-cli-structure/tasks.md +0 -27
  119. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/proposal.md +0 -20
  120. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-change/spec.md +0 -22
  121. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-spec/spec.md +0 -23
  122. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/specs/cli-validate/spec.md +0 -149
  123. package/OpenSpec-main/openspec/changes/archive/2025-08-19-bulk-validation-interactive-selection/tasks.md +0 -81
  124. package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/proposal.md +0 -40
  125. package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/specs/cli-update/spec.md +0 -23
  126. package/OpenSpec-main/openspec/changes/archive/2025-08-19-fix-update-tool-selection/tasks.md +0 -21
  127. package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/proposal.md +0 -25
  128. package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/specs/cli-validate/spec.md +0 -55
  129. package/OpenSpec-main/openspec/changes/archive/2025-08-19-improve-validate-error-messages/tasks.md +0 -21
  130. package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/proposal.md +0 -36
  131. package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/specs/openspec-conventions/spec.md +0 -192
  132. package/OpenSpec-main/openspec/changes/archive/2025-08-19-structured-spec-format/tasks.md +0 -19
  133. package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/proposal.md +0 -38
  134. package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/specs/cli-view/spec.md +0 -109
  135. package/OpenSpec-main/openspec/changes/archive/2025-09-12-add-view-dashboard-command/tasks.md +0 -47
  136. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/proposal.md +0 -28
  137. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/specs/cli-init/spec.md +0 -71
  138. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/specs/cli-update/spec.md +0 -41
  139. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-agents-md-config/tasks.md +0 -17
  140. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/proposal.md +0 -35
  141. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/specs/cli-init/spec.md +0 -45
  142. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-multi-agent-init/tasks.md +0 -16
  143. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/proposal.md +0 -119
  144. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/specs/cli-init/spec.md +0 -21
  145. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/specs/cli-update/spec.md +0 -22
  146. package/OpenSpec-main/openspec/changes/archive/2025-09-29-add-slash-command-support/tasks.md +0 -20
  147. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-cli-e2e-plan/proposal.md +0 -19
  148. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-cli-e2e-plan/tasks.md +0 -9
  149. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-deterministic-tests/proposal.md +0 -78
  150. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-deterministic-tests/tasks.md +0 -25
  151. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/proposal.md +0 -13
  152. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/specs/cli-init/spec.md +0 -92
  153. package/OpenSpec-main/openspec/changes/archive/2025-09-29-improve-init-onboarding/tasks.md +0 -12
  154. package/OpenSpec-main/openspec/changes/archive/2025-09-29-remove-diff-command/proposal.md +0 -81
  155. package/OpenSpec-main/openspec/changes/archive/2025-09-29-remove-diff-command/tasks.md +0 -37
  156. package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/proposal.md +0 -25
  157. package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/specs/cli-view/spec.md +0 -9
  158. package/OpenSpec-main/openspec/changes/archive/2025-09-29-sort-active-changes-by-progress/tasks.md +0 -8
  159. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/proposal.md +0 -29
  160. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/cli-init/spec.md +0 -40
  161. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/cli-update/spec.md +0 -22
  162. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/specs/openspec-conventions/spec.md +0 -27
  163. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-file-name/tasks.md +0 -22
  164. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/design.md +0 -130
  165. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/proposal.md +0 -117
  166. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-agent-instructions/tasks.md +0 -69
  167. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/proposal.md +0 -19
  168. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/specs/cli-validate/spec.md +0 -9
  169. package/OpenSpec-main/openspec/changes/archive/2025-09-29-update-markdown-parser-crlf/tasks.md +0 -11
  170. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/proposal.md +0 -25
  171. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/specs/cli-init/spec.md +0 -56
  172. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/specs/cli-update/spec.md +0 -41
  173. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-codex-slash-command-support/tasks.md +0 -19
  174. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/proposal.md +0 -25
  175. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/specs/cli-init/spec.md +0 -48
  176. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/specs/cli-update/spec.md +0 -48
  177. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-github-copilot-prompts/tasks.md +0 -30
  178. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/proposal.md +0 -17
  179. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/specs/cli-init/spec.md +0 -43
  180. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/specs/cli-update/spec.md +0 -27
  181. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-kilocode-workflows/tasks.md +0 -15
  182. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/proposal.md +0 -12
  183. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/specs/cli-init/spec.md +0 -39
  184. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-non-interactive-init-options/tasks.md +0 -17
  185. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/proposal.md +0 -17
  186. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/specs/cli-init/spec.md +0 -42
  187. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/specs/cli-update/spec.md +0 -27
  188. package/OpenSpec-main/openspec/changes/archive/2025-10-14-add-windsurf-workflows/tasks.md +0 -17
  189. package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/proposal.md +0 -12
  190. package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/specs/cli-validate/spec.md +0 -39
  191. package/OpenSpec-main/openspec/changes/archive/2025-10-14-enhance-validation-error-messages/tasks.md +0 -12
  192. package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/proposal.md +0 -12
  193. package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/specs/docs-agent-instructions/spec.md +0 -33
  194. package/OpenSpec-main/openspec/changes/archive/2025-10-14-improve-agent-instruction-usability/tasks.md +0 -11
  195. package/OpenSpec-main/openspec/changes/archive/2025-10-14-slim-root-agents-file/proposal.md +0 -13
  196. package/OpenSpec-main/openspec/changes/archive/2025-10-14-slim-root-agents-file/tasks.md +0 -15
  197. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/proposal.md +0 -14
  198. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/specs/cli-init/spec.md +0 -10
  199. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-enter-selection/tasks.md +0 -8
  200. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/proposal.md +0 -15
  201. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/specs/cli-init/spec.md +0 -32
  202. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/specs/cli-update/spec.md +0 -10
  203. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-cli-init-root-agents/tasks.md +0 -11
  204. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-release-automation/proposal.md +0 -49
  205. package/OpenSpec-main/openspec/changes/archive/2025-10-14-update-release-automation/tasks.md +0 -12
  206. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/proposal.md +0 -17
  207. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/specs/cli-update/spec.md +0 -32
  208. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-archive-command-arguments/tasks.md +0 -15
  209. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/proposal.md +0 -15
  210. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/specs/cli-init/spec.md +0 -97
  211. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-cline-support/tasks.md +0 -19
  212. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/proposal.md +0 -13
  213. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/specs/cli-init/spec.md +0 -67
  214. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-crush-support/tasks.md +0 -7
  215. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/proposal.md +0 -12
  216. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/specs/cli-init/spec.md +0 -54
  217. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/specs/cli-update/spec.md +0 -54
  218. package/OpenSpec-main/openspec/changes/archive/2025-10-22-add-factory-slash-commands/tasks.md +0 -11
  219. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/design.md +0 -525
  220. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/proposal.md +0 -29
  221. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/specs/cli-completion/spec.md +0 -300
  222. package/OpenSpec-main/openspec/changes/archive/2025-11-06-add-shell-completions/tasks.md +0 -81
  223. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/design.md +0 -105
  224. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/proposal.md +0 -20
  225. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/specs/global-config/spec.md +0 -76
  226. package/OpenSpec-main/openspec/changes/archive/2025-12-20-add-global-config-dir/tasks.md +0 -26
  227. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/design.md +0 -89
  228. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/proposal.md +0 -60
  229. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/specs/cli-config/spec.md +0 -213
  230. package/OpenSpec-main/openspec/changes/archive/2025-12-21-add-config-command/tasks.md +0 -28
  231. package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/proposal.md +0 -15
  232. package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/specs/cli-completion/spec.md +0 -328
  233. package/OpenSpec-main/openspec/changes/archive/2025-12-23-extend-shell-completions/tasks.md +0 -49
  234. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/design.md +0 -197
  235. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/proposal.md +0 -18
  236. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/specs/artifact-graph/spec.md +0 -103
  237. package/OpenSpec-main/openspec/changes/archive/2025-12-24-add-artifact-graph-core/tasks.md +0 -61
  238. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/design.md +0 -74
  239. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/proposal.md +0 -45
  240. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/specs/change-creation/spec.md +0 -63
  241. package/OpenSpec-main/openspec/changes/archive/2025-12-25-add-change-manager/tasks.md +0 -30
  242. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/design.md +0 -112
  243. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/proposal.md +0 -33
  244. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/specs/cli-artifact-workflow/spec.md +0 -153
  245. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-artifact-workflow-cli/tasks.md +0 -48
  246. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/design.md +0 -149
  247. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/proposal.md +0 -20
  248. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/specs/instruction-loader/spec.md +0 -70
  249. package/OpenSpec-main/openspec/changes/archive/2025-12-28-add-instruction-loader/tasks.md +0 -13
  250. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/design.md +0 -129
  251. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/proposal.md +0 -20
  252. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/specs/artifact-graph/spec.md +0 -49
  253. package/OpenSpec-main/openspec/changes/archive/2025-12-28-restructure-schema-directories/tasks.md +0 -32
  254. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/design.md +0 -151
  255. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/proposal.md +0 -101
  256. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/specs/cli-artifact-workflow/spec.md +0 -109
  257. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/specs/cli-view/spec.md +0 -60
  258. package/OpenSpec-main/openspec/changes/archive/2025-12-29-unify-change-state-model/tasks.md +0 -25
  259. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/proposal.md +0 -11
  260. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-init/spec.md +0 -105
  261. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/specs/cli-update/spec.md +0 -92
  262. package/OpenSpec-main/openspec/changes/archive/2025-12-30-add-antigravity-support/tasks.md +0 -12
  263. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/proposal.md +0 -13
  264. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-init/spec.md +0 -105
  265. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/specs/cli-update/spec.md +0 -92
  266. package/OpenSpec-main/openspec/changes/archive/2025-12-30-fix-cline-workflows-implementation/tasks.md +0 -13
  267. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-agent-schema-selection/proposal.md +0 -26
  268. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-agent-schema-selection/tasks.md +0 -32
  269. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/design.md +0 -147
  270. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/proposal.md +0 -29
  271. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/specs/cli-artifact-workflow/spec.md +0 -98
  272. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-per-change-schema-metadata/tasks.md +0 -29
  273. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/.openspec.yaml +0 -2
  274. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/design.md +0 -77
  275. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/proposal.md +0 -32
  276. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/specs/specs-sync-skill/spec.md +0 -67
  277. package/OpenSpec-main/openspec/changes/archive/2026-01-06-add-specs-apply-command/tasks.md +0 -40
  278. package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/proposal.md +0 -138
  279. package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/specs/cli-artifact-workflow/spec.md +0 -60
  280. package/OpenSpec-main/openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/tasks.md +0 -35
  281. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/.openspec.yaml +0 -2
  282. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/design.md +0 -84
  283. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/proposal.md +0 -28
  284. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/specs/opsx-archive-skill/spec.md +0 -122
  285. package/OpenSpec-main/openspec/changes/archive/2026-01-06-opsx-archive-command/tasks.md +0 -23
  286. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/.openspec.yaml +0 -2
  287. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/design.md +0 -94
  288. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/proposal.md +0 -25
  289. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/specs/nix-flake-support/spec.md +0 -79
  290. package/OpenSpec-main/openspec/changes/archive/2026-01-07-add-nix-flake-support/tasks.md +0 -65
  291. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/.openspec.yaml +0 -2
  292. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/design.md +0 -117
  293. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/proposal.md +0 -23
  294. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/specs/flake-update-script/spec.md +0 -93
  295. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-flake-update-script/tasks.md +0 -55
  296. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/.openspec.yaml +0 -2
  297. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/design.md +0 -175
  298. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/proposal.md +0 -37
  299. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/specs/global-config/spec.md +0 -21
  300. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/specs/telemetry/spec.md +0 -116
  301. package/OpenSpec-main/openspec/changes/archive/2026-01-09-add-posthog-analytics/tasks.md +0 -47
  302. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/proposal.md +0 -16
  303. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/specs/cli-init/spec.md +0 -75
  304. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/specs/cli-update/spec.md +0 -56
  305. package/OpenSpec-main/openspec/changes/archive/2026-01-09-fix-codebuddy-frontmatter-fields/tasks.md +0 -6
  306. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/design.md +0 -206
  307. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/proposal.md +0 -21
  308. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/specs/ci-nix-validation/spec.md +0 -104
  309. package/OpenSpec-main/openspec/changes/archive/2026-01-15-add-nix-ci-validation/tasks.md +0 -49
  310. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/.openspec.yaml +0 -2
  311. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/README.md +0 -3
  312. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/design.md +0 -70
  313. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/proposal.md +0 -32
  314. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/specs/no-changes.md +0 -9
  315. package/OpenSpec-main/openspec/changes/archive/2026-01-30-opencode-command-references/tasks.md +0 -22
  316. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/proposal.md +0 -20
  317. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/specs/cli-feedback/spec.md +0 -188
  318. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-feedback-command/tasks.md +0 -30
  319. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/.openspec.yaml +0 -2
  320. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/design.md +0 -115
  321. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/proposal.md +0 -27
  322. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/specs/opsx-onboard-skill/spec.md +0 -162
  323. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-opsx-onboard-skill/tasks.md +0 -21
  324. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/design.md +0 -96
  325. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/proposal.md +0 -48
  326. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/specs/opsx-verify-skill/spec.md +0 -190
  327. package/OpenSpec-main/openspec/changes/archive/2026-02-17-add-verify-skill/tasks.md +0 -15
  328. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/.openspec.yaml +0 -2
  329. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/design.md +0 -193
  330. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/proposal.md +0 -32
  331. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/specs/cli-init/spec.md +0 -176
  332. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/specs/legacy-cleanup/spec.md +0 -158
  333. package/OpenSpec-main/openspec/changes/archive/2026-02-17-merge-init-experimental/tasks.md +0 -67
  334. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/.openspec.yaml +0 -2
  335. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/design.md +0 -144
  336. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/proposal.md +0 -36
  337. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/ai-tool-paths/spec.md +0 -63
  338. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/cli-artifact-workflow/spec.md +0 -60
  339. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/specs/command-generation/spec.md +0 -98
  340. package/OpenSpec-main/openspec/changes/archive/2026-02-17-multi-provider-skill-generation/tasks.md +0 -55
  341. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/.openspec.yaml +0 -2
  342. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/design.md +0 -665
  343. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/proposal.md +0 -774
  344. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/config-loading/spec.md +0 -119
  345. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/context-injection/spec.md +0 -51
  346. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/rules-injection/spec.md +0 -99
  347. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/specs/schema-resolution/spec.md +0 -83
  348. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-config/tasks.md +0 -72
  349. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/.openspec.yaml +0 -2
  350. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/design.md +0 -117
  351. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/proposal.md +0 -167
  352. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/specs/schema-resolution/spec.md +0 -88
  353. package/OpenSpec-main/openspec/changes/archive/2026-02-17-project-local-schemas/tasks.md +0 -28
  354. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/.openspec.yaml +0 -2
  355. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/design.md +0 -113
  356. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/proposal.md +0 -55
  357. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-fork-command/spec.md +0 -66
  358. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-init-command/spec.md +0 -71
  359. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-validate-command/spec.md +0 -86
  360. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/specs/schema-which-command/spec.md +0 -65
  361. package/OpenSpec-main/openspec/changes/archive/2026-02-17-schema-management-cli/tasks.md +0 -67
  362. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/.openspec.yaml +0 -2
  363. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/README.md +0 -3
  364. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/design.md +0 -85
  365. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/proposal.md +0 -38
  366. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/specs/ai-tool-paths/spec.md +0 -12
  367. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/specs/cli-init/spec.md +0 -37
  368. package/OpenSpec-main/openspec/changes/archive/2026-04-23-add-kimi-cli-skills-only-support/tasks.md +0 -22
  369. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/design.md +0 -208
  370. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/proposal.md +0 -142
  371. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/specs/openspec-conventions/spec.md +0 -29
  372. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/specs/workspace-foundation/spec.md +0 -199
  373. package/OpenSpec-main/openspec/changes/archive/2026-05-04-workspace-foundation/tasks.md +0 -56
  374. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/design.md +0 -356
  375. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/proposal.md +0 -128
  376. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/cli-artifact-workflow/spec.md +0 -24
  377. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/workspace-foundation/spec.md +0 -35
  378. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/specs/workspace-links/spec.md +0 -356
  379. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-create-and-register-repos/tasks.md +0 -121
  380. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/design.md +0 -266
  381. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/proposal.md +0 -65
  382. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/specs/workspace-foundation/spec.md +0 -76
  383. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/specs/workspace-open/spec.md +0 -199
  384. package/OpenSpec-main/openspec/changes/archive/2026-05-06-workspace-open-agent-context/tasks.md +0 -89
  385. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/design.md +0 -242
  386. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/proposal.md +0 -78
  387. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/artifact-graph/spec.md +0 -36
  388. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/change-creation/spec.md +0 -42
  389. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-artifact-workflow/spec.md +0 -100
  390. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-config/spec.md +0 -55
  391. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/cli-update/spec.md +0 -21
  392. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/openspec-conventions/spec.md +0 -32
  393. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/schema-resolution/spec.md +0 -25
  394. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/workspace-change-planning/spec.md +0 -67
  395. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/specs/workspace-links/spec.md +0 -163
  396. package/OpenSpec-main/openspec/changes/archive/2026-05-14-workspace-change-planning/tasks.md +0 -133
  397. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/.openspec.yaml +0 -2
  398. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/design.md +0 -48
  399. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/proposal.md +0 -26
  400. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/specs/command-generation/spec.md +0 -63
  401. package/OpenSpec-main/openspec/changes/fix-opencode-commands-directory/tasks.md +0 -19
  402. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/.openspec.yaml +0 -2
  403. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/design.md +0 -38
  404. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/proposal.md +0 -25
  405. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/specs/graceful-status-empty/spec.md +0 -27
  406. package/OpenSpec-main/openspec/changes/graceful-status-no-changes/tasks.md +0 -16
  407. package/OpenSpec-main/openspec/changes/schema-alias-support/.openspec.yaml +0 -2
  408. package/OpenSpec-main/openspec/changes/schema-alias-support/proposal.md +0 -28
  409. package/OpenSpec-main/openspec/changes/simplify-skill-installation/.openspec.yaml +0 -2
  410. package/OpenSpec-main/openspec/changes/simplify-skill-installation/design.md +0 -288
  411. package/OpenSpec-main/openspec/changes/simplify-skill-installation/proposal.md +0 -202
  412. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/cli-init/spec.md +0 -199
  413. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/cli-update/spec.md +0 -177
  414. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/profiles/spec.md +0 -142
  415. package/OpenSpec-main/openspec/changes/simplify-skill-installation/specs/propose-workflow/spec.md +0 -42
  416. package/OpenSpec-main/openspec/changes/simplify-skill-installation/tasks.md +0 -132
  417. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/.openspec.yaml +0 -2
  418. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/design.md +0 -149
  419. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/proposal.md +0 -47
  420. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/specs/template-artifact-pipeline/spec.md +0 -89
  421. package/OpenSpec-main/openspec/changes/unify-template-generation-pipeline/tasks.md +0 -41
  422. package/OpenSpec-main/openspec/changes/workspace-agent-guidance/.openspec.yaml +0 -2
  423. package/OpenSpec-main/openspec/changes/workspace-agent-guidance/proposal.md +0 -100
  424. package/OpenSpec-main/openspec/changes/workspace-apply-repo-slice/proposal.md +0 -58
  425. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/HISTORICAL_DIRECTION.md +0 -511
  426. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/POC_REFERENCE_GUIDE.md +0 -266
  427. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/README.md +0 -107
  428. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/START_HERE.md +0 -105
  429. package/OpenSpec-main/openspec/changes/workspace-reimplementation-roadmap/proposal.md +0 -62
  430. package/OpenSpec-main/openspec/changes/workspace-verify-and-archive/proposal.md +0 -57
  431. package/OpenSpec-main/openspec/config.yaml +0 -36
  432. package/OpenSpec-main/openspec/explorations/explore-workflow-ux.md +0 -116
  433. package/OpenSpec-main/openspec/explorations/workspace-architecture.md +0 -857
  434. package/OpenSpec-main/openspec/explorations/workspace-roadmap.md +0 -367
  435. package/OpenSpec-main/openspec/explorations/workspace-user-journeys.md +0 -2259
  436. package/OpenSpec-main/openspec/explorations/workspace-ux-simplification.md +0 -491
  437. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/.initiative.yaml +0 -27
  438. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/README.md +0 -33
  439. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/decisions.md +0 -204
  440. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/direction.md +0 -447
  441. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/questions.md +0 -23
  442. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/roadmap.md +0 -759
  443. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/tasks.md +0 -308
  444. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/evidence.md +0 -154
  445. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/plan.md +0 -90
  446. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/01-lock-the-direction/tasks.md +0 -44
  447. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/evidence.md +0 -68
  448. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/plan.md +0 -80
  449. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/02-stabilize-workspace-as-local-view/tasks.md +0 -23
  450. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/evidence.md +0 -43
  451. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/plan.md +0 -85
  452. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/03-add-context-store-foundation/tasks.md +0 -17
  453. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/evidence.md +0 -77
  454. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/plan.md +0 -198
  455. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/04-add-collection-foundation/tasks.md +0 -14
  456. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/evidence.md +0 -99
  457. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/plan.md +0 -236
  458. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/05-ship-initiative-mvp/tasks.md +0 -21
  459. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/evidence.md +0 -97
  460. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/plan.md +0 -333
  461. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/06-add-minimal-context-store-ux/tasks.md +0 -29
  462. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/evidence.md +0 -97
  463. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/plan.md +0 -184
  464. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/07-add-agent-first-initiative-discovery/tasks.md +0 -27
  465. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/evidence.md +0 -239
  466. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/plan.md +0 -279
  467. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/08-connect-repo-local-changes-to-initiatives/tasks.md +0 -22
  468. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/decision-review.md +0 -64
  469. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/evidence.md +0 -106
  470. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/plan.md +0 -141
  471. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/09-add-initiative-resolve/tasks.md +0 -22
  472. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/10-let-workspaces-open-initiatives/plan.md +0 -430
  473. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/10-let-workspaces-open-initiatives/tasks.md +0 -43
  474. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/notes.md +0 -289
  475. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/plan.md +0 -39
  476. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/11-manual-beta-reality-pass/tasks.md +0 -8
  477. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/evidence.md +0 -45
  478. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/plan.md +0 -150
  479. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/12-context-store-first-run-and-cleanup-ux/tasks.md +0 -23
  480. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/evidence.md +0 -25
  481. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/plan.md +0 -98
  482. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/13-agent-handoff-output-and-delivery-polish/tasks.md +0 -25
  483. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/14-workspaces-beta-guide-split/plan.md +0 -37
  484. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/14-workspaces-beta-guide-split/tasks.md +0 -9
  485. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/evidence.md +0 -140
  486. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/plan.md +0 -344
  487. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/15-context-store-project-roots-and-schema-led-initiatives/tasks.md +0 -39
  488. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/16-add-escalation-ux/plan.md +0 -26
  489. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/16-add-escalation-ux/tasks.md +0 -7
  490. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/17-harden-team-shared-coordination/plan.md +0 -25
  491. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/17-harden-team-shared-coordination/tasks.md +0 -7
  492. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/evidence.md +0 -397
  493. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/plan.md +0 -180
  494. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/18-explore-initiative-hosted-target-bound-change-artifacts/tasks.md +0 -28
  495. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/plan.md +0 -62
  496. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/19-review-workspace-beta-compatibility-before-public-release/tasks.md +0 -16
  497. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/evidence.md +0 -47
  498. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/plan.md +0 -90
  499. package/OpenSpec-main/openspec/initiatives/context-store-and-initiatives/work-items/proposed-initiative-next-agent-handoff-ux/tasks.md +0 -18
  500. package/OpenSpec-main/openspec/specs/ai-tool-paths/spec.md +0 -63
  501. package/OpenSpec-main/openspec/specs/artifact-graph/spec.md +0 -165
  502. package/OpenSpec-main/openspec/specs/change-creation/spec.md +0 -108
  503. package/OpenSpec-main/openspec/specs/ci-nix-validation/spec.md +0 -107
  504. package/OpenSpec-main/openspec/specs/cli-archive/spec.md +0 -210
  505. package/OpenSpec-main/openspec/specs/cli-artifact-workflow/spec.md +0 -398
  506. package/OpenSpec-main/openspec/specs/cli-change/spec.md +0 -92
  507. package/OpenSpec-main/openspec/specs/cli-completion/spec.md +0 -432
  508. package/OpenSpec-main/openspec/specs/cli-config/spec.md +0 -318
  509. package/OpenSpec-main/openspec/specs/cli-feedback/spec.md +0 -193
  510. package/OpenSpec-main/openspec/specs/cli-init/spec.md +0 -269
  511. package/OpenSpec-main/openspec/specs/cli-list/spec.md +0 -103
  512. package/OpenSpec-main/openspec/specs/cli-show/spec.md +0 -86
  513. package/OpenSpec-main/openspec/specs/cli-spec/spec.md +0 -88
  514. package/OpenSpec-main/openspec/specs/cli-update/spec.md +0 -229
  515. package/OpenSpec-main/openspec/specs/cli-validate/spec.md +0 -219
  516. package/OpenSpec-main/openspec/specs/cli-view/spec.md +0 -129
  517. package/OpenSpec-main/openspec/specs/command-generation/spec.md +0 -97
  518. package/OpenSpec-main/openspec/specs/config-loading/spec.md +0 -122
  519. package/OpenSpec-main/openspec/specs/context-injection/spec.md +0 -53
  520. package/OpenSpec-main/openspec/specs/docs-agent-instructions/spec.md +0 -62
  521. package/OpenSpec-main/openspec/specs/global-config/spec.md +0 -101
  522. package/OpenSpec-main/openspec/specs/instruction-loader/spec.md +0 -70
  523. package/OpenSpec-main/openspec/specs/legacy-cleanup/spec.md +0 -163
  524. package/OpenSpec-main/openspec/specs/openspec-conventions/spec.md +0 -556
  525. package/OpenSpec-main/openspec/specs/opsx-archive-skill/spec.md +0 -128
  526. package/OpenSpec-main/openspec/specs/opsx-onboard-skill/spec.md +0 -167
  527. package/OpenSpec-main/openspec/specs/opsx-verify-skill/spec.md +0 -189
  528. package/OpenSpec-main/openspec/specs/rules-injection/spec.md +0 -102
  529. package/OpenSpec-main/openspec/specs/schema-fork-command/spec.md +0 -71
  530. package/OpenSpec-main/openspec/specs/schema-init-command/spec.md +0 -76
  531. package/OpenSpec-main/openspec/specs/schema-resolution/spec.md +0 -201
  532. package/OpenSpec-main/openspec/specs/schema-validate-command/spec.md +0 -91
  533. package/OpenSpec-main/openspec/specs/schema-which-command/spec.md +0 -70
  534. package/OpenSpec-main/openspec/specs/specs-sync-skill/spec.md +0 -72
  535. package/OpenSpec-main/openspec/specs/telemetry/spec.md +0 -122
  536. package/OpenSpec-main/openspec/specs/workspace-change-planning/spec.md +0 -71
  537. package/OpenSpec-main/openspec/specs/workspace-foundation/spec.md +0 -279
  538. package/OpenSpec-main/openspec/specs/workspace-links/spec.md +0 -529
  539. package/OpenSpec-main/openspec/specs/workspace-open/spec.md +0 -205
  540. package/OpenSpec-main/openspec-parallel-merge-plan.md +0 -98
  541. package/OpenSpec-main/package-lock.json +0 -4978
  542. package/OpenSpec-main/package.json +0 -84
  543. package/OpenSpec-main/pnpm-lock.yaml +0 -3187
  544. package/OpenSpec-main/schemas/spec-driven/schema.yaml +0 -153
  545. package/OpenSpec-main/schemas/spec-driven/templates/design.md +0 -19
  546. package/OpenSpec-main/schemas/spec-driven/templates/proposal.md +0 -23
  547. package/OpenSpec-main/schemas/spec-driven/templates/spec.md +0 -8
  548. package/OpenSpec-main/schemas/spec-driven/templates/tasks.md +0 -9
  549. package/OpenSpec-main/schemas/workspace-planning/schema.yaml +0 -72
  550. package/OpenSpec-main/schemas/workspace-planning/templates/design.md +0 -33
  551. package/OpenSpec-main/schemas/workspace-planning/templates/proposal.md +0 -28
  552. package/OpenSpec-main/schemas/workspace-planning/templates/spec.md +0 -9
  553. package/OpenSpec-main/schemas/workspace-planning/templates/tasks.md +0 -15
  554. package/OpenSpec-main/scripts/README.md +0 -37
  555. package/OpenSpec-main/scripts/pack-version-check.mjs +0 -111
  556. package/OpenSpec-main/scripts/postinstall.js +0 -83
  557. package/OpenSpec-main/scripts/test-postinstall.sh +0 -57
  558. package/OpenSpec-main/scripts/update-flake.sh +0 -128
  559. package/OpenSpec-main/test/cli-e2e/basic.test.ts +0 -205
  560. package/OpenSpec-main/test/commands/artifact-workflow.test.ts +0 -1063
  561. package/OpenSpec-main/test/commands/change-initiative-link.test.ts +0 -532
  562. package/OpenSpec-main/test/commands/change.interactive-show.test.ts +0 -45
  563. package/OpenSpec-main/test/commands/change.interactive-validate.test.ts +0 -48
  564. package/OpenSpec-main/test/commands/completion.test.ts +0 -278
  565. package/OpenSpec-main/test/commands/config-profile.test.ts +0 -532
  566. package/OpenSpec-main/test/commands/config.test.ts +0 -285
  567. package/OpenSpec-main/test/commands/context-store.test.ts +0 -692
  568. package/OpenSpec-main/test/commands/feedback.test.ts +0 -429
  569. package/OpenSpec-main/test/commands/initiative.test.ts +0 -907
  570. package/OpenSpec-main/test/commands/schema.test.ts +0 -467
  571. package/OpenSpec-main/test/commands/show.test.ts +0 -123
  572. package/OpenSpec-main/test/commands/spec.interactive-show.test.ts +0 -44
  573. package/OpenSpec-main/test/commands/spec.interactive-validate.test.ts +0 -44
  574. package/OpenSpec-main/test/commands/spec.test.ts +0 -324
  575. package/OpenSpec-main/test/commands/validate.enriched-output.test.ts +0 -49
  576. package/OpenSpec-main/test/commands/validate.test.ts +0 -147
  577. package/OpenSpec-main/test/commands/workspace-initiative-open.test.ts +0 -638
  578. package/OpenSpec-main/test/commands/workspace-open.test.ts +0 -123
  579. package/OpenSpec-main/test/commands/workspace.interactive.test.ts +0 -696
  580. package/OpenSpec-main/test/commands/workspace.test.ts +0 -1812
  581. package/OpenSpec-main/test/core/archive.test.ts +0 -869
  582. package/OpenSpec-main/test/core/artifact-graph/graph.test.ts +0 -268
  583. package/OpenSpec-main/test/core/artifact-graph/instruction-loader.test.ts +0 -609
  584. package/OpenSpec-main/test/core/artifact-graph/outputs.test.ts +0 -175
  585. package/OpenSpec-main/test/core/artifact-graph/resolver.test.ts +0 -651
  586. package/OpenSpec-main/test/core/artifact-graph/schema.test.ts +0 -207
  587. package/OpenSpec-main/test/core/artifact-graph/state.test.ts +0 -174
  588. package/OpenSpec-main/test/core/artifact-graph/workflow.integration.test.ts +0 -182
  589. package/OpenSpec-main/test/core/available-tools.test.ts +0 -167
  590. package/OpenSpec-main/test/core/collections/initiatives/operations.test.ts +0 -342
  591. package/OpenSpec-main/test/core/collections/initiatives/resolution.test.ts +0 -21
  592. package/OpenSpec-main/test/core/collections/initiatives/schema.test.ts +0 -201
  593. package/OpenSpec-main/test/core/collections/initiatives/templates.test.ts +0 -74
  594. package/OpenSpec-main/test/core/collections/runtime.test.ts +0 -214
  595. package/OpenSpec-main/test/core/command-generation/adapters.test.ts +0 -710
  596. package/OpenSpec-main/test/core/command-generation/generator.test.ts +0 -110
  597. package/OpenSpec-main/test/core/command-generation/registry.test.ts +0 -108
  598. package/OpenSpec-main/test/core/command-generation/types.test.ts +0 -79
  599. package/OpenSpec-main/test/core/commands/change-command.list.test.ts +0 -76
  600. package/OpenSpec-main/test/core/commands/change-command.show-validate.test.ts +0 -111
  601. package/OpenSpec-main/test/core/completions/command-registry.test.ts +0 -201
  602. package/OpenSpec-main/test/core/completions/completion-provider.test.ts +0 -288
  603. package/OpenSpec-main/test/core/completions/generators/bash-generator.test.ts +0 -586
  604. package/OpenSpec-main/test/core/completions/generators/fish-generator.test.ts +0 -549
  605. package/OpenSpec-main/test/core/completions/generators/powershell-generator.test.ts +0 -621
  606. package/OpenSpec-main/test/core/completions/generators/zsh-generator.test.ts +0 -425
  607. package/OpenSpec-main/test/core/completions/installers/bash-installer.test.ts +0 -484
  608. package/OpenSpec-main/test/core/completions/installers/fish-installer.test.ts +0 -321
  609. package/OpenSpec-main/test/core/completions/installers/powershell-installer.test.ts +0 -824
  610. package/OpenSpec-main/test/core/completions/installers/zsh-installer.test.ts +0 -750
  611. package/OpenSpec-main/test/core/config-schema.test.ts +0 -340
  612. package/OpenSpec-main/test/core/context-store/foundation.test.ts +0 -364
  613. package/OpenSpec-main/test/core/context-store/registry.test.ts +0 -599
  614. package/OpenSpec-main/test/core/converters/json-converter.test.ts +0 -184
  615. package/OpenSpec-main/test/core/global-config.test.ts +0 -371
  616. package/OpenSpec-main/test/core/init.test.ts +0 -786
  617. package/OpenSpec-main/test/core/legacy-cleanup.test.ts +0 -1162
  618. package/OpenSpec-main/test/core/list.test.ts +0 -165
  619. package/OpenSpec-main/test/core/migration.test.ts +0 -150
  620. package/OpenSpec-main/test/core/parsers/change-parser.test.ts +0 -52
  621. package/OpenSpec-main/test/core/parsers/markdown-parser.test.ts +0 -355
  622. package/OpenSpec-main/test/core/parsers/requirement-blocks.test.ts +0 -46
  623. package/OpenSpec-main/test/core/planning-home.test.ts +0 -120
  624. package/OpenSpec-main/test/core/profile-sync-drift.test.ts +0 -92
  625. package/OpenSpec-main/test/core/profiles.test.ts +0 -63
  626. package/OpenSpec-main/test/core/project-config.test.ts +0 -610
  627. package/OpenSpec-main/test/core/shared/skill-generation.test.ts +0 -301
  628. package/OpenSpec-main/test/core/shared/tool-detection.test.ts +0 -333
  629. package/OpenSpec-main/test/core/templates/skill-templates-parity.test.ts +0 -172
  630. package/OpenSpec-main/test/core/update.test.ts +0 -1810
  631. package/OpenSpec-main/test/core/validation.enriched-messages.test.ts +0 -74
  632. package/OpenSpec-main/test/core/validation.test.ts +0 -680
  633. package/OpenSpec-main/test/core/view.test.ts +0 -129
  634. package/OpenSpec-main/test/core/workspace/foundation.test.ts +0 -694
  635. package/OpenSpec-main/test/core/workspace/legacy-state.test.ts +0 -221
  636. package/OpenSpec-main/test/core/workspace/skills.test.ts +0 -69
  637. package/OpenSpec-main/test/fixtures/tmp-init/openspec/changes/c1/proposal.md +0 -7
  638. package/OpenSpec-main/test/fixtures/tmp-init/openspec/changes/c1/specs/alpha/spec.md +0 -8
  639. package/OpenSpec-main/test/fixtures/tmp-init/openspec/specs/alpha/spec.md +0 -12
  640. package/OpenSpec-main/test/helpers/path-env.ts +0 -26
  641. package/OpenSpec-main/test/helpers/run-cli.ts +0 -150
  642. package/OpenSpec-main/test/prompts/searchable-multi-select.test.ts +0 -220
  643. package/OpenSpec-main/test/specs/source-specs-normalization.test.ts +0 -63
  644. package/OpenSpec-main/test/telemetry/config.test.ts +0 -298
  645. package/OpenSpec-main/test/telemetry/index.test.ts +0 -219
  646. package/OpenSpec-main/test/utils/change-metadata.test.ts +0 -368
  647. package/OpenSpec-main/test/utils/change-utils.test.ts +0 -201
  648. package/OpenSpec-main/test/utils/command-references.test.ts +0 -83
  649. package/OpenSpec-main/test/utils/file-system.test.ts +0 -322
  650. package/OpenSpec-main/test/utils/interactive.test.ts +0 -125
  651. package/OpenSpec-main/test/utils/marker-updates.test.ts +0 -448
  652. package/OpenSpec-main/test/utils/shell-detection.test.ts +0 -185
  653. package/OpenSpec-main/vitest.config.ts +0 -47
  654. package/OpenSpec-main/vitest.setup.ts +0 -15
  655. package/Scanner CLI Inteligente para Projetos.md +0 -433
@@ -1,869 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { ArchiveCommand } from '../../src/core/archive.js';
3
- import { Validator } from '../../src/core/validation/validator.js';
4
- import { promises as fs } from 'fs';
5
- import path from 'path';
6
- import os from 'os';
7
-
8
- // Mock @inquirer/prompts
9
- vi.mock('@inquirer/prompts', () => ({
10
- select: vi.fn(),
11
- confirm: vi.fn()
12
- }));
13
-
14
- describe('ArchiveCommand', () => {
15
- let tempDir: string;
16
- let archiveCommand: ArchiveCommand;
17
- const originalConsoleLog = console.log;
18
-
19
- beforeEach(async () => {
20
- // Create temp directory
21
- tempDir = path.join(os.tmpdir(), `openspec-archive-test-${Date.now()}`);
22
- await fs.mkdir(tempDir, { recursive: true });
23
-
24
- // Change to temp directory
25
- process.chdir(tempDir);
26
-
27
- // Create OpenSpec structure
28
- const openspecDir = path.join(tempDir, 'openspec');
29
- await fs.mkdir(path.join(openspecDir, 'changes'), { recursive: true });
30
- await fs.mkdir(path.join(openspecDir, 'specs'), { recursive: true });
31
- await fs.mkdir(path.join(openspecDir, 'changes', 'archive'), { recursive: true });
32
-
33
- // Suppress console.log during tests
34
- console.log = vi.fn();
35
-
36
- archiveCommand = new ArchiveCommand();
37
- });
38
-
39
- afterEach(async () => {
40
- // Restore console.log
41
- console.log = originalConsoleLog;
42
-
43
- // Clear mocks
44
- vi.clearAllMocks();
45
-
46
- // Clean up temp directory
47
- try {
48
- await fs.rm(tempDir, { recursive: true, force: true });
49
- } catch (error) {
50
- // Ignore cleanup errors
51
- }
52
- });
53
-
54
- describe('execute', () => {
55
- it('should archive a change successfully', async () => {
56
- // Create a test change
57
- const changeName = 'test-feature';
58
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
59
- await fs.mkdir(changeDir, { recursive: true });
60
-
61
- // Create tasks.md with completed tasks
62
- const tasksContent = '- [x] Task 1\n- [x] Task 2';
63
- await fs.writeFile(path.join(changeDir, 'tasks.md'), tasksContent);
64
-
65
- // Execute archive with --yes flag
66
- await archiveCommand.execute(changeName, { yes: true });
67
-
68
- // Check that change was moved to archive
69
- const archiveDir = path.join(tempDir, 'openspec', 'changes', 'archive');
70
- const archives = await fs.readdir(archiveDir);
71
-
72
- expect(archives.length).toBe(1);
73
- expect(archives[0]).toMatch(new RegExp(`\\d{4}-\\d{2}-\\d{2}-${changeName}`));
74
-
75
- // Verify original change directory no longer exists
76
- await expect(fs.access(changeDir)).rejects.toThrow();
77
- });
78
-
79
- it('should warn about incomplete tasks', async () => {
80
- const changeName = 'incomplete-feature';
81
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
82
- await fs.mkdir(changeDir, { recursive: true });
83
-
84
- // Create tasks.md with incomplete tasks
85
- const tasksContent = '- [x] Task 1\n- [ ] Task 2\n- [ ] Task 3';
86
- await fs.writeFile(path.join(changeDir, 'tasks.md'), tasksContent);
87
-
88
- // Execute archive with --yes flag
89
- await archiveCommand.execute(changeName, { yes: true });
90
-
91
- // Verify warning was logged
92
- expect(console.log).toHaveBeenCalledWith(
93
- expect.stringContaining('Warning: 2 incomplete task(s) found')
94
- );
95
- });
96
-
97
- it('should update specs when archiving (delta-based ADDED) and include change name in skeleton', async () => {
98
- const changeName = 'spec-feature';
99
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
100
- const changeSpecDir = path.join(changeDir, 'specs', 'test-capability');
101
- await fs.mkdir(changeSpecDir, { recursive: true });
102
-
103
- // Create delta-based change spec (ADDED requirement)
104
- const specContent = `# Test Capability Spec - Changes
105
-
106
- ## ADDED Requirements
107
-
108
- ### Requirement: The system SHALL provide test capability
109
-
110
- #### Scenario: Basic test
111
- Given a test condition
112
- When an action occurs
113
- Then expected result happens`;
114
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), specContent);
115
-
116
- // Execute archive with --yes flag and skip validation for speed
117
- await archiveCommand.execute(changeName, { yes: true, noValidate: true });
118
-
119
- // Verify spec was created from skeleton and ADDED requirement applied
120
- const mainSpecPath = path.join(tempDir, 'openspec', 'specs', 'test-capability', 'spec.md');
121
- const updatedContent = await fs.readFile(mainSpecPath, 'utf-8');
122
- expect(updatedContent).toContain('# test-capability Specification');
123
- expect(updatedContent).toContain('## Purpose');
124
- expect(updatedContent).toContain(`created by archiving change ${changeName}`);
125
- expect(updatedContent).toContain('## Requirements');
126
- expect(updatedContent).toContain('### Requirement: The system SHALL provide test capability');
127
- expect(updatedContent).toContain('#### Scenario: Basic test');
128
- });
129
-
130
- it('should allow REMOVED requirements when creating new spec file (issue #403)', async () => {
131
- const changeName = 'new-spec-with-removed';
132
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
133
- const changeSpecDir = path.join(changeDir, 'specs', 'gift-card');
134
- await fs.mkdir(changeSpecDir, { recursive: true });
135
-
136
- // Create delta spec with both ADDED and REMOVED requirements
137
- // This simulates refactoring where old fields are removed and new ones are added
138
- const specContent = `# Gift Card - Changes
139
-
140
- ## ADDED Requirements
141
-
142
- ### Requirement: Logo and Background Color
143
- The system SHALL support logo and backgroundColor fields for gift cards.
144
-
145
- #### Scenario: Display gift card with logo
146
- - **WHEN** a gift card is displayed
147
- - **THEN** it shows the logo and backgroundColor
148
-
149
- ## REMOVED Requirements
150
-
151
- ### Requirement: Image Field
152
- ### Requirement: Thumbnail Field`;
153
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), specContent);
154
-
155
- // Execute archive - should succeed with warning about REMOVED requirements
156
- await archiveCommand.execute(changeName, { yes: true, noValidate: true });
157
-
158
- // Verify warning was logged about REMOVED requirements being ignored
159
- expect(console.log).toHaveBeenCalledWith(
160
- expect.stringContaining('Warning: gift-card - 2 REMOVED requirement(s) ignored for new spec (nothing to remove).')
161
- );
162
-
163
- // Verify spec was created with only ADDED requirements
164
- const mainSpecPath = path.join(tempDir, 'openspec', 'specs', 'gift-card', 'spec.md');
165
- const updatedContent = await fs.readFile(mainSpecPath, 'utf-8');
166
- expect(updatedContent).toContain('# gift-card Specification');
167
- expect(updatedContent).toContain('### Requirement: Logo and Background Color');
168
- expect(updatedContent).toContain('#### Scenario: Display gift card with logo');
169
- // REMOVED requirements should not be in the final spec
170
- expect(updatedContent).not.toContain('### Requirement: Image Field');
171
- expect(updatedContent).not.toContain('### Requirement: Thumbnail Field');
172
-
173
- // Verify change was archived successfully
174
- const archiveDir = path.join(tempDir, 'openspec', 'changes', 'archive');
175
- const archives = await fs.readdir(archiveDir);
176
- expect(archives.length).toBeGreaterThan(0);
177
- expect(archives.some(a => a.includes(changeName))).toBe(true);
178
- });
179
-
180
- it('should still error on MODIFIED when creating new spec file', async () => {
181
- const changeName = 'new-spec-with-modified';
182
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
183
- const changeSpecDir = path.join(changeDir, 'specs', 'new-capability');
184
- await fs.mkdir(changeSpecDir, { recursive: true });
185
-
186
- // Create delta spec with MODIFIED requirement (should fail for new spec)
187
- const specContent = `# New Capability - Changes
188
-
189
- ## ADDED Requirements
190
-
191
- ### Requirement: New Feature
192
- New feature description.
193
-
194
- ## MODIFIED Requirements
195
-
196
- ### Requirement: Existing Feature
197
- Modified content.`;
198
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), specContent);
199
-
200
- // Execute archive - should abort with error message (not throw, but log and return)
201
- await archiveCommand.execute(changeName, { yes: true, noValidate: true });
202
-
203
- // Verify error message mentions MODIFIED not allowed for new specs
204
- expect(console.log).toHaveBeenCalledWith(
205
- expect.stringContaining('new-capability: target spec does not exist; only ADDED requirements are allowed for new specs. MODIFIED and RENAMED operations require an existing spec.')
206
- );
207
- expect(console.log).toHaveBeenCalledWith('Aborted. No files were changed.');
208
-
209
- // Verify spec was NOT created
210
- const mainSpecPath = path.join(tempDir, 'openspec', 'specs', 'new-capability', 'spec.md');
211
- await expect(fs.access(mainSpecPath)).rejects.toThrow();
212
-
213
- // Verify change was NOT archived
214
- const archiveDir = path.join(tempDir, 'openspec', 'changes', 'archive');
215
- const archives = await fs.readdir(archiveDir);
216
- expect(archives.some(a => a.includes(changeName))).toBe(false);
217
- });
218
-
219
- it('should still error on RENAMED when creating new spec file', async () => {
220
- const changeName = 'new-spec-with-renamed';
221
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
222
- const changeSpecDir = path.join(changeDir, 'specs', 'another-capability');
223
- await fs.mkdir(changeSpecDir, { recursive: true });
224
-
225
- // Create delta spec with RENAMED requirement (should fail for new spec)
226
- const specContent = `# Another Capability - Changes
227
-
228
- ## ADDED Requirements
229
-
230
- ### Requirement: New Feature
231
- New feature description.
232
-
233
- ## RENAMED Requirements
234
- - FROM: \`### Requirement: Old Name\`
235
- - TO: \`### Requirement: New Name\``;
236
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), specContent);
237
-
238
- // Execute archive - should abort with error message (not throw, but log and return)
239
- await archiveCommand.execute(changeName, { yes: true, noValidate: true });
240
-
241
- // Verify error message mentions RENAMED not allowed for new specs
242
- expect(console.log).toHaveBeenCalledWith(
243
- expect.stringContaining('another-capability: target spec does not exist; only ADDED requirements are allowed for new specs. MODIFIED and RENAMED operations require an existing spec.')
244
- );
245
- expect(console.log).toHaveBeenCalledWith('Aborted. No files were changed.');
246
-
247
- // Verify spec was NOT created
248
- const mainSpecPath = path.join(tempDir, 'openspec', 'specs', 'another-capability', 'spec.md');
249
- await expect(fs.access(mainSpecPath)).rejects.toThrow();
250
-
251
- // Verify change was NOT archived
252
- const archiveDir = path.join(tempDir, 'openspec', 'changes', 'archive');
253
- const archives = await fs.readdir(archiveDir);
254
- expect(archives.some(a => a.includes(changeName))).toBe(false);
255
- });
256
-
257
- it('should throw error if change does not exist', async () => {
258
- await expect(
259
- archiveCommand.execute('non-existent-change', { yes: true })
260
- ).rejects.toThrow("Change 'non-existent-change' not found.");
261
- });
262
-
263
- it('should throw error if archive already exists', async () => {
264
- const changeName = 'duplicate-feature';
265
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
266
- await fs.mkdir(changeDir, { recursive: true });
267
-
268
- // Create existing archive with same date
269
- const date = new Date().toISOString().split('T')[0];
270
- const archivePath = path.join(tempDir, 'openspec', 'changes', 'archive', `${date}-${changeName}`);
271
- await fs.mkdir(archivePath, { recursive: true });
272
-
273
- // Try to archive
274
- await expect(
275
- archiveCommand.execute(changeName, { yes: true })
276
- ).rejects.toThrow(`Archive '${date}-${changeName}' already exists.`);
277
- });
278
-
279
- it('should handle changes without tasks.md', async () => {
280
- const changeName = 'no-tasks-feature';
281
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
282
- await fs.mkdir(changeDir, { recursive: true });
283
-
284
- // Execute archive without tasks.md
285
- await archiveCommand.execute(changeName, { yes: true });
286
-
287
- // Should complete without warnings
288
- expect(console.log).not.toHaveBeenCalledWith(
289
- expect.stringContaining('incomplete task(s)')
290
- );
291
-
292
- // Verify change was archived
293
- const archiveDir = path.join(tempDir, 'openspec', 'changes', 'archive');
294
- const archives = await fs.readdir(archiveDir);
295
- expect(archives.length).toBe(1);
296
- });
297
-
298
- it('should handle changes without specs', async () => {
299
- const changeName = 'no-specs-feature';
300
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
301
- await fs.mkdir(changeDir, { recursive: true });
302
-
303
- // Execute archive without specs
304
- await archiveCommand.execute(changeName, { yes: true });
305
-
306
- // Should complete without spec updates
307
- expect(console.log).not.toHaveBeenCalledWith(
308
- expect.stringContaining('Specs to update')
309
- );
310
-
311
- // Verify change was archived
312
- const archiveDir = path.join(tempDir, 'openspec', 'changes', 'archive');
313
- const archives = await fs.readdir(archiveDir);
314
- expect(archives.length).toBe(1);
315
- });
316
-
317
- it('should skip spec updates when --skip-specs flag is used', async () => {
318
- const changeName = 'skip-specs-feature';
319
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
320
- const changeSpecDir = path.join(changeDir, 'specs', 'test-capability');
321
- await fs.mkdir(changeSpecDir, { recursive: true });
322
-
323
- // Create spec in change
324
- const specContent = '# Test Capability Spec\n\nTest content';
325
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), specContent);
326
-
327
- // Execute archive with --skip-specs flag and noValidate to skip validation
328
- await archiveCommand.execute(changeName, { yes: true, skipSpecs: true, noValidate: true });
329
-
330
- // Verify skip message was logged
331
- expect(console.log).toHaveBeenCalledWith(
332
- 'Skipping spec updates (--skip-specs flag provided).'
333
- );
334
-
335
- // Verify spec was NOT copied to main specs
336
- const mainSpecPath = path.join(tempDir, 'openspec', 'specs', 'test-capability', 'spec.md');
337
- await expect(fs.access(mainSpecPath)).rejects.toThrow();
338
-
339
- // Verify change was still archived
340
- const archiveDir = path.join(tempDir, 'openspec', 'changes', 'archive');
341
- const archives = await fs.readdir(archiveDir);
342
- expect(archives.length).toBe(1);
343
- expect(archives[0]).toMatch(new RegExp(`\\d{4}-\\d{2}-\\d{2}-${changeName}`));
344
- });
345
-
346
- it('should skip validation when commander sets validate to false (--no-validate)', async () => {
347
- const changeName = 'skip-validation-flag';
348
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
349
- const changeSpecDir = path.join(changeDir, 'specs', 'unstable-capability');
350
- await fs.mkdir(changeSpecDir, { recursive: true });
351
-
352
- const deltaSpec = `# Unstable Capability
353
-
354
- ## ADDED Requirements
355
-
356
- ### Requirement: Logging Feature
357
- **ID**: REQ-LOG-001
358
-
359
- The system will log all events.
360
-
361
- #### Scenario: Event recorded
362
- - **WHEN** an event occurs
363
- - **THEN** it is captured`;
364
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), deltaSpec);
365
- await fs.writeFile(path.join(changeDir, 'tasks.md'), '- [x] Task 1\n');
366
-
367
- const deltaSpy = vi.spyOn(Validator.prototype, 'validateChangeDeltaSpecs');
368
- const specContentSpy = vi.spyOn(Validator.prototype, 'validateSpecContent');
369
-
370
- try {
371
- await archiveCommand.execute(changeName, { yes: true, skipSpecs: true, validate: false });
372
-
373
- expect(deltaSpy).not.toHaveBeenCalled();
374
- expect(specContentSpy).not.toHaveBeenCalled();
375
-
376
- const archiveDir = path.join(tempDir, 'openspec', 'changes', 'archive');
377
- const archives = await fs.readdir(archiveDir);
378
- expect(archives.length).toBe(1);
379
- expect(archives[0]).toMatch(new RegExp(`\\d{4}-\\d{2}-\\d{2}-${changeName}`));
380
- } finally {
381
- deltaSpy.mockRestore();
382
- specContentSpy.mockRestore();
383
- }
384
- });
385
-
386
- it('should proceed with archive when user declines spec updates', async () => {
387
- const { confirm } = await import('@inquirer/prompts');
388
- const mockConfirm = confirm as unknown as ReturnType<typeof vi.fn>;
389
-
390
- const changeName = 'decline-specs-feature';
391
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
392
- const changeSpecDir = path.join(changeDir, 'specs', 'test-capability');
393
- await fs.mkdir(changeSpecDir, { recursive: true });
394
-
395
- // Create valid spec in change
396
- const specContent = `# Test Capability Spec
397
-
398
- ## Purpose
399
- This is a test capability specification.
400
-
401
- ## Requirements
402
-
403
- ### The system SHALL provide test capability
404
-
405
- #### Scenario: Basic test
406
- Given a test condition
407
- When an action occurs
408
- Then expected result happens`;
409
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), specContent);
410
-
411
- // Mock confirm to return false (decline spec updates)
412
- mockConfirm.mockResolvedValueOnce(false);
413
-
414
- // Execute archive without --yes flag
415
- await archiveCommand.execute(changeName);
416
-
417
- // Verify user was prompted about specs
418
- expect(mockConfirm).toHaveBeenCalledWith({
419
- message: 'Proceed with spec updates?',
420
- default: true
421
- });
422
-
423
- // Verify skip message was logged
424
- expect(console.log).toHaveBeenCalledWith(
425
- 'Skipping spec updates. Proceeding with archive.'
426
- );
427
-
428
- // Verify spec was NOT copied to main specs
429
- const mainSpecPath = path.join(tempDir, 'openspec', 'specs', 'test-capability', 'spec.md');
430
- await expect(fs.access(mainSpecPath)).rejects.toThrow();
431
-
432
- // Verify change was still archived
433
- const archiveDir = path.join(tempDir, 'openspec', 'changes', 'archive');
434
- const archives = await fs.readdir(archiveDir);
435
- expect(archives.length).toBe(1);
436
- expect(archives[0]).toMatch(new RegExp(`\\d{4}-\\d{2}-\\d{2}-${changeName}`));
437
- });
438
-
439
- it('should support header trim-only normalization for matching', async () => {
440
- const changeName = 'normalize-headers';
441
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
442
- const changeSpecDir = path.join(changeDir, 'specs', 'alpha');
443
- await fs.mkdir(changeSpecDir, { recursive: true });
444
-
445
- // Create existing main spec with a requirement (no extra trailing spaces)
446
- const mainSpecDir = path.join(tempDir, 'openspec', 'specs', 'alpha');
447
- await fs.mkdir(mainSpecDir, { recursive: true });
448
- const mainContent = `# alpha Specification
449
-
450
- ## Purpose
451
- Alpha purpose.
452
-
453
- ## Requirements
454
-
455
- ### Requirement: Important Rule
456
- Some details.`;
457
- await fs.writeFile(path.join(mainSpecDir, 'spec.md'), mainContent);
458
-
459
- // Change attempts to modify the same requirement but with trailing spaces after the name
460
- const deltaContent = `# Alpha - Changes
461
-
462
- ## MODIFIED Requirements
463
-
464
- ### Requirement: Important Rule
465
- Updated details.`;
466
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), deltaContent);
467
-
468
- await archiveCommand.execute(changeName, { yes: true, noValidate: true });
469
-
470
- const updated = await fs.readFile(path.join(mainSpecDir, 'spec.md'), 'utf-8');
471
- expect(updated).toContain('### Requirement: Important Rule');
472
- expect(updated).toContain('Updated details.');
473
- });
474
-
475
- it('should apply operations in order: RENAMED → REMOVED → MODIFIED → ADDED', async () => {
476
- const changeName = 'apply-order';
477
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
478
- const changeSpecDir = path.join(changeDir, 'specs', 'beta');
479
- await fs.mkdir(changeSpecDir, { recursive: true });
480
-
481
- // Main spec with two requirements A and B
482
- const mainSpecDir = path.join(tempDir, 'openspec', 'specs', 'beta');
483
- await fs.mkdir(mainSpecDir, { recursive: true });
484
- const mainContent = `# beta Specification
485
-
486
- ## Purpose
487
- Beta purpose.
488
-
489
- ## Requirements
490
-
491
- ### Requirement: A
492
- content A
493
-
494
- ### Requirement: B
495
- content B`;
496
- await fs.writeFile(path.join(mainSpecDir, 'spec.md'), mainContent);
497
-
498
- // Rename A->C, Remove B, Modify C, Add D
499
- const deltaContent = `# Beta - Changes
500
-
501
- ## RENAMED Requirements
502
- - FROM: \`### Requirement: A\`
503
- - TO: \`### Requirement: C\`
504
-
505
- ## REMOVED Requirements
506
- ### Requirement: B
507
-
508
- ## MODIFIED Requirements
509
- ### Requirement: C
510
- updated C
511
-
512
- ## ADDED Requirements
513
- ### Requirement: D
514
- content D`;
515
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), deltaContent);
516
-
517
- await archiveCommand.execute(changeName, { yes: true, noValidate: true });
518
-
519
- const updated = await fs.readFile(path.join(mainSpecDir, 'spec.md'), 'utf-8');
520
- expect(updated).toContain('### Requirement: C');
521
- expect(updated).toContain('updated C');
522
- expect(updated).toContain('### Requirement: D');
523
- expect(updated).not.toContain('### Requirement: A');
524
- expect(updated).not.toContain('### Requirement: B');
525
- });
526
-
527
- it('should abort with error when MODIFIED/REMOVED reference non-existent requirements', async () => {
528
- const changeName = 'validate-missing';
529
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
530
- const changeSpecDir = path.join(changeDir, 'specs', 'gamma');
531
- await fs.mkdir(changeSpecDir, { recursive: true });
532
-
533
- // Main spec with no requirements
534
- const mainSpecDir = path.join(tempDir, 'openspec', 'specs', 'gamma');
535
- await fs.mkdir(mainSpecDir, { recursive: true });
536
- const mainContent = `# gamma Specification
537
-
538
- ## Purpose
539
- Gamma purpose.
540
-
541
- ## Requirements`;
542
- await fs.writeFile(path.join(mainSpecDir, 'spec.md'), mainContent);
543
-
544
- // Delta tries to modify and remove non-existent requirement
545
- const deltaContent = `# Gamma - Changes
546
-
547
- ## MODIFIED Requirements
548
- ### Requirement: Missing
549
- new text
550
-
551
- ## REMOVED Requirements
552
- ### Requirement: Another Missing`;
553
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), deltaContent);
554
-
555
- await archiveCommand.execute(changeName, { yes: true, noValidate: true });
556
-
557
- // Should not change the main spec and should not archive the change dir
558
- const still = await fs.readFile(path.join(mainSpecDir, 'spec.md'), 'utf-8');
559
- expect(still).toBe(mainContent);
560
- // Change dir should still exist since operation aborted
561
- await expect(fs.access(changeDir)).resolves.not.toThrow();
562
- });
563
-
564
- it('should abort with a structural error when target spec hides requirements outside ## Requirements', async () => {
565
- const changeName = 'hidden-requirement-target';
566
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
567
- const changeSpecDir = path.join(changeDir, 'specs', 'delta-target');
568
- await fs.mkdir(changeSpecDir, { recursive: true });
569
-
570
- const mainSpecDir = path.join(tempDir, 'openspec', 'specs', 'delta-target');
571
- await fs.mkdir(mainSpecDir, { recursive: true });
572
- const malformedMain = `# delta-target Specification
573
-
574
- ## Purpose
575
- Delta target purpose.
576
-
577
- ## Requirements
578
-
579
- ### Requirement: A
580
- The system SHALL do A.
581
-
582
- #### Scenario: A works
583
- - **WHEN** foo
584
- - **THEN** bar
585
-
586
- ## Edge Cases
587
-
588
- ### Requirement: B
589
- The system SHALL do B.
590
-
591
- #### Scenario: B works
592
- - **WHEN** baz
593
- - **THEN** qux`;
594
- await fs.writeFile(path.join(mainSpecDir, 'spec.md'), malformedMain);
595
-
596
- const deltaContent = `# Delta Target Changes
597
-
598
- ## MODIFIED Requirements
599
-
600
- ### Requirement: B
601
- The system SHALL do B differently.
602
-
603
- #### Scenario: B changes
604
- - **WHEN** baz changes
605
- - **THEN** qux changes`;
606
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), deltaContent);
607
-
608
- await archiveCommand.execute(changeName, { yes: true, noValidate: true });
609
-
610
- expect(console.log).toHaveBeenCalledWith(
611
- expect.stringContaining('delta-target: target spec is structurally invalid and cannot be updated until fixed:')
612
- );
613
- expect(console.log).toHaveBeenCalledWith(
614
- expect.stringContaining('Requirement header "### Requirement: B" appears outside the main ## Requirements section.')
615
- );
616
- expect(console.log).toHaveBeenCalledWith('Aborted. No files were changed.');
617
-
618
- const still = await fs.readFile(path.join(mainSpecDir, 'spec.md'), 'utf-8');
619
- expect(still).toBe(malformedMain);
620
-
621
- const archiveDir = path.join(tempDir, 'openspec', 'changes', 'archive');
622
- const archives = await fs.readdir(archiveDir);
623
- expect(archives.some(a => a.includes(changeName))).toBe(false);
624
- });
625
-
626
- it('should require MODIFIED to reference the NEW header when a rename exists (error format)', async () => {
627
- const changeName = 'rename-modify-new-header';
628
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
629
- const changeSpecDir = path.join(changeDir, 'specs', 'delta');
630
- await fs.mkdir(changeSpecDir, { recursive: true });
631
-
632
- // Main spec with Old
633
- const mainSpecDir = path.join(tempDir, 'openspec', 'specs', 'delta');
634
- await fs.mkdir(mainSpecDir, { recursive: true });
635
- const mainContent = `# delta Specification
636
-
637
- ## Purpose
638
- Delta purpose.
639
-
640
- ## Requirements
641
-
642
- ### Requirement: Old
643
- old body`;
644
- await fs.writeFile(path.join(mainSpecDir, 'spec.md'), mainContent);
645
-
646
- // Delta: rename Old->New, but MODIFIED references Old (should abort)
647
- const badDelta = `# Delta - Changes
648
-
649
- ## RENAMED Requirements
650
- - FROM: \`### Requirement: Old\`
651
- - TO: \`### Requirement: New\`
652
-
653
- ## MODIFIED Requirements
654
- ### Requirement: Old
655
- new body`;
656
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), badDelta);
657
-
658
- await archiveCommand.execute(changeName, { yes: true, noValidate: true });
659
- const unchanged = await fs.readFile(path.join(mainSpecDir, 'spec.md'), 'utf-8');
660
- expect(unchanged).toBe(mainContent);
661
- // Assert error message format and abort notice
662
- expect(console.log).toHaveBeenCalledWith(
663
- expect.stringContaining('delta validation failed')
664
- );
665
- expect(console.log).toHaveBeenCalledWith(
666
- expect.stringContaining('Aborted. No files were changed.')
667
- );
668
-
669
- // Fix MODIFIED to reference New (should succeed)
670
- const goodDelta = `# Delta - Changes
671
-
672
- ## RENAMED Requirements
673
- - FROM: \`### Requirement: Old\`
674
- - TO: \`### Requirement: New\`
675
-
676
- ## MODIFIED Requirements
677
- ### Requirement: New
678
- new body`;
679
- await fs.writeFile(path.join(changeSpecDir, 'spec.md'), goodDelta);
680
-
681
- await archiveCommand.execute(changeName, { yes: true, noValidate: true });
682
- const updated = await fs.readFile(path.join(mainSpecDir, 'spec.md'), 'utf-8');
683
- expect(updated).toContain('### Requirement: New');
684
- expect(updated).toContain('new body');
685
- expect(updated).not.toContain('### Requirement: Old');
686
- });
687
-
688
- it('should process multiple specs atomically (any failure aborts all)', async () => {
689
- const changeName = 'multi-spec-atomic';
690
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
691
- const spec1Dir = path.join(changeDir, 'specs', 'epsilon');
692
- const spec2Dir = path.join(changeDir, 'specs', 'zeta');
693
- await fs.mkdir(spec1Dir, { recursive: true });
694
- await fs.mkdir(spec2Dir, { recursive: true });
695
-
696
- // Existing main specs
697
- const epsilonMain = path.join(tempDir, 'openspec', 'specs', 'epsilon', 'spec.md');
698
- await fs.mkdir(path.dirname(epsilonMain), { recursive: true });
699
- await fs.writeFile(epsilonMain, `# epsilon Specification
700
-
701
- ## Purpose
702
- Epsilon purpose.
703
-
704
- ## Requirements
705
-
706
- ### Requirement: E1
707
- e1`);
708
-
709
- const zetaMain = path.join(tempDir, 'openspec', 'specs', 'zeta', 'spec.md');
710
- await fs.mkdir(path.dirname(zetaMain), { recursive: true });
711
- await fs.writeFile(zetaMain, `# zeta Specification
712
-
713
- ## Purpose
714
- Zeta purpose.
715
-
716
- ## Requirements
717
-
718
- ### Requirement: Z1
719
- z1`);
720
-
721
- // Delta: epsilon is valid modification; zeta tries to remove non-existent -> should abort both
722
- await fs.writeFile(path.join(spec1Dir, 'spec.md'), `# Epsilon - Changes
723
-
724
- ## MODIFIED Requirements
725
- ### Requirement: E1
726
- E1 updated`);
727
-
728
- await fs.writeFile(path.join(spec2Dir, 'spec.md'), `# Zeta - Changes
729
-
730
- ## REMOVED Requirements
731
- ### Requirement: Missing`);
732
-
733
- await archiveCommand.execute(changeName, { yes: true, noValidate: true });
734
-
735
- const e1 = await fs.readFile(epsilonMain, 'utf-8');
736
- const z1 = await fs.readFile(zetaMain, 'utf-8');
737
- expect(e1).toContain('### Requirement: E1');
738
- expect(e1).not.toContain('E1 updated');
739
- expect(z1).toContain('### Requirement: Z1');
740
- // changeDir should still exist
741
- await expect(fs.access(changeDir)).resolves.not.toThrow();
742
- });
743
-
744
- it('should display aggregated totals across multiple specs', async () => {
745
- const changeName = 'multi-spec-totals';
746
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
747
- const spec1Dir = path.join(changeDir, 'specs', 'omega');
748
- const spec2Dir = path.join(changeDir, 'specs', 'psi');
749
- await fs.mkdir(spec1Dir, { recursive: true });
750
- await fs.mkdir(spec2Dir, { recursive: true });
751
-
752
- // Existing main specs
753
- const omegaMain = path.join(tempDir, 'openspec', 'specs', 'omega', 'spec.md');
754
- await fs.mkdir(path.dirname(omegaMain), { recursive: true });
755
- await fs.writeFile(omegaMain, `# omega Specification\n\n## Purpose\nOmega purpose.\n\n## Requirements\n\n### Requirement: O1\no1`);
756
-
757
- const psiMain = path.join(tempDir, 'openspec', 'specs', 'psi', 'spec.md');
758
- await fs.mkdir(path.dirname(psiMain), { recursive: true });
759
- await fs.writeFile(psiMain, `# psi Specification\n\n## Purpose\nPsi purpose.\n\n## Requirements\n\n### Requirement: P1\np1`);
760
-
761
- // Deltas: omega add one, psi rename and modify -> totals: +1, ~1, -0, →1
762
- await fs.writeFile(path.join(spec1Dir, 'spec.md'), `# Omega - Changes\n\n## ADDED Requirements\n\n### Requirement: O2\nnew`);
763
- await fs.writeFile(path.join(spec2Dir, 'spec.md'), `# Psi - Changes\n\n## RENAMED Requirements\n- FROM: \`### Requirement: P1\`\n- TO: \`### Requirement: P2\`\n\n## MODIFIED Requirements\n### Requirement: P2\nupdated`);
764
-
765
- await archiveCommand.execute(changeName, { yes: true, noValidate: true });
766
-
767
- // Verify aggregated totals line was printed
768
- expect(console.log).toHaveBeenCalledWith(
769
- expect.stringContaining('Totals: + 1, ~ 1, - 0, → 1')
770
- );
771
- });
772
- });
773
-
774
- describe('error handling', () => {
775
- it('should throw error when openspec directory does not exist', async () => {
776
- // Remove openspec directory
777
- await fs.rm(path.join(tempDir, 'openspec'), { recursive: true });
778
-
779
- await expect(
780
- archiveCommand.execute('any-change', { yes: true })
781
- ).rejects.toThrow("No OpenSpec changes directory found. Run 'openspec init' first.");
782
- });
783
- });
784
-
785
- describe('interactive mode', () => {
786
- it('should use select prompt for change selection', async () => {
787
- const { select } = await import('@inquirer/prompts');
788
- const mockSelect = select as unknown as ReturnType<typeof vi.fn>;
789
-
790
- // Create test changes
791
- const change1 = 'feature-a';
792
- const change2 = 'feature-b';
793
- await fs.mkdir(path.join(tempDir, 'openspec', 'changes', change1), { recursive: true });
794
- await fs.mkdir(path.join(tempDir, 'openspec', 'changes', change2), { recursive: true });
795
-
796
- // Mock select to return first change
797
- mockSelect.mockResolvedValueOnce(change1);
798
-
799
- // Execute without change name
800
- await archiveCommand.execute(undefined, { yes: true });
801
-
802
- // Verify select was called with correct options (values matter, names may include progress)
803
- expect(mockSelect).toHaveBeenCalledWith(expect.objectContaining({
804
- message: 'Select a change to archive',
805
- choices: expect.arrayContaining([
806
- expect.objectContaining({ value: change1 }),
807
- expect.objectContaining({ value: change2 })
808
- ])
809
- }));
810
-
811
- // Verify the selected change was archived
812
- const archiveDir = path.join(tempDir, 'openspec', 'changes', 'archive');
813
- const archives = await fs.readdir(archiveDir);
814
- expect(archives[0]).toContain(change1);
815
- });
816
-
817
- it('should use confirm prompt for task warnings', async () => {
818
- const { confirm } = await import('@inquirer/prompts');
819
- const mockConfirm = confirm as unknown as ReturnType<typeof vi.fn>;
820
-
821
- const changeName = 'incomplete-interactive';
822
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
823
- await fs.mkdir(changeDir, { recursive: true });
824
-
825
- // Create tasks.md with incomplete tasks
826
- const tasksContent = '- [ ] Task 1';
827
- await fs.writeFile(path.join(changeDir, 'tasks.md'), tasksContent);
828
-
829
- // Mock confirm to return true (proceed)
830
- mockConfirm.mockResolvedValueOnce(true);
831
-
832
- // Execute without --yes flag
833
- await archiveCommand.execute(changeName);
834
-
835
- // Verify confirm was called
836
- expect(mockConfirm).toHaveBeenCalledWith({
837
- message: 'Warning: 1 incomplete task(s) found. Continue?',
838
- default: false
839
- });
840
- });
841
-
842
- it('should cancel when user declines task warning', async () => {
843
- const { confirm } = await import('@inquirer/prompts');
844
- const mockConfirm = confirm as unknown as ReturnType<typeof vi.fn>;
845
-
846
- const changeName = 'cancel-test';
847
- const changeDir = path.join(tempDir, 'openspec', 'changes', changeName);
848
- await fs.mkdir(changeDir, { recursive: true });
849
-
850
- // Create tasks.md with incomplete tasks
851
- const tasksContent = '- [ ] Task 1';
852
- await fs.writeFile(path.join(changeDir, 'tasks.md'), tasksContent);
853
-
854
- // Mock confirm to return false (cancel) for validation skip
855
- mockConfirm.mockResolvedValueOnce(false);
856
- // Mock another false for task warning
857
- mockConfirm.mockResolvedValueOnce(false);
858
-
859
- // Execute without --yes flag but skip validation to test task warning
860
- await archiveCommand.execute(changeName, { noValidate: true });
861
-
862
- // Verify archive was cancelled
863
- expect(console.log).toHaveBeenCalledWith('Archive cancelled.');
864
-
865
- // Verify change was not archived
866
- await expect(fs.access(changeDir)).resolves.not.toThrow();
867
- });
868
- });
869
- });