@devtrack-solution/codesdd 1.2.2 → 1.2.4-rc3

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 (413) hide show
  1. package/.sdd/skills/curated/api-clean-flask-langgraph/SKILL.md +17 -17
  2. package/.sdd/skills/curated/devtrack-api/SKILL.md +170 -31
  3. package/.sdd/skills/curated/devtrack-api/agents/claude-code.yaml +8 -0
  4. package/.sdd/skills/curated/devtrack-api/agents/codex.yaml +8 -0
  5. package/.sdd/skills/curated/devtrack-api/agents/cursor.yaml +8 -0
  6. package/.sdd/skills/curated/devtrack-api/agents/gemini.yaml +8 -0
  7. package/.sdd/skills/curated/devtrack-api/agents/kimi.yaml +8 -0
  8. package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +4 -2
  9. package/.sdd/skills/curated/devtrack-api/agents/opencode.yaml +10 -0
  10. package/.sdd/skills/curated/devtrack-api/references/application-presentation.md +2 -2
  11. package/.sdd/skills/curated/devtrack-api/references/architecture-governance.md +8 -7
  12. package/.sdd/skills/curated/devtrack-api/references/consumer-sync-policy.md +93 -0
  13. package/.sdd/skills/curated/devtrack-api/references/contract-pack.yaml +372 -0
  14. package/.sdd/skills/curated/devtrack-api/references/domain-modeling.md +13 -13
  15. package/.sdd/skills/curated/devtrack-api/references/field-validation-protocol.md +95 -0
  16. package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +294 -0
  17. package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +5 -5
  18. package/.sdd/skills/curated/devtrack-api/references/imports-lint.md +4 -0
  19. package/.sdd/skills/curated/devtrack-api/references/portable-agent-contract.md +41 -0
  20. package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +2 -2
  21. package/.sdd/skills/curated/devtrack-api/references/typeorm-infrastructure.md +7 -9
  22. package/LICENSE +1 -1
  23. package/README.md +399 -53
  24. package/bin/codesdd.js +3 -2
  25. package/dist/applications/sdd/index.d.ts +16 -0
  26. package/dist/applications/sdd/index.js +16 -0
  27. package/dist/cli/index.d.ts +2 -2
  28. package/dist/cli/index.js +11 -558
  29. package/dist/cli/program.d.ts +14 -0
  30. package/dist/cli/program.js +645 -0
  31. package/dist/commands/change.js +5 -5
  32. package/dist/commands/completion.d.ts +1 -1
  33. package/dist/commands/completion.js +9 -2
  34. package/dist/commands/config.js +320 -20
  35. package/dist/commands/feedback.js +1 -1
  36. package/dist/commands/schema.d.ts +63 -0
  37. package/dist/commands/schema.js +12 -12
  38. package/dist/commands/sdd/backlog.d.ts +3 -0
  39. package/dist/commands/sdd/backlog.js +54 -0
  40. package/dist/commands/sdd/execution.js +489 -28
  41. package/dist/commands/sdd/plugin.d.ts +3 -0
  42. package/dist/commands/sdd/plugin.js +158 -0
  43. package/dist/commands/sdd/shared.d.ts +1 -0
  44. package/dist/commands/sdd/shared.js +11 -22
  45. package/dist/commands/sdd/skills.js +7 -0
  46. package/dist/commands/sdd.js +107 -15
  47. package/dist/commands/spec.js +9 -9
  48. package/dist/commands/validate.js +6 -6
  49. package/dist/commands/workflow/instructions.js +6 -6
  50. package/dist/commands/workflow/new-change.js +3 -3
  51. package/dist/commands/workflow/shared.d.ts +1 -1
  52. package/dist/commands/workflow/shared.js +4 -4
  53. package/dist/core/archive.js +15 -5
  54. package/dist/core/artifact-graph/instruction-loader.d.ts +1 -1
  55. package/dist/core/artifact-graph/instruction-loader.js +3 -3
  56. package/dist/core/artifact-graph/resolver.d.ts +4 -4
  57. package/dist/core/artifact-graph/resolver.js +6 -6
  58. package/dist/core/branding.js +3 -3
  59. package/dist/core/cli/command-matrix.js +19 -1
  60. package/dist/core/cli-command-quality.d.ts +27 -0
  61. package/dist/core/cli-command-quality.js +180 -0
  62. package/dist/core/command-generation/adapters/costrict.d.ts +1 -1
  63. package/dist/core/command-generation/adapters/costrict.js +2 -2
  64. package/dist/core/command-generation/types.d.ts +1 -1
  65. package/dist/core/completions/command-registry.d.ts +1 -1
  66. package/dist/core/completions/command-registry.js +200 -12
  67. package/dist/core/completions/completion-provider.d.ts +14 -1
  68. package/dist/core/completions/completion-provider.js +29 -1
  69. package/dist/core/completions/generators/bash-generator.d.ts +1 -1
  70. package/dist/core/completions/generators/bash-generator.js +20 -12
  71. package/dist/core/completions/generators/fish-generator.d.ts +9 -1
  72. package/dist/core/completions/generators/fish-generator.js +39 -25
  73. package/dist/core/completions/generators/powershell-generator.d.ts +1 -1
  74. package/dist/core/completions/generators/powershell-generator.js +21 -11
  75. package/dist/core/completions/generators/zsh-generator.d.ts +3 -6
  76. package/dist/core/completions/generators/zsh-generator.js +21 -42
  77. package/dist/core/completions/installers/bash-installer.js +6 -6
  78. package/dist/core/completions/installers/fish-installer.js +1 -1
  79. package/dist/core/completions/installers/powershell-installer.js +14 -14
  80. package/dist/core/completions/installers/zsh-installer.d.ts +7 -1
  81. package/dist/core/completions/installers/zsh-installer.js +36 -8
  82. package/dist/core/completions/templates/bash-templates.d.ts +1 -1
  83. package/dist/core/completions/templates/bash-templates.js +12 -6
  84. package/dist/core/completions/templates/fish-templates.d.ts +2 -2
  85. package/dist/core/completions/templates/fish-templates.js +20 -9
  86. package/dist/core/completions/templates/powershell-templates.d.ts +1 -1
  87. package/dist/core/completions/templates/powershell-templates.js +13 -4
  88. package/dist/core/completions/templates/zsh-templates.d.ts +1 -1
  89. package/dist/core/completions/templates/zsh-templates.js +18 -9
  90. package/dist/core/config-schema.d.ts +20 -1
  91. package/dist/core/config-schema.js +70 -2
  92. package/dist/core/config.d.ts +3 -3
  93. package/dist/core/config.js +4 -4
  94. package/dist/core/global-config.d.ts +57 -12
  95. package/dist/core/global-config.js +344 -27
  96. package/dist/core/index.d.ts +1 -1
  97. package/dist/core/index.js +2 -2
  98. package/dist/core/init.d.ts +6 -1
  99. package/dist/core/init.js +99 -77
  100. package/dist/core/legacy-cleanup.d.ts +17 -17
  101. package/dist/core/legacy-cleanup.js +96 -79
  102. package/dist/core/list.js +18 -4
  103. package/dist/core/migration.d.ts +3 -1
  104. package/dist/core/migration.js +7 -8
  105. package/dist/core/parsers/change-parser.js +1 -1
  106. package/dist/core/parsers/markdown-parser.js +2 -2
  107. package/dist/core/profile-sync-drift.d.ts +1 -1
  108. package/dist/core/profile-sync-drift.js +13 -13
  109. package/dist/core/project-config.d.ts +4 -4
  110. package/dist/core/project-config.js +11 -11
  111. package/dist/core/schemas/change.schema.d.ts +1 -1
  112. package/dist/core/schemas/change.schema.js +1 -1
  113. package/dist/core/schemas/spec.schema.d.ts +1 -1
  114. package/dist/core/schemas/spec.schema.js +1 -1
  115. package/dist/core/sdd/adr.js +23 -1
  116. package/dist/core/sdd/agent-binding.d.ts +346 -0
  117. package/dist/core/sdd/agent-binding.js +343 -0
  118. package/dist/core/sdd/agent-runtime-contract.d.ts +204 -0
  119. package/dist/core/sdd/agent-runtime-contract.js +200 -0
  120. package/dist/core/sdd/backlog-cli.d.ts +16 -0
  121. package/dist/core/sdd/backlog-cli.js +146 -0
  122. package/dist/core/sdd/backlog-conflict-policy.d.ts +58 -0
  123. package/dist/core/sdd/backlog-conflict-policy.js +230 -0
  124. package/dist/core/sdd/backlog-projection.d.ts +8 -0
  125. package/dist/core/sdd/backlog-projection.js +89 -0
  126. package/dist/core/sdd/backlog-provider-contract.d.ts +252 -0
  127. package/dist/core/sdd/backlog-provider-contract.js +158 -0
  128. package/dist/core/sdd/bootstrap.js +2 -2
  129. package/dist/core/sdd/check.d.ts +44 -0
  130. package/dist/core/sdd/check.js +62 -24
  131. package/dist/core/sdd/contract.d.ts +13 -0
  132. package/dist/core/sdd/contract.js +36 -0
  133. package/dist/core/sdd/coordination/coordination-adapters.d.ts +53 -8
  134. package/dist/core/sdd/coordination/coordination-adapters.js +182 -16
  135. package/dist/core/sdd/coordination/index.d.ts +1 -0
  136. package/dist/core/sdd/coordination/index.js +1 -0
  137. package/dist/core/sdd/coordination/redis-runtime.d.ts +131 -0
  138. package/dist/core/sdd/coordination/redis-runtime.js +698 -0
  139. package/dist/core/sdd/deepagent-contracts.d.ts +370 -0
  140. package/dist/core/sdd/deepagent-contracts.js +235 -0
  141. package/dist/core/sdd/deepagents/adr-governor.d.ts +2 -0
  142. package/dist/core/sdd/deepagents/adr-governor.js +30 -0
  143. package/dist/core/sdd/deepagents/backend.d.ts +63 -0
  144. package/dist/core/sdd/deepagents/backend.js +174 -0
  145. package/dist/core/sdd/deepagents/codesdd-tools.d.ts +39 -0
  146. package/dist/core/sdd/deepagents/codesdd-tools.js +83 -0
  147. package/dist/core/sdd/deepagents/evidence-mapper.d.ts +86 -0
  148. package/dist/core/sdd/deepagents/evidence-mapper.js +178 -0
  149. package/dist/core/sdd/deepagents/model-provider.d.ts +53 -0
  150. package/dist/core/sdd/deepagents/model-provider.js +379 -0
  151. package/dist/core/sdd/deepagents/policy-enforcement.d.ts +30 -0
  152. package/dist/core/sdd/deepagents/policy-enforcement.js +90 -0
  153. package/dist/core/sdd/deepagents/policy.d.ts +75 -0
  154. package/dist/core/sdd/deepagents/policy.js +358 -0
  155. package/dist/core/sdd/deepagents/quality-witness.d.ts +3 -0
  156. package/dist/core/sdd/deepagents/quality-witness.js +77 -0
  157. package/dist/core/sdd/deepagents/reversa-subagents.d.ts +75 -0
  158. package/dist/core/sdd/deepagents/reversa-subagents.js +182 -0
  159. package/dist/core/sdd/deepagents/runtime-factory.d.ts +90 -0
  160. package/dist/core/sdd/deepagents/runtime-factory.js +231 -0
  161. package/dist/core/sdd/deepagents/runtime-loader.d.ts +16 -0
  162. package/dist/core/sdd/deepagents/runtime-loader.js +65 -0
  163. package/dist/core/sdd/default-bootstrap-files.d.ts +3 -3
  164. package/dist/core/sdd/default-bootstrap-files.js +50 -10
  165. package/dist/core/sdd/default-skills.d.ts +30 -0
  166. package/dist/core/sdd/default-skills.js +288 -8
  167. package/dist/core/sdd/devtrack-api-appliance.d.ts +91 -0
  168. package/dist/core/sdd/devtrack-api-appliance.js +280 -0
  169. package/dist/core/sdd/devtrack-api-architecture.d.ts +31 -0
  170. package/dist/core/sdd/devtrack-api-architecture.js +608 -0
  171. package/dist/core/sdd/devtrack-api-import-boundary.d.ts +19 -0
  172. package/dist/core/sdd/devtrack-api-import-boundary.js +32 -0
  173. package/dist/core/sdd/diagnose.d.ts +59 -0
  174. package/dist/core/sdd/diagnose.js +37 -37
  175. package/dist/core/sdd/docs-sync.js +54 -20
  176. package/dist/core/sdd/domain/capability-diff.d.ts +63 -0
  177. package/dist/core/sdd/domain/capability-diff.js +200 -0
  178. package/dist/core/sdd/domain/change-safety-guardrails.d.ts +74 -0
  179. package/dist/core/sdd/domain/change-safety-guardrails.js +333 -0
  180. package/dist/core/sdd/domain/post-active-validation.d.ts +7 -0
  181. package/dist/core/sdd/domain/post-active-validation.js +61 -0
  182. package/dist/core/sdd/domain/semantic-intent-classifier.d.ts +29 -0
  183. package/dist/core/sdd/domain/semantic-intent-classifier.js +117 -0
  184. package/dist/core/sdd/domain/transition-engine.js +1 -0
  185. package/dist/core/sdd/entity-reference.d.ts +5 -0
  186. package/dist/core/sdd/entity-reference.js +22 -0
  187. package/dist/core/sdd/foundation-artifact-map-validator.d.ts +16 -0
  188. package/dist/core/sdd/foundation-artifact-map-validator.js +71 -0
  189. package/dist/core/sdd/foundation-layer-manifest.d.ts +24 -0
  190. package/dist/core/sdd/foundation-layer-manifest.js +117 -0
  191. package/dist/core/sdd/governance-backfill.d.ts +31 -0
  192. package/dist/core/sdd/governance-backfill.js +359 -0
  193. package/dist/core/sdd/governance-parser.d.ts +21 -0
  194. package/dist/core/sdd/governance-parser.js +91 -0
  195. package/dist/core/sdd/governance-schemas.d.ts +245 -0
  196. package/dist/core/sdd/governance-schemas.js +143 -0
  197. package/dist/core/sdd/{import-openspec.d.ts → import-legacy-spec.d.ts} +7 -7
  198. package/dist/core/sdd/{import-openspec.js → import-legacy-spec.js} +21 -29
  199. package/dist/core/sdd/init.d.ts +3 -0
  200. package/dist/core/sdd/init.js +6 -3
  201. package/dist/core/sdd/intent-guard.d.ts +22 -0
  202. package/dist/core/sdd/intent-guard.js +67 -0
  203. package/dist/core/sdd/json-schema.js +108 -6
  204. package/dist/core/sdd/knowledge-graph.d.ts +45 -0
  205. package/dist/core/sdd/knowledge-graph.js +288 -0
  206. package/dist/core/sdd/legacy-operations.js +507 -44
  207. package/dist/core/sdd/lenses.d.ts +1 -0
  208. package/dist/core/sdd/lenses.js +29 -1
  209. package/dist/core/sdd/migrate-workspace.js +95 -2
  210. package/dist/core/sdd/migrate.d.ts +1 -1
  211. package/dist/core/sdd/migrate.js +36 -2
  212. package/dist/core/sdd/package-security-gates.d.ts +21 -0
  213. package/dist/core/sdd/package-security-gates.js +119 -0
  214. package/dist/core/sdd/package-structure-gate.d.ts +83 -0
  215. package/dist/core/sdd/package-structure-gate.js +357 -0
  216. package/dist/core/sdd/parallel-feat-automation.d.ts +330 -0
  217. package/dist/core/sdd/parallel-feat-automation.js +424 -0
  218. package/dist/core/sdd/plugin-broker.d.ts +777 -0
  219. package/dist/core/sdd/plugin-broker.js +492 -0
  220. package/dist/core/sdd/plugin-certification.d.ts +79 -0
  221. package/dist/core/sdd/plugin-certification.js +453 -0
  222. package/dist/core/sdd/plugin-cli.d.ts +139 -0
  223. package/dist/core/sdd/plugin-cli.js +265 -0
  224. package/dist/core/sdd/plugin-evidence.d.ts +348 -0
  225. package/dist/core/sdd/plugin-evidence.js +307 -0
  226. package/dist/core/sdd/plugin-manifest.d.ts +232 -0
  227. package/dist/core/sdd/plugin-manifest.js +225 -0
  228. package/dist/core/sdd/plugin-policy-pack.d.ts +88 -0
  229. package/dist/core/sdd/plugin-policy-pack.js +236 -0
  230. package/dist/core/sdd/plugin-policy.d.ts +68 -0
  231. package/dist/core/sdd/plugin-policy.js +212 -0
  232. package/dist/core/sdd/plugin-registry.d.ts +447 -0
  233. package/dist/core/sdd/plugin-registry.js +138 -0
  234. package/dist/core/sdd/plugin-sdk-contract.d.ts +363 -0
  235. package/dist/core/sdd/plugin-sdk-contract.js +268 -0
  236. package/dist/core/sdd/plugin-skill-binding.d.ts +151 -0
  237. package/dist/core/sdd/plugin-skill-binding.js +339 -0
  238. package/dist/core/sdd/quality-artifact-manifest-validator.d.ts +28 -0
  239. package/dist/core/sdd/quality-artifact-manifest-validator.js +167 -0
  240. package/dist/core/sdd/quality-evidence-renderer.d.ts +65 -0
  241. package/dist/core/sdd/quality-evidence-renderer.js +218 -0
  242. package/dist/core/sdd/quality-scenario-runner.d.ts +42 -0
  243. package/dist/core/sdd/quality-scenario-runner.js +613 -0
  244. package/dist/core/sdd/quality-validation.d.ts +620 -0
  245. package/dist/core/sdd/quality-validation.js +239 -0
  246. package/dist/core/sdd/release-readiness.d.ts +19 -0
  247. package/dist/core/sdd/release-readiness.js +472 -0
  248. package/dist/core/sdd/resolve-project-root.d.ts +2 -2
  249. package/dist/core/sdd/resolve-project-root.js +11 -5
  250. package/dist/core/sdd/runtime-boundary-contract.d.ts +45 -0
  251. package/dist/core/sdd/runtime-boundary-contract.js +90 -0
  252. package/dist/core/sdd/sanitize.d.ts +30 -1
  253. package/dist/core/sdd/sanitize.js +23 -23
  254. package/dist/core/sdd/sdk-agent-plugin-quality-gates.d.ts +150 -0
  255. package/dist/core/sdd/sdk-agent-plugin-quality-gates.js +258 -0
  256. package/dist/core/sdd/services/agent-run.service.d.ts +97 -0
  257. package/dist/core/sdd/services/agent-run.service.js +261 -0
  258. package/dist/core/sdd/services/breakdown.service.js +2 -1
  259. package/dist/core/sdd/services/capability-diff.service.d.ts +18 -0
  260. package/dist/core/sdd/services/capability-diff.service.js +26 -0
  261. package/dist/core/sdd/services/change-safety-preflight.service.d.ts +17 -0
  262. package/dist/core/sdd/services/change-safety-preflight.service.js +17 -0
  263. package/dist/core/sdd/services/context.service.d.ts +43 -340
  264. package/dist/core/sdd/services/context.service.js +341 -25
  265. package/dist/core/sdd/services/debate.service.js +15 -2
  266. package/dist/core/sdd/services/feature-lint.service.d.ts +22 -0
  267. package/dist/core/sdd/services/feature-lint.service.js +105 -5
  268. package/dist/core/sdd/services/finalize.service.d.ts +105 -0
  269. package/dist/core/sdd/services/finalize.service.js +499 -38
  270. package/dist/core/sdd/services/frontend-gap.service.js +22 -7
  271. package/dist/core/sdd/services/frontend-impact.service.d.ts +1 -1
  272. package/dist/core/sdd/services/governance-control-plane-runtime-adapters.d.ts +17 -0
  273. package/dist/core/sdd/services/governance-control-plane-runtime-adapters.js +38 -0
  274. package/dist/core/sdd/services/governance-control-plane.service.d.ts +66 -0
  275. package/dist/core/sdd/services/governance-control-plane.service.js +134 -0
  276. package/dist/core/sdd/services/ingest-deposito.service.js +1 -1
  277. package/dist/core/sdd/services/legacy-capability.service.d.ts +10 -7
  278. package/dist/core/sdd/services/legacy-capability.service.js +38 -21
  279. package/dist/core/sdd/services/mcp-runtime.service.d.ts +123 -8
  280. package/dist/core/sdd/services/mcp-runtime.service.js +1085 -33
  281. package/dist/core/sdd/services/onboard.service.js +2 -1
  282. package/dist/core/sdd/services/rebuild.service.js +6 -1
  283. package/dist/core/sdd/services/semantic-intent-classifier.service.d.ts +6 -0
  284. package/dist/core/sdd/services/semantic-intent-classifier.service.js +7 -0
  285. package/dist/core/sdd/services/skills-sync.service.d.ts +17 -5
  286. package/dist/core/sdd/services/skills-sync.service.js +55 -2
  287. package/dist/core/sdd/services/start.service.js +6 -4
  288. package/dist/core/sdd/skill-bundles-curation-schema.d.ts +66 -0
  289. package/dist/core/sdd/skill-bundles-curation-schema.js +52 -0
  290. package/dist/core/sdd/skill-evidence.d.ts +19 -0
  291. package/dist/core/sdd/skill-evidence.js +38 -0
  292. package/dist/core/sdd/skill-policy-pool.d.ts +46 -0
  293. package/dist/core/sdd/skill-policy-pool.js +185 -0
  294. package/dist/core/sdd/state.d.ts +23 -0
  295. package/dist/core/sdd/state.js +313 -66
  296. package/dist/core/sdd/store/sdd-stores.js +2 -2
  297. package/dist/core/sdd/structural-health.d.ts +55 -55
  298. package/dist/core/sdd/types.d.ts +60 -19
  299. package/dist/core/sdd/types.js +21 -0
  300. package/dist/core/sdd/upgrade-to-codesdd.d.ts +45 -0
  301. package/dist/core/sdd/upgrade-to-codesdd.js +179 -0
  302. package/dist/core/sdd/views.js +17 -0
  303. package/dist/core/sdd/workspace-schemas.d.ts +670 -19
  304. package/dist/core/sdd/workspace-schemas.js +285 -5
  305. package/dist/core/sdd/write-manifest.js +22 -4
  306. package/dist/core/shared/skill-generation.d.ts +1 -1
  307. package/dist/core/shared/skill-generation.js +15 -15
  308. package/dist/core/shared/tool-detection.d.ts +3 -3
  309. package/dist/core/shared/tool-detection.js +14 -14
  310. package/dist/core/specs-apply.js +6 -6
  311. package/dist/core/templates/index.d.ts +1 -1
  312. package/dist/core/templates/index.js +1 -1
  313. package/dist/core/templates/workflows/apply-change.js +14 -14
  314. package/dist/core/templates/workflows/archive-change.js +32 -32
  315. package/dist/core/templates/workflows/bulk-archive-change.js +25 -25
  316. package/dist/core/templates/workflows/continue-change.js +12 -12
  317. package/dist/core/templates/workflows/explore.js +29 -29
  318. package/dist/core/templates/workflows/feedback.js +6 -6
  319. package/dist/core/templates/workflows/ff-change.js +24 -24
  320. package/dist/core/templates/workflows/new-change.js +20 -20
  321. package/dist/core/templates/workflows/onboard.js +33 -33
  322. package/dist/core/templates/workflows/propose.js +23 -23
  323. package/dist/core/templates/workflows/sdd.js +8 -8
  324. package/dist/core/templates/workflows/sync-specs.js +19 -19
  325. package/dist/core/templates/workflows/verify-change.js +17 -17
  326. package/dist/core/update.d.ts +2 -2
  327. package/dist/core/update.js +16 -15
  328. package/dist/core/validation/constants.d.ts +1 -1
  329. package/dist/core/validation/constants.js +1 -1
  330. package/dist/core/view.js +11 -11
  331. package/dist/domains/sdd/index.d.ts +6 -0
  332. package/dist/domains/sdd/index.js +6 -0
  333. package/dist/infrastructures/sdd/index.d.ts +7 -0
  334. package/dist/infrastructures/sdd/index.js +6 -0
  335. package/dist/presentations/cli/sdd/index.d.ts +3 -0
  336. package/dist/presentations/cli/sdd/index.js +3 -0
  337. package/dist/shared/sdd/index.d.ts +3 -0
  338. package/dist/shared/sdd/index.js +2 -0
  339. package/dist/telemetry/config.d.ts +2 -1
  340. package/dist/telemetry/config.js +17 -8
  341. package/dist/telemetry/index.d.ts +10 -2
  342. package/dist/telemetry/index.js +40 -7
  343. package/dist/ui/ascii-patterns.d.ts +2 -2
  344. package/dist/ui/ascii-patterns.js +2 -2
  345. package/dist/ui/welcome-screen.js +2 -2
  346. package/dist/utils/change-metadata.d.ts +4 -4
  347. package/dist/utils/change-metadata.js +6 -6
  348. package/dist/utils/change-utils.d.ts +3 -3
  349. package/dist/utils/change-utils.js +5 -5
  350. package/dist/utils/file-system.js +1 -1
  351. package/dist/utils/interactive.js +1 -1
  352. package/dist/utils/item-discovery.js +4 -4
  353. package/dist/utils/legacy-spec-compat.d.ts +2 -0
  354. package/dist/utils/legacy-spec-compat.js +2 -0
  355. package/dist/utils/shell-detection.d.ts +1 -0
  356. package/dist/utils/shell-detection.js +16 -0
  357. package/package.json +34 -21
  358. package/schemas/sdd/1-spec.schema.json +1 -1
  359. package/schemas/sdd/2-plan.schema.json +280 -3
  360. package/schemas/sdd/3-tasks.schema.json +73 -1
  361. package/schemas/sdd/4-changelog.schema.json +1 -1
  362. package/schemas/sdd/5-quality.schema.json +701 -5
  363. package/schemas/sdd/adr.schema.json +148 -0
  364. package/schemas/sdd/agent-binding-adapter.schema.json +210 -0
  365. package/schemas/sdd/agent-binding-resolution.schema.json +338 -0
  366. package/schemas/sdd/agent-runtime-command-plan.schema.json +212 -0
  367. package/schemas/sdd/agent-runtime-opencode-run-evidence.schema.json +270 -0
  368. package/schemas/sdd/backlog-projection-plan.schema.json +180 -0
  369. package/schemas/sdd/backlog-provider-contract.schema.json +260 -0
  370. package/schemas/sdd/codesdd-plugin.schema.json +645 -0
  371. package/schemas/sdd/debate.schema.json +244 -0
  372. package/schemas/sdd/deepagent-decision-evidence.schema.json +58 -0
  373. package/schemas/sdd/deepagent-env-contract.schema.json +143 -0
  374. package/schemas/sdd/deepagent-quality-evidence.schema.json +108 -0
  375. package/schemas/sdd/deepagent-run-evidence.schema.json +192 -0
  376. package/schemas/sdd/deepagent-run-plan.schema.json +197 -0
  377. package/schemas/sdd/deepagent-run-request.schema.json +637 -0
  378. package/schemas/sdd/deepagent-subagent-evidence.schema.json +110 -0
  379. package/schemas/sdd/deepagent-tool-call-evidence.schema.json +78 -0
  380. package/schemas/sdd/discarded.schema.json +127 -0
  381. package/schemas/sdd/epic.schema.json +147 -0
  382. package/schemas/sdd/insight.schema.json +136 -0
  383. package/schemas/sdd/parallel-feat-automation-plan.schema.json +304 -0
  384. package/schemas/sdd/parallel-feat-automation-request.schema.json +109 -0
  385. package/schemas/sdd/parallel-feat-scheduler-request.schema.json +116 -0
  386. package/schemas/sdd/parallel-feat-scheduler-result.schema.json +404 -0
  387. package/schemas/sdd/plugin-artifact-manifest.schema.json +259 -0
  388. package/schemas/sdd/plugin-artifact-map.schema.json +223 -0
  389. package/schemas/sdd/plugin-compliance-index.schema.json +136 -0
  390. package/schemas/sdd/plugin-dry-run-plan.schema.json +260 -0
  391. package/schemas/sdd/plugin-evidence-manifest.schema.json +678 -0
  392. package/schemas/sdd/plugin-language-runtime.schema.json +103 -0
  393. package/schemas/sdd/plugin-package-governance.schema.json +74 -0
  394. package/schemas/sdd/plugin-policy-evaluation.schema.json +92 -0
  395. package/schemas/sdd/plugin-policy-pack-evaluation.schema.json +94 -0
  396. package/schemas/sdd/plugin-policy-pack.schema.json +196 -0
  397. package/schemas/sdd/plugin-registry.schema.json +729 -0
  398. package/schemas/sdd/plugin-rollback-manifest.schema.json +87 -0
  399. package/schemas/sdd/plugin-runtime-invocation-plan.schema.json +954 -0
  400. package/schemas/sdd/plugin-skill-binding-resolution.schema.json +305 -0
  401. package/schemas/sdd/plugin-skill-binding.schema.json +88 -0
  402. package/schemas/sdd/plugin-validation-manifest.schema.json +123 -0
  403. package/schemas/sdd/quality-architecture-schema.schema.json +216 -0
  404. package/schemas/sdd/quality-evidence-bundle.schema.json +1337 -0
  405. package/schemas/sdd/quality-run.schema.json +197 -0
  406. package/schemas/sdd/quality-scenario.schema.json +252 -0
  407. package/schemas/sdd/sdk-agent-plugin-quality-gate-input.schema.json +168 -0
  408. package/schemas/sdd/sdk-agent-plugin-quality-gate-report.schema.json +160 -0
  409. package/schemas/sdd/workspace-catalog.schema.json +13232 -35
  410. package/schemas/spec-driven/schema.yaml +4 -4
  411. package/schemas/spec-driven/templates/proposal.md +1 -1
  412. package/dist/utils/openspec-compat.d.ts +0 -2
  413. package/dist/utils/openspec-compat.js +0 -2
@@ -1,14 +1,18 @@
1
1
  /**
2
- * Legacy cleanup module for detecting and removing OpenSpec artifacts
2
+ * Legacy cleanup module for detecting and removing CodeSDD artifacts
3
3
  * from previous init versions during the migration to the skill-based workflow.
4
4
  */
5
5
  import { promises as fs } from 'fs';
6
6
  import chalk from 'chalk';
7
7
  import { FileSystemUtils, removeMarkerBlock as removeMarkerBlockUtil } from '../utils/file-system.js';
8
- import { OPENSPEC_MARKERS } from './config.js';
8
+ import { CODESDD_MARKERS, LEGACY_SPEC_DIR_NAME } from './config.js';
9
+ const DEPRECATED_LEGACY_SPEC_DIR_NAMES = ['codesdd'];
10
+ function legacySpecRootNames() {
11
+ return [LEGACY_SPEC_DIR_NAME, ...DEPRECATED_LEGACY_SPEC_DIR_NAMES];
12
+ }
9
13
  /**
10
14
  * Legacy config file names from the old ToolRegistry.
11
- * These were config files created at project root with OpenSpec markers.
15
+ * These were config files created at project root with CodeSDD markers.
12
16
  */
13
17
  export const LEGACY_CONFIG_FILES = [
14
18
  'CLAUDE.md',
@@ -17,7 +21,7 @@ export const LEGACY_CONFIG_FILES = [
17
21
  'COSTRICT.md',
18
22
  'QODER.md',
19
23
  'IFLOW.md',
20
- 'AGENTS.md', // root AGENTS.md (not openspec/AGENTS.md)
24
+ 'AGENTS.md', // root AGENTS.md (not legacy-spec/AGENTS.md)
21
25
  'QWEN.md',
22
26
  ];
23
27
  /**
@@ -26,33 +30,33 @@ export const LEGACY_CONFIG_FILES = [
26
30
  * Some tools used a directory structure, others used individual files.
27
31
  */
28
32
  export const LEGACY_SLASH_COMMAND_PATHS = {
29
- // Directory-based: .tooldir/commands/openspec/ or .tooldir/commands/openspec/*.md
30
- 'claude': { type: 'directory', path: '.claude/commands/openspec' },
31
- 'codebuddy': { type: 'directory', path: '.codebuddy/commands/openspec' },
32
- 'qoder': { type: 'directory', path: '.qoder/commands/openspec' },
33
- 'crush': { type: 'directory', path: '.crush/commands/openspec' },
34
- 'gemini': { type: 'directory', path: '.gemini/commands/openspec' },
35
- 'costrict': { type: 'directory', path: '.cospec/openspec/commands' },
36
- // File-based: individual openspec-*.md files in a commands/workflows/prompts folder
37
- 'cursor': { type: 'files', pattern: '.cursor/commands/openspec-*.md' },
38
- 'windsurf': { type: 'files', pattern: '.windsurf/workflows/openspec-*.md' },
39
- 'kilocode': { type: 'files', pattern: '.kilocode/workflows/openspec-*.md' },
40
- 'kiro': { type: 'files', pattern: '.kiro/prompts/openspec-*.prompt.md' },
41
- 'github-copilot': { type: 'files', pattern: '.github/prompts/openspec-*.prompt.md' },
42
- 'amazon-q': { type: 'files', pattern: '.amazonq/prompts/openspec-*.md' },
43
- 'cline': { type: 'files', pattern: '.clinerules/workflows/openspec-*.md' },
44
- 'roocode': { type: 'files', pattern: '.roo/commands/openspec-*.md' },
45
- 'auggie': { type: 'files', pattern: '.augment/commands/openspec-*.md' },
46
- 'factory': { type: 'files', pattern: '.factory/commands/openspec-*.md' },
47
- 'opencode': { type: 'files', pattern: ['.opencode/command/opsx-*.md', '.opencode/command/openspec-*.md'] },
48
- 'continue': { type: 'files', pattern: '.continue/prompts/openspec-*.prompt' },
49
- 'antigravity': { type: 'files', pattern: '.agent/workflows/openspec-*.md' },
50
- 'iflow': { type: 'files', pattern: '.iflow/commands/openspec-*.md' },
51
- 'qwen': { type: 'files', pattern: '.qwen/commands/openspec-*.toml' },
52
- 'codex': { type: 'files', pattern: '.codex/prompts/openspec-*.md' },
33
+ // Directory-based: .tooldir/commands/legacy-spec/ or .tooldir/commands/legacy-spec/*.md
34
+ 'claude': { type: 'directory', path: '.claude/commands/codesdd' },
35
+ 'codebuddy': { type: 'directory', path: '.codebuddy/commands/codesdd' },
36
+ 'qoder': { type: 'directory', path: '.qoder/commands/codesdd' },
37
+ 'crush': { type: 'directory', path: '.crush/commands/codesdd' },
38
+ 'gemini': { type: 'directory', path: '.gemini/commands/codesdd' },
39
+ 'costrict': { type: 'directory', path: '.cospec/legacy-spec/commands' },
40
+ // File-based: individual codesdd-*.md files in a commands/workflows/prompts folder
41
+ 'cursor': { type: 'files', pattern: '.cursor/commands/codesdd-*.md' },
42
+ 'windsurf': { type: 'files', pattern: '.windsurf/workflows/codesdd-*.md' },
43
+ 'kilocode': { type: 'files', pattern: '.kilocode/workflows/codesdd-*.md' },
44
+ 'kiro': { type: 'files', pattern: '.kiro/prompts/codesdd-*.prompt.md' },
45
+ 'github-copilot': { type: 'files', pattern: '.github/prompts/codesdd-*.prompt.md' },
46
+ 'amazon-q': { type: 'files', pattern: '.amazonq/prompts/codesdd-*.md' },
47
+ 'cline': { type: 'files', pattern: '.clinerules/workflows/codesdd-*.md' },
48
+ 'roocode': { type: 'files', pattern: '.roo/commands/codesdd-*.md' },
49
+ 'auggie': { type: 'files', pattern: '.augment/commands/codesdd-*.md' },
50
+ 'factory': { type: 'files', pattern: '.factory/commands/codesdd-*.md' },
51
+ 'opencode': { type: 'files', pattern: ['.opencode/command/opsx-*.md', '.opencode/command/codesdd-*.md'] },
52
+ 'continue': { type: 'files', pattern: '.continue/prompts/codesdd-*.prompt' },
53
+ 'antigravity': { type: 'files', pattern: '.agent/workflows/codesdd-*.md' },
54
+ 'iflow': { type: 'files', pattern: '.iflow/commands/codesdd-*.md' },
55
+ 'qwen': { type: 'files', pattern: '.qwen/commands/codesdd-*.toml' },
56
+ 'codex': { type: 'files', pattern: '.codex/prompts/codesdd-*.md' },
53
57
  };
54
58
  /**
55
- * Detects all legacy OpenSpec artifacts in a project.
59
+ * Detects all legacy CodeSDD artifacts in a project.
56
60
  *
57
61
  * @param projectPath - The root path of the project
58
62
  * @returns Detection result with all found legacy artifacts
@@ -92,7 +96,7 @@ export async function detectLegacyArtifacts(projectPath) {
92
96
  return result;
93
97
  }
94
98
  /**
95
- * Detects legacy config files with OpenSpec markers.
99
+ * Detects legacy config files with CodeSDD markers.
96
100
  * All config files with markers are candidates for update (marker removal only).
97
101
  * Config files are NEVER deleted - they belong to the user's project root.
98
102
  *
@@ -106,7 +110,7 @@ export async function detectLegacyConfigFiles(projectPath) {
106
110
  const filePath = FileSystemUtils.joinPath(projectPath, fileName);
107
111
  if (await FileSystemUtils.fileExists(filePath)) {
108
112
  const content = await FileSystemUtils.readFile(filePath);
109
- if (hasOpenSpecMarkers(content)) {
113
+ if (hasCodeSDDMarkers(content)) {
110
114
  allFiles.push(fileName);
111
115
  filesToUpdate.push(fileName); // Always update, never delete config files
112
116
  }
@@ -145,7 +149,7 @@ export async function detectLegacySlashCommands(projectPath) {
145
149
  * Finds legacy slash command files matching a glob pattern.
146
150
  *
147
151
  * @param projectPath - The root path of the project
148
- * @param pattern - Glob pattern like '.cursor/commands/openspec-*.md'
152
+ * @param pattern - Glob pattern like '.cursor/commands/codesdd-*.md'
149
153
  * @returns Array of matching file paths relative to projectPath
150
154
  */
151
155
  async function findLegacySlashCommandFiles(projectPath, pattern) {
@@ -164,9 +168,9 @@ async function findLegacySlashCommandFiles(projectPath, pattern) {
164
168
  try {
165
169
  const entries = await fs.readdir(dirPath);
166
170
  // Convert glob pattern to regex
167
- // openspec-*.md -> /^openspec-.*\.md$/
168
- // openspec-*.prompt.md -> /^openspec-.*\.prompt\.md$/
169
- // openspec-*.toml -> /^openspec-.*\.toml$/
171
+ // codesdd-*.md -> /^codesdd-.*\.md$/
172
+ // codesdd-*.prompt.md -> /^codesdd-.*\.prompt\.md$/
173
+ // codesdd-*.toml -> /^codesdd-.*\.toml$/
170
174
  const regexPattern = filePart
171
175
  .replace(/[.+^${}()|[\]\\]/g, '\\$&') // Escape regex special chars except *
172
176
  .replace(/\*/g, '.*'); // Replace * with .*
@@ -185,7 +189,7 @@ async function findLegacySlashCommandFiles(projectPath, pattern) {
185
189
  return foundFiles;
186
190
  }
187
191
  /**
188
- * Detects legacy OpenSpec structure files (AGENTS.md and project.md).
192
+ * Detects legacy CodeSDD structure files (AGENTS.md and project.md).
189
193
  *
190
194
  * @param projectPath - The root path of the project
191
195
  * @returns Object with detection results for structure files
@@ -194,59 +198,69 @@ export async function detectLegacyStructureFiles(projectPath) {
194
198
  let hasOpenspecAgents = false;
195
199
  let hasProjectMd = false;
196
200
  let hasRootAgentsWithMarkers = false;
197
- // Check for openspec/AGENTS.md
198
- const openspecAgentsPath = FileSystemUtils.joinPath(projectPath, 'openspec', 'AGENTS.md');
199
- hasOpenspecAgents = await FileSystemUtils.fileExists(openspecAgentsPath);
200
- // Check for openspec/project.md (for migration messaging, not deleted)
201
- const projectMdPath = FileSystemUtils.joinPath(projectPath, 'openspec', 'project.md');
202
- hasProjectMd = await FileSystemUtils.fileExists(projectMdPath);
203
- // Check for root AGENTS.md with OpenSpec markers
201
+ // Check for legacy-spec/AGENTS.md
202
+ for (const rootName of legacySpecRootNames()) {
203
+ const legacySpecAgentsPath = FileSystemUtils.joinPath(projectPath, rootName, 'AGENTS.md');
204
+ if (await FileSystemUtils.fileExists(legacySpecAgentsPath)) {
205
+ hasOpenspecAgents = true;
206
+ break;
207
+ }
208
+ }
209
+ // Check for legacy-spec/project.md (for migration messaging, not deleted)
210
+ for (const rootName of legacySpecRootNames()) {
211
+ const projectMdPath = FileSystemUtils.joinPath(projectPath, rootName, 'project.md');
212
+ if (await FileSystemUtils.fileExists(projectMdPath)) {
213
+ hasProjectMd = true;
214
+ break;
215
+ }
216
+ }
217
+ // Check for root AGENTS.md with CodeSDD markers
204
218
  const rootAgentsPath = FileSystemUtils.joinPath(projectPath, 'AGENTS.md');
205
219
  if (await FileSystemUtils.fileExists(rootAgentsPath)) {
206
220
  const content = await FileSystemUtils.readFile(rootAgentsPath);
207
- hasRootAgentsWithMarkers = hasOpenSpecMarkers(content);
221
+ hasRootAgentsWithMarkers = hasCodeSDDMarkers(content);
208
222
  }
209
223
  return { hasOpenspecAgents, hasProjectMd, hasRootAgentsWithMarkers };
210
224
  }
211
225
  /**
212
- * Checks if content contains OpenSpec markers.
226
+ * Checks if content contains CodeSDD markers.
213
227
  *
214
228
  * @param content - File content to check
215
229
  * @returns True if both start and end markers are present
216
230
  */
217
- export function hasOpenSpecMarkers(content) {
218
- return (content.includes(OPENSPEC_MARKERS.start) && content.includes(OPENSPEC_MARKERS.end));
231
+ export function hasCodeSDDMarkers(content) {
232
+ return (content.includes(CODESDD_MARKERS.start) && content.includes(CODESDD_MARKERS.end));
219
233
  }
220
234
  /**
221
- * Checks if file content is 100% OpenSpec content (only markers and whitespace outside).
235
+ * Checks if file content is 100% CodeSDD content (only markers and whitespace outside).
222
236
  *
223
237
  * @param content - File content to check
224
238
  * @returns True if content outside markers is only whitespace
225
239
  */
226
- export function isOnlyOpenSpecContent(content) {
227
- const startIndex = content.indexOf(OPENSPEC_MARKERS.start);
228
- const endIndex = content.indexOf(OPENSPEC_MARKERS.end);
240
+ export function isOnlyCodeSDDContent(content) {
241
+ const startIndex = content.indexOf(CODESDD_MARKERS.start);
242
+ const endIndex = content.indexOf(CODESDD_MARKERS.end);
229
243
  if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {
230
244
  return false;
231
245
  }
232
246
  const before = content.substring(0, startIndex);
233
- const after = content.substring(endIndex + OPENSPEC_MARKERS.end.length);
247
+ const after = content.substring(endIndex + CODESDD_MARKERS.end.length);
234
248
  return before.trim() === '' && after.trim() === '';
235
249
  }
236
250
  /**
237
- * Removes the OpenSpec marker block from file content.
251
+ * Removes the CodeSDD marker block from file content.
238
252
  * Only removes markers that are on their own lines (ignores inline mentions).
239
253
  * Cleans up double blank lines that may result from removal.
240
254
  *
241
- * @param content - File content with OpenSpec markers
255
+ * @param content - File content with CodeSDD markers
242
256
  * @returns Content with marker block removed
243
257
  */
244
258
  export function removeMarkerBlock(content) {
245
- return removeMarkerBlockUtil(content, OPENSPEC_MARKERS.start, OPENSPEC_MARKERS.end);
259
+ return removeMarkerBlockUtil(content, CODESDD_MARKERS.start, CODESDD_MARKERS.end);
246
260
  }
247
261
  /**
248
- * Cleans up legacy OpenSpec artifacts from a project.
249
- * Preserves openspec/project.md (shows migration hint instead of deleting).
262
+ * Cleans up legacy CodeSDD artifacts from a project.
263
+ * Preserves legacy-spec/project.md (shows migration hint instead of deleting).
250
264
  *
251
265
  * @param projectPath - The root path of the project
252
266
  * @param detection - Detection result from detectLegacyArtifacts
@@ -275,7 +289,7 @@ export async function cleanupLegacyArtifacts(projectPath, detection) {
275
289
  result.errors.push(`Failed to modify ${fileName}: ${error.message}`);
276
290
  }
277
291
  }
278
- // Delete legacy slash command directories (these are 100% OpenSpec-managed)
292
+ // Delete legacy slash command directories (these are 100% CodeSDD-managed)
279
293
  for (const dirPath of detection.slashCommandDirs) {
280
294
  const fullPath = FileSystemUtils.joinPath(projectPath, dirPath);
281
295
  try {
@@ -286,7 +300,7 @@ export async function cleanupLegacyArtifacts(projectPath, detection) {
286
300
  result.errors.push(`Failed to delete directory ${dirPath}: ${error.message}`);
287
301
  }
288
302
  }
289
- // Delete legacy slash command files (these are 100% OpenSpec-managed)
303
+ // Delete legacy slash command files (these are 100% CodeSDD-managed)
290
304
  for (const filePath of detection.slashCommandFiles) {
291
305
  const fullPath = FileSystemUtils.joinPath(projectPath, filePath);
292
306
  try {
@@ -297,20 +311,23 @@ export async function cleanupLegacyArtifacts(projectPath, detection) {
297
311
  result.errors.push(`Failed to delete ${filePath}: ${error.message}`);
298
312
  }
299
313
  }
300
- // Delete openspec/AGENTS.md (this is inside openspec/, it's OpenSpec-managed)
314
+ // Delete legacy-spec/AGENTS.md (this is inside legacy-spec/, it's CodeSDD-managed)
301
315
  if (detection.hasOpenspecAgents) {
302
- const agentsPath = FileSystemUtils.joinPath(projectPath, 'openspec', 'AGENTS.md');
303
- if (await FileSystemUtils.fileExists(agentsPath)) {
316
+ for (const rootName of legacySpecRootNames()) {
317
+ const relativePath = `${rootName}/AGENTS.md`;
318
+ const agentsPath = FileSystemUtils.joinPath(projectPath, relativePath);
319
+ if (!(await FileSystemUtils.fileExists(agentsPath)))
320
+ continue;
304
321
  try {
305
322
  await fs.unlink(agentsPath);
306
- result.deletedFiles.push('openspec/AGENTS.md');
323
+ result.deletedFiles.push(relativePath);
307
324
  }
308
325
  catch (error) {
309
- result.errors.push(`Failed to delete openspec/AGENTS.md: ${error.message}`);
326
+ result.errors.push(`Failed to delete ${relativePath}: ${error.message}`);
310
327
  }
311
328
  }
312
329
  }
313
- // Handle root AGENTS.md with OpenSpec markers - remove markers only, NEVER delete
330
+ // Handle root AGENTS.md with CodeSDD markers - remove markers only, NEVER delete
314
331
  // Note: Root AGENTS.md is handled via configFilesToUpdate above (it's in LEGACY_CONFIG_FILES)
315
332
  // This hasRootAgentsWithMarkers flag is just for detection, cleanup happens via configFilesToUpdate
316
333
  return result;
@@ -332,7 +349,7 @@ export function formatCleanupSummary(result) {
332
349
  lines.push(` ✓ Removed ${dir}/ (replaced by /opsx:*)`);
333
350
  }
334
351
  for (const file of result.modifiedFiles) {
335
- lines.push(` ✓ Removed OpenSpec markers from ${file}`);
352
+ lines.push(` ✓ Removed CodeSDD markers from ${file}`);
336
353
  }
337
354
  }
338
355
  if (result.projectMdNeedsMigration) {
@@ -354,7 +371,7 @@ export function formatCleanupSummary(result) {
354
371
  }
355
372
  /**
356
373
  * Build list of files to be removed with explanations.
357
- * Only includes OpenSpec-managed files (slash commands, openspec/AGENTS.md).
374
+ * Only includes CodeSDD-managed files (slash commands, legacy-spec/AGENTS.md).
358
375
  * Config files like CLAUDE.md, AGENTS.md are NEVER deleted.
359
376
  *
360
377
  * @param detection - Detection result from detectLegacyArtifacts
@@ -362,19 +379,19 @@ export function formatCleanupSummary(result) {
362
379
  */
363
380
  function buildRemovalsList(detection) {
364
381
  const removals = [];
365
- // Slash command directories (these are 100% OpenSpec-managed)
382
+ // Slash command directories (these are 100% CodeSDD-managed)
366
383
  for (const dir of detection.slashCommandDirs) {
367
384
  // Split on both forward and backward slashes for Windows compatibility
368
385
  const toolDir = dir.split(/[\/\\]/)[0];
369
386
  removals.push({ path: dir + '/', explanation: `replaced by ${toolDir}/skills/` });
370
387
  }
371
- // Slash command files (these are 100% OpenSpec-managed)
388
+ // Slash command files (these are 100% CodeSDD-managed)
372
389
  for (const file of detection.slashCommandFiles) {
373
390
  removals.push({ path: file, explanation: 'replaced by skills/' });
374
391
  }
375
- // openspec/AGENTS.md (inside openspec/, it's OpenSpec-managed)
392
+ // legacy-spec/AGENTS.md (inside legacy-spec/, it's CodeSDD-managed)
376
393
  if (detection.hasOpenspecAgents) {
377
- removals.push({ path: 'openspec/AGENTS.md', explanation: 'obsolete workflow file' });
394
+ removals.push({ path: 'legacy-spec/AGENTS.md', explanation: 'obsolete workflow file' });
378
395
  }
379
396
  // Note: Config files (CLAUDE.md, AGENTS.md, etc.) are NEVER in the removals list
380
397
  // They always go to the updates list where only markers are removed
@@ -391,7 +408,7 @@ function buildUpdatesList(detection) {
391
408
  const updates = [];
392
409
  // All config files with markers get updated (markers removed, file preserved)
393
410
  for (const file of detection.configFilesToUpdate) {
394
- updates.push({ path: file, explanation: 'removing OpenSpec markers' });
411
+ updates.push({ path: file, explanation: 'removing CodeSDD markers' });
395
412
  }
396
413
  return updates;
397
414
  }
@@ -411,9 +428,9 @@ export function formatDetectionSummary(detection) {
411
428
  return '';
412
429
  }
413
430
  // Header - welcoming upgrade message
414
- lines.push(chalk.bold('Upgrading to the new OpenSpec'));
431
+ lines.push(chalk.bold('Upgrading to the new CodeSDD'));
415
432
  lines.push('');
416
- lines.push('OpenSpec now uses agent skills, the emerging standard across coding');
433
+ lines.push('CodeSDD now uses agent skills, the emerging standard across coding');
417
434
  lines.push('agents. This simplifies your setup while keeping everything working');
418
435
  lines.push('as before.');
419
436
  lines.push('');
@@ -430,7 +447,7 @@ export function formatDetectionSummary(detection) {
430
447
  if (removals.length > 0)
431
448
  lines.push('');
432
449
  lines.push(chalk.bold('Files to update'));
433
- lines.push(chalk.dim('OpenSpec markers will be removed, your content preserved:'));
450
+ lines.push(chalk.dim('CodeSDD markers will be removed, your content preserved:'));
434
451
  for (const { path } of updates) {
435
452
  lines.push(` • ${path}`);
436
453
  }
@@ -468,7 +485,7 @@ export function getToolsFromLegacyArtifacts(detection) {
468
485
  for (const [toolId, pattern] of Object.entries(LEGACY_SLASH_COMMAND_PATHS)) {
469
486
  if (pattern.type === 'files' && pattern.pattern) {
470
487
  // Convert glob pattern to regex for matching
471
- // e.g., '.cursor/commands/openspec-*.md' -> /^\.cursor\/commands\/openspec-.*\.md$/
488
+ // e.g., '.cursor/commands/codesdd-*.md' -> /^\.cursor\/commands\/codesdd-.*\.md$/
472
489
  const patterns = Array.isArray(pattern.pattern) ? pattern.pattern : [pattern.pattern];
473
490
  let matched = false;
474
491
  for (const p of patterns) {
@@ -498,11 +515,11 @@ export function getToolsFromLegacyArtifacts(detection) {
498
515
  export function formatProjectMdMigrationHint() {
499
516
  const lines = [];
500
517
  lines.push(chalk.yellow.bold('Needs your attention'));
501
- lines.push(' • openspec/project.md');
518
+ lines.push(' • legacy-spec/project.md');
502
519
  lines.push(chalk.dim(' We won\'t delete this file. It may contain useful project context.'));
503
520
  lines.push('');
504
- lines.push(chalk.dim(' The new openspec/config.yaml has a "context:" section for planning'));
505
- lines.push(chalk.dim(' context. This is included in every OpenSpec request and works more'));
521
+ lines.push(chalk.dim(' The new legacy-spec/config.yaml has a "context:" section for planning'));
522
+ lines.push(chalk.dim(' context. This is included in every CodeSDD request and works more'));
506
523
  lines.push(chalk.dim(' reliably than the old project.md approach.'));
507
524
  lines.push('');
508
525
  lines.push(chalk.dim(' Review project.md, move any useful content to config.yaml\'s context'));
package/dist/core/list.js CHANGED
@@ -5,7 +5,7 @@ import { readFileSync } from 'fs';
5
5
  import { join } from 'path';
6
6
  import { MarkdownParser } from './parsers/markdown-parser.js';
7
7
  import { CLI_NAME } from './branding.js';
8
- import { resolveOpenSpecSubpath } from './sdd/services/legacy-capability.service.js';
8
+ import { resolveLegacySpecSubpath } from './sdd/services/legacy-capability.service.js';
9
9
  /**
10
10
  * Get the most recent modification time of any file in a directory (recursive).
11
11
  * Falls back to the directory's own mtime if no files are found.
@@ -65,13 +65,27 @@ export class ListCommand {
65
65
  async execute(targetPath = '.', mode = 'changes', options = {}) {
66
66
  const { sort = 'recent', json = false } = options;
67
67
  if (mode === 'changes') {
68
- const changesDir = resolveOpenSpecSubpath(targetPath, 'changes');
68
+ const changesDir = resolveLegacySpecSubpath(targetPath, 'changes');
69
69
  // Check if changes directory exists
70
70
  try {
71
71
  await fs.access(changesDir);
72
72
  }
73
73
  catch {
74
- throw new Error(`No OpenSpec changes directory found. Run '${CLI_NAME} init' first.`);
74
+ const sddStatePath = path.join(targetPath, '.sdd', 'state', 'backlog.yaml');
75
+ try {
76
+ await fs.access(sddStatePath);
77
+ const message = `This repository uses SDD canonical state. The legacy 'changes/' directory does not apply here.\nUse '${CLI_NAME} sdd next' to see ready FEATs or '${CLI_NAME} sdd check' for the backlog overview.`;
78
+ if (json) {
79
+ console.log(JSON.stringify({ changes: [], hint: message }, null, 2));
80
+ }
81
+ else {
82
+ console.log(message);
83
+ }
84
+ return;
85
+ }
86
+ catch {
87
+ throw new Error(`No CodeSDD changes directory found. Run '${CLI_NAME} init' first.`);
88
+ }
75
89
  }
76
90
  // Get all directories in changes (excluding archive)
77
91
  const entries = await fs.readdir(changesDir, { withFileTypes: true });
@@ -132,7 +146,7 @@ export class ListCommand {
132
146
  return;
133
147
  }
134
148
  // specs mode
135
- const specsDir = resolveOpenSpecSubpath(targetPath, 'specs');
149
+ const specsDir = resolveLegacySpecSubpath(targetPath, 'specs');
136
150
  try {
137
151
  await fs.access(specsDir);
138
152
  }
@@ -19,5 +19,7 @@ export declare function scanInstalledWorkflows(projectPath: string, tools: AIToo
19
19
  * - If no profile field exists and no workflows are installed: no-op (defaults apply).
20
20
  * - If profile field already exists: no-op.
21
21
  */
22
- export declare function migrateIfNeeded(projectPath: string, tools: AIToolOption[]): void;
22
+ export declare function migrateIfNeeded(projectPath: string, tools: AIToolOption[], options?: {
23
+ silent?: boolean;
24
+ }): void;
23
25
  //# sourceMappingURL=migration.d.ts.map
@@ -4,7 +4,7 @@
4
4
  * One-time migration logic for existing projects when profile system is introduced.
5
5
  * Called by both init and update commands before profile resolution.
6
6
  */
7
- import { getGlobalConfig, getGlobalConfigPath, saveGlobalConfig } from './global-config.js';
7
+ import { getGlobalConfig, readGlobalConfigRaw, saveGlobalConfig } from './global-config.js';
8
8
  import { CommandAdapterRegistry } from './command-generation/index.js';
9
9
  import { WORKFLOW_TO_SKILL_DIR } from './profile-sync-drift.js';
10
10
  import { ALL_WORKFLOWS } from './profiles.js';
@@ -71,15 +71,12 @@ function inferDelivery(artifacts) {
71
71
  * - If no profile field exists and no workflows are installed: no-op (defaults apply).
72
72
  * - If profile field already exists: no-op.
73
73
  */
74
- export function migrateIfNeeded(projectPath, tools) {
74
+ export function migrateIfNeeded(projectPath, tools, options = {}) {
75
75
  const config = getGlobalConfig();
76
76
  // Check raw config file for profile field presence
77
- const configPath = getGlobalConfigPath();
78
77
  let rawConfig = {};
79
78
  try {
80
- if (fs.existsSync(configPath)) {
81
- rawConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
82
- }
79
+ rawConfig = readGlobalConfigRaw();
83
80
  }
84
81
  catch {
85
82
  return; // Can't read config, skip migration
@@ -102,7 +99,9 @@ export function migrateIfNeeded(projectPath, tools) {
102
99
  config.delivery = inferDelivery(artifacts);
103
100
  }
104
101
  saveGlobalConfig(config);
105
- console.log(`Migrated: custom profile with ${installedWorkflows.length} workflows`);
106
- console.log("New in this version: /opsx:propose. Try 'openspec config profile core' for the streamlined experience.");
102
+ if (!options.silent) {
103
+ console.log(`Migrated: custom profile with ${installedWorkflows.length} workflows`);
104
+ console.log("New in this version: /opsx:propose. Try 'codesdd config profile core' for the streamlined experience.");
105
+ }
107
106
  }
108
107
  //# sourceMappingURL=migration.js.map
@@ -31,7 +31,7 @@ export class ChangeParser extends MarkdownParser {
31
31
  deltas,
32
32
  metadata: {
33
33
  version: '1.0.0',
34
- format: 'openspec-change',
34
+ format: 'codesdd-change',
35
35
  },
36
36
  };
37
37
  }
@@ -26,7 +26,7 @@ export class MarkdownParser {
26
26
  requirements,
27
27
  metadata: {
28
28
  version: '1.0.0',
29
- format: 'openspec',
29
+ format: 'codesdd',
30
30
  },
31
31
  };
32
32
  }
@@ -48,7 +48,7 @@ export class MarkdownParser {
48
48
  deltas,
49
49
  metadata: {
50
50
  version: '1.0.0',
51
- format: 'openspec-change',
51
+ format: 'codesdd-change',
52
52
  },
53
53
  };
54
54
  }
@@ -6,7 +6,7 @@ type WorkflowId = (typeof ALL_WORKFLOWS)[number];
6
6
  */
7
7
  export declare const WORKFLOW_TO_SKILL_DIR: Record<WorkflowId, string>;
8
8
  /**
9
- * Checks whether a tool has at least one generated OpenSpec command file.
9
+ * Checks whether a tool has at least one generated CodeSDD command file.
10
10
  */
11
11
  export declare function toolHasAnyConfiguredCommand(projectPath: string, toolId: string): boolean;
12
12
  /**
@@ -8,24 +8,24 @@ import { COMMAND_IDS, getConfiguredTools } from './shared/index.js';
8
8
  * Maps workflow IDs to their skill directory names.
9
9
  */
10
10
  export const WORKFLOW_TO_SKILL_DIR = {
11
- 'explore': 'openspec-explore',
12
- 'new': 'openspec-new-change',
13
- 'continue': 'openspec-continue-change',
14
- 'apply': 'openspec-apply-change',
15
- 'ff': 'openspec-ff-change',
16
- 'sync': 'openspec-sync-specs',
17
- 'archive': 'openspec-archive-change',
18
- 'bulk-archive': 'openspec-bulk-archive-change',
19
- 'verify': 'openspec-verify-change',
20
- 'onboard': 'openspec-onboard',
21
- 'propose': 'openspec-propose',
22
- 'sdd': 'openspec-sdd',
11
+ 'explore': 'codesdd-explore',
12
+ 'new': 'codesdd-new-change',
13
+ 'continue': 'codesdd-continue-change',
14
+ 'apply': 'codesdd-apply-change',
15
+ 'ff': 'codesdd-ff-change',
16
+ 'sync': 'codesdd-sync-specs',
17
+ 'archive': 'codesdd-archive-change',
18
+ 'bulk-archive': 'codesdd-bulk-archive-change',
19
+ 'verify': 'codesdd-verify-change',
20
+ 'onboard': 'codesdd-onboard',
21
+ 'propose': 'codesdd-propose',
22
+ 'sdd': 'codesdd-sdd',
23
23
  };
24
24
  function toKnownWorkflows(workflows) {
25
25
  return workflows.filter((workflow) => ALL_WORKFLOWS.includes(workflow));
26
26
  }
27
27
  /**
28
- * Checks whether a tool has at least one generated OpenSpec command file.
28
+ * Checks whether a tool has at least one generated CodeSDD command file.
29
29
  */
30
30
  export function toolHasAnyConfiguredCommand(projectPath, toolId) {
31
31
  const adapter = CommandAdapterRegistry.get(toolId);
@@ -8,9 +8,9 @@ import { z } from 'zod';
8
8
  * 3. Runtime validation - uses safeParse() for resilient field-by-field validation
9
9
  *
10
10
  * Why Zod over manual validation:
11
- * - Helps understand OpenSpec's data interfaces at a glance
11
+ * - Helps understand CodeSDD's data interfaces at a glance
12
12
  * - Single source of truth for type and validation
13
- * - Consistent with other OpenSpec schemas
13
+ * - Consistent with other CodeSDD schemas
14
14
  */
15
15
  export declare const ProjectConfigSchema: z.ZodObject<{
16
16
  schema: z.ZodString;
@@ -19,7 +19,7 @@ export declare const ProjectConfigSchema: z.ZodObject<{
19
19
  }, z.core.$strip>;
20
20
  export type ProjectConfig = z.infer<typeof ProjectConfigSchema>;
21
21
  /**
22
- * Read and parse openspec/config.yaml from project root.
22
+ * Read and parse legacy-spec/config.yaml from project root.
23
23
  * Uses resilient parsing - validates each field independently using Zod safeParse.
24
24
  * Returns null if file doesn't exist.
25
25
  * Returns partial config if some fields are invalid (with warnings).
@@ -34,7 +34,7 @@ export type ProjectConfig = z.infer<typeof ProjectConfigSchema>;
34
34
  * invalidation logic) for negligible benefit. Direct reads also ensure config
35
35
  * changes are reflected immediately without stale cache issues.
36
36
  *
37
- * @param projectRoot - The root directory of the project (where `openspec/` lives)
37
+ * @param projectRoot - The root directory of the project (where `legacy-spec/` lives)
38
38
  * @returns Parsed config or null if file doesn't exist
39
39
  */
40
40
  export declare function readProjectConfig(projectRoot: string): ProjectConfig | null;