@devtrack-solution/codesdd 1.2.2 → 1.2.3

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 (345) hide show
  1. package/.sdd/skills/curated/api-clean-flask-langgraph/SKILL.md +17 -17
  2. package/.sdd/skills/curated/devtrack-api/SKILL.md +160 -28
  3. package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +1 -1
  4. package/.sdd/skills/curated/devtrack-api/references/architecture-governance.md +8 -7
  5. package/.sdd/skills/curated/devtrack-api/references/consumer-sync-policy.md +93 -0
  6. package/.sdd/skills/curated/devtrack-api/references/contract-pack.yaml +317 -0
  7. package/.sdd/skills/curated/devtrack-api/references/field-validation-protocol.md +95 -0
  8. package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +295 -0
  9. package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +4 -4
  10. package/.sdd/skills/curated/devtrack-api/references/imports-lint.md +4 -0
  11. package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +2 -2
  12. package/LICENSE +1 -1
  13. package/README.md +243 -51
  14. package/bin/codesdd.js +3 -2
  15. package/dist/cli/index.d.ts +2 -2
  16. package/dist/cli/index.js +11 -558
  17. package/dist/cli/program.d.ts +14 -0
  18. package/dist/cli/program.js +645 -0
  19. package/dist/commands/change.js +5 -5
  20. package/dist/commands/completion.d.ts +1 -1
  21. package/dist/commands/completion.js +9 -2
  22. package/dist/commands/config.js +159 -20
  23. package/dist/commands/feedback.js +1 -1
  24. package/dist/commands/schema.d.ts +63 -0
  25. package/dist/commands/schema.js +12 -12
  26. package/dist/commands/sdd/backlog.d.ts +3 -0
  27. package/dist/commands/sdd/backlog.js +54 -0
  28. package/dist/commands/sdd/execution.js +147 -16
  29. package/dist/commands/sdd/plugin.d.ts +3 -0
  30. package/dist/commands/sdd/plugin.js +153 -0
  31. package/dist/commands/sdd/shared.js +2 -23
  32. package/dist/commands/sdd/skills.js +7 -0
  33. package/dist/commands/sdd.js +69 -12
  34. package/dist/commands/spec.js +9 -9
  35. package/dist/commands/validate.js +6 -6
  36. package/dist/commands/workflow/instructions.js +6 -6
  37. package/dist/commands/workflow/new-change.js +3 -3
  38. package/dist/commands/workflow/shared.d.ts +1 -1
  39. package/dist/commands/workflow/shared.js +4 -4
  40. package/dist/core/archive.js +15 -5
  41. package/dist/core/artifact-graph/instruction-loader.d.ts +1 -1
  42. package/dist/core/artifact-graph/instruction-loader.js +3 -3
  43. package/dist/core/artifact-graph/resolver.d.ts +4 -4
  44. package/dist/core/artifact-graph/resolver.js +6 -6
  45. package/dist/core/branding.js +3 -3
  46. package/dist/core/cli/command-matrix.js +10 -1
  47. package/dist/core/cli-command-quality.d.ts +27 -0
  48. package/dist/core/cli-command-quality.js +171 -0
  49. package/dist/core/command-generation/adapters/costrict.d.ts +1 -1
  50. package/dist/core/command-generation/adapters/costrict.js +2 -2
  51. package/dist/core/command-generation/types.d.ts +1 -1
  52. package/dist/core/completions/command-registry.d.ts +1 -1
  53. package/dist/core/completions/command-registry.js +155 -12
  54. package/dist/core/completions/completion-provider.d.ts +14 -1
  55. package/dist/core/completions/completion-provider.js +29 -1
  56. package/dist/core/completions/generators/bash-generator.d.ts +1 -1
  57. package/dist/core/completions/generators/bash-generator.js +20 -12
  58. package/dist/core/completions/generators/fish-generator.d.ts +9 -1
  59. package/dist/core/completions/generators/fish-generator.js +39 -25
  60. package/dist/core/completions/generators/powershell-generator.d.ts +1 -1
  61. package/dist/core/completions/generators/powershell-generator.js +21 -11
  62. package/dist/core/completions/generators/zsh-generator.d.ts +3 -6
  63. package/dist/core/completions/generators/zsh-generator.js +21 -42
  64. package/dist/core/completions/installers/bash-installer.js +6 -6
  65. package/dist/core/completions/installers/fish-installer.js +1 -1
  66. package/dist/core/completions/installers/powershell-installer.js +14 -14
  67. package/dist/core/completions/installers/zsh-installer.d.ts +7 -1
  68. package/dist/core/completions/installers/zsh-installer.js +36 -8
  69. package/dist/core/completions/templates/bash-templates.d.ts +1 -1
  70. package/dist/core/completions/templates/bash-templates.js +12 -6
  71. package/dist/core/completions/templates/fish-templates.d.ts +2 -2
  72. package/dist/core/completions/templates/fish-templates.js +20 -9
  73. package/dist/core/completions/templates/powershell-templates.d.ts +1 -1
  74. package/dist/core/completions/templates/powershell-templates.js +13 -4
  75. package/dist/core/completions/templates/zsh-templates.d.ts +1 -1
  76. package/dist/core/completions/templates/zsh-templates.js +18 -9
  77. package/dist/core/config-schema.d.ts +3 -1
  78. package/dist/core/config-schema.js +26 -1
  79. package/dist/core/config.d.ts +3 -3
  80. package/dist/core/config.js +4 -4
  81. package/dist/core/global-config.d.ts +41 -12
  82. package/dist/core/global-config.js +344 -27
  83. package/dist/core/index.d.ts +1 -1
  84. package/dist/core/index.js +2 -2
  85. package/dist/core/init.d.ts +6 -1
  86. package/dist/core/init.js +99 -77
  87. package/dist/core/legacy-cleanup.d.ts +17 -17
  88. package/dist/core/legacy-cleanup.js +96 -79
  89. package/dist/core/list.js +18 -4
  90. package/dist/core/migration.d.ts +3 -1
  91. package/dist/core/migration.js +7 -8
  92. package/dist/core/parsers/change-parser.js +1 -1
  93. package/dist/core/parsers/markdown-parser.js +2 -2
  94. package/dist/core/profile-sync-drift.d.ts +1 -1
  95. package/dist/core/profile-sync-drift.js +13 -13
  96. package/dist/core/project-config.d.ts +4 -4
  97. package/dist/core/project-config.js +11 -11
  98. package/dist/core/schemas/change.schema.d.ts +1 -1
  99. package/dist/core/schemas/change.schema.js +1 -1
  100. package/dist/core/schemas/spec.schema.d.ts +1 -1
  101. package/dist/core/schemas/spec.schema.js +1 -1
  102. package/dist/core/sdd/adr.js +23 -1
  103. package/dist/core/sdd/agent-binding.d.ts +346 -0
  104. package/dist/core/sdd/agent-binding.js +343 -0
  105. package/dist/core/sdd/backlog-cli.d.ts +16 -0
  106. package/dist/core/sdd/backlog-cli.js +146 -0
  107. package/dist/core/sdd/backlog-conflict-policy.d.ts +58 -0
  108. package/dist/core/sdd/backlog-conflict-policy.js +230 -0
  109. package/dist/core/sdd/backlog-projection.d.ts +8 -0
  110. package/dist/core/sdd/backlog-projection.js +89 -0
  111. package/dist/core/sdd/backlog-provider-contract.d.ts +252 -0
  112. package/dist/core/sdd/backlog-provider-contract.js +158 -0
  113. package/dist/core/sdd/bootstrap.js +2 -2
  114. package/dist/core/sdd/check.d.ts +42 -0
  115. package/dist/core/sdd/check.js +22 -22
  116. package/dist/core/sdd/contract.d.ts +13 -0
  117. package/dist/core/sdd/contract.js +36 -0
  118. package/dist/core/sdd/coordination/coordination-adapters.d.ts +38 -0
  119. package/dist/core/sdd/coordination/coordination-adapters.js +139 -1
  120. package/dist/core/sdd/deepagent-contracts.d.ts +276 -0
  121. package/dist/core/sdd/deepagent-contracts.js +173 -0
  122. package/dist/core/sdd/deepagents/adr-governor.d.ts +2 -0
  123. package/dist/core/sdd/deepagents/adr-governor.js +30 -0
  124. package/dist/core/sdd/deepagents/backend.d.ts +63 -0
  125. package/dist/core/sdd/deepagents/backend.js +174 -0
  126. package/dist/core/sdd/deepagents/codesdd-tools.d.ts +39 -0
  127. package/dist/core/sdd/deepagents/codesdd-tools.js +83 -0
  128. package/dist/core/sdd/deepagents/evidence-mapper.d.ts +86 -0
  129. package/dist/core/sdd/deepagents/evidence-mapper.js +178 -0
  130. package/dist/core/sdd/deepagents/model-provider.d.ts +53 -0
  131. package/dist/core/sdd/deepagents/model-provider.js +379 -0
  132. package/dist/core/sdd/deepagents/policy-enforcement.d.ts +30 -0
  133. package/dist/core/sdd/deepagents/policy-enforcement.js +90 -0
  134. package/dist/core/sdd/deepagents/policy.d.ts +75 -0
  135. package/dist/core/sdd/deepagents/policy.js +358 -0
  136. package/dist/core/sdd/deepagents/quality-witness.d.ts +3 -0
  137. package/dist/core/sdd/deepagents/quality-witness.js +77 -0
  138. package/dist/core/sdd/deepagents/reversa-subagents.d.ts +75 -0
  139. package/dist/core/sdd/deepagents/reversa-subagents.js +182 -0
  140. package/dist/core/sdd/deepagents/runtime-factory.d.ts +90 -0
  141. package/dist/core/sdd/deepagents/runtime-factory.js +231 -0
  142. package/dist/core/sdd/deepagents/runtime-loader.d.ts +16 -0
  143. package/dist/core/sdd/deepagents/runtime-loader.js +65 -0
  144. package/dist/core/sdd/default-bootstrap-files.d.ts +2 -2
  145. package/dist/core/sdd/default-bootstrap-files.js +36 -2
  146. package/dist/core/sdd/default-skills.d.ts +30 -0
  147. package/dist/core/sdd/default-skills.js +181 -5
  148. package/dist/core/sdd/devtrack-api-appliance.d.ts +84 -0
  149. package/dist/core/sdd/devtrack-api-appliance.js +257 -0
  150. package/dist/core/sdd/devtrack-api-architecture.d.ts +31 -0
  151. package/dist/core/sdd/devtrack-api-architecture.js +608 -0
  152. package/dist/core/sdd/devtrack-api-import-boundary.d.ts +19 -0
  153. package/dist/core/sdd/devtrack-api-import-boundary.js +32 -0
  154. package/dist/core/sdd/diagnose.d.ts +59 -0
  155. package/dist/core/sdd/diagnose.js +37 -37
  156. package/dist/core/sdd/docs-sync.js +33 -5
  157. package/dist/core/sdd/domain/post-active-validation.d.ts +7 -0
  158. package/dist/core/sdd/domain/post-active-validation.js +61 -0
  159. package/dist/core/sdd/domain/transition-engine.js +1 -0
  160. package/dist/core/sdd/entity-reference.d.ts +5 -0
  161. package/dist/core/sdd/entity-reference.js +22 -0
  162. package/dist/core/sdd/governance-backfill.d.ts +31 -0
  163. package/dist/core/sdd/governance-backfill.js +359 -0
  164. package/dist/core/sdd/governance-parser.d.ts +21 -0
  165. package/dist/core/sdd/governance-parser.js +91 -0
  166. package/dist/core/sdd/governance-schemas.d.ts +245 -0
  167. package/dist/core/sdd/governance-schemas.js +143 -0
  168. package/dist/core/sdd/{import-openspec.d.ts → import-legacy-spec.d.ts} +7 -7
  169. package/dist/core/sdd/{import-openspec.js → import-legacy-spec.js} +21 -29
  170. package/dist/core/sdd/init.d.ts +3 -0
  171. package/dist/core/sdd/init.js +6 -3
  172. package/dist/core/sdd/json-schema.js +100 -6
  173. package/dist/core/sdd/knowledge-graph.d.ts +45 -0
  174. package/dist/core/sdd/knowledge-graph.js +288 -0
  175. package/dist/core/sdd/legacy-operations.js +431 -43
  176. package/dist/core/sdd/lenses.d.ts +1 -0
  177. package/dist/core/sdd/lenses.js +29 -1
  178. package/dist/core/sdd/migrate-workspace.js +56 -2
  179. package/dist/core/sdd/migrate.d.ts +1 -1
  180. package/dist/core/sdd/migrate.js +36 -2
  181. package/dist/core/sdd/package-structure-gate.d.ts +83 -0
  182. package/dist/core/sdd/package-structure-gate.js +362 -0
  183. package/dist/core/sdd/parallel-feat-automation.d.ts +152 -0
  184. package/dist/core/sdd/parallel-feat-automation.js +212 -0
  185. package/dist/core/sdd/plugin-broker.d.ts +558 -0
  186. package/dist/core/sdd/plugin-broker.js +482 -0
  187. package/dist/core/sdd/plugin-certification.d.ts +79 -0
  188. package/dist/core/sdd/plugin-certification.js +453 -0
  189. package/dist/core/sdd/plugin-cli.d.ts +109 -0
  190. package/dist/core/sdd/plugin-cli.js +198 -0
  191. package/dist/core/sdd/plugin-evidence.d.ts +275 -0
  192. package/dist/core/sdd/plugin-evidence.js +307 -0
  193. package/dist/core/sdd/plugin-manifest.d.ts +164 -0
  194. package/dist/core/sdd/plugin-manifest.js +215 -0
  195. package/dist/core/sdd/plugin-policy-pack.d.ts +88 -0
  196. package/dist/core/sdd/plugin-policy-pack.js +236 -0
  197. package/dist/core/sdd/plugin-policy.d.ts +68 -0
  198. package/dist/core/sdd/plugin-policy.js +212 -0
  199. package/dist/core/sdd/plugin-registry.d.ts +311 -0
  200. package/dist/core/sdd/plugin-registry.js +138 -0
  201. package/dist/core/sdd/plugin-skill-binding.d.ts +151 -0
  202. package/dist/core/sdd/plugin-skill-binding.js +339 -0
  203. package/dist/core/sdd/quality-artifact-manifest-validator.d.ts +28 -0
  204. package/dist/core/sdd/quality-artifact-manifest-validator.js +167 -0
  205. package/dist/core/sdd/quality-evidence-renderer.d.ts +65 -0
  206. package/dist/core/sdd/quality-evidence-renderer.js +218 -0
  207. package/dist/core/sdd/quality-scenario-runner.d.ts +42 -0
  208. package/dist/core/sdd/quality-scenario-runner.js +613 -0
  209. package/dist/core/sdd/quality-validation.d.ts +547 -0
  210. package/dist/core/sdd/quality-validation.js +239 -0
  211. package/dist/core/sdd/resolve-project-root.d.ts +2 -2
  212. package/dist/core/sdd/resolve-project-root.js +11 -5
  213. package/dist/core/sdd/sanitize.d.ts +30 -1
  214. package/dist/core/sdd/sanitize.js +23 -23
  215. package/dist/core/sdd/services/agent-run.service.d.ts +65 -0
  216. package/dist/core/sdd/services/agent-run.service.js +189 -0
  217. package/dist/core/sdd/services/breakdown.service.js +2 -1
  218. package/dist/core/sdd/services/context.service.js +18 -16
  219. package/dist/core/sdd/services/debate.service.js +15 -2
  220. package/dist/core/sdd/services/feature-lint.service.d.ts +22 -0
  221. package/dist/core/sdd/services/feature-lint.service.js +105 -5
  222. package/dist/core/sdd/services/finalize.service.d.ts +80 -0
  223. package/dist/core/sdd/services/finalize.service.js +323 -24
  224. package/dist/core/sdd/services/frontend-gap.service.js +22 -7
  225. package/dist/core/sdd/services/governance-control-plane-runtime-adapters.d.ts +17 -0
  226. package/dist/core/sdd/services/governance-control-plane-runtime-adapters.js +38 -0
  227. package/dist/core/sdd/services/governance-control-plane.service.d.ts +66 -0
  228. package/dist/core/sdd/services/governance-control-plane.service.js +134 -0
  229. package/dist/core/sdd/services/ingest-deposito.service.js +1 -1
  230. package/dist/core/sdd/services/legacy-capability.service.d.ts +10 -7
  231. package/dist/core/sdd/services/legacy-capability.service.js +38 -21
  232. package/dist/core/sdd/services/mcp-runtime.service.d.ts +123 -8
  233. package/dist/core/sdd/services/mcp-runtime.service.js +1085 -33
  234. package/dist/core/sdd/services/onboard.service.js +2 -1
  235. package/dist/core/sdd/services/rebuild.service.js +6 -1
  236. package/dist/core/sdd/services/skills-sync.service.d.ts +17 -5
  237. package/dist/core/sdd/services/skills-sync.service.js +55 -2
  238. package/dist/core/sdd/services/start.service.js +6 -4
  239. package/dist/core/sdd/skill-bundles-curation-schema.d.ts +66 -0
  240. package/dist/core/sdd/skill-bundles-curation-schema.js +52 -0
  241. package/dist/core/sdd/skill-evidence.d.ts +19 -0
  242. package/dist/core/sdd/skill-evidence.js +38 -0
  243. package/dist/core/sdd/skill-policy-pool.d.ts +46 -0
  244. package/dist/core/sdd/skill-policy-pool.js +185 -0
  245. package/dist/core/sdd/state.d.ts +22 -0
  246. package/dist/core/sdd/state.js +66 -41
  247. package/dist/core/sdd/structural-health.d.ts +42 -42
  248. package/dist/core/sdd/types.d.ts +33 -7
  249. package/dist/core/sdd/types.js +17 -0
  250. package/dist/core/sdd/upgrade-to-codesdd.d.ts +45 -0
  251. package/dist/core/sdd/upgrade-to-codesdd.js +179 -0
  252. package/dist/core/sdd/workspace-schemas.d.ts +285 -14
  253. package/dist/core/sdd/workspace-schemas.js +148 -0
  254. package/dist/core/sdd/write-manifest.js +22 -4
  255. package/dist/core/shared/skill-generation.d.ts +1 -1
  256. package/dist/core/shared/skill-generation.js +15 -15
  257. package/dist/core/shared/tool-detection.d.ts +3 -3
  258. package/dist/core/shared/tool-detection.js +14 -14
  259. package/dist/core/specs-apply.js +6 -6
  260. package/dist/core/templates/index.d.ts +1 -1
  261. package/dist/core/templates/index.js +1 -1
  262. package/dist/core/templates/workflows/apply-change.js +14 -14
  263. package/dist/core/templates/workflows/archive-change.js +32 -32
  264. package/dist/core/templates/workflows/bulk-archive-change.js +25 -25
  265. package/dist/core/templates/workflows/continue-change.js +12 -12
  266. package/dist/core/templates/workflows/explore.js +29 -29
  267. package/dist/core/templates/workflows/feedback.js +6 -6
  268. package/dist/core/templates/workflows/ff-change.js +24 -24
  269. package/dist/core/templates/workflows/new-change.js +20 -20
  270. package/dist/core/templates/workflows/onboard.js +33 -33
  271. package/dist/core/templates/workflows/propose.js +23 -23
  272. package/dist/core/templates/workflows/sdd.js +8 -8
  273. package/dist/core/templates/workflows/sync-specs.js +19 -19
  274. package/dist/core/templates/workflows/verify-change.js +17 -17
  275. package/dist/core/update.d.ts +2 -2
  276. package/dist/core/update.js +16 -15
  277. package/dist/core/validation/constants.d.ts +1 -1
  278. package/dist/core/validation/constants.js +1 -1
  279. package/dist/core/view.js +11 -11
  280. package/dist/telemetry/config.d.ts +2 -1
  281. package/dist/telemetry/config.js +17 -8
  282. package/dist/telemetry/index.d.ts +10 -2
  283. package/dist/telemetry/index.js +40 -7
  284. package/dist/ui/ascii-patterns.d.ts +2 -2
  285. package/dist/ui/ascii-patterns.js +2 -2
  286. package/dist/ui/welcome-screen.js +2 -2
  287. package/dist/utils/change-metadata.d.ts +4 -4
  288. package/dist/utils/change-metadata.js +6 -6
  289. package/dist/utils/change-utils.d.ts +3 -3
  290. package/dist/utils/change-utils.js +5 -5
  291. package/dist/utils/file-system.js +1 -1
  292. package/dist/utils/interactive.js +1 -1
  293. package/dist/utils/item-discovery.js +4 -4
  294. package/dist/utils/legacy-spec-compat.d.ts +2 -0
  295. package/dist/utils/legacy-spec-compat.js +2 -0
  296. package/dist/utils/shell-detection.d.ts +1 -0
  297. package/dist/utils/shell-detection.js +16 -0
  298. package/package.json +27 -17
  299. package/schemas/sdd/1-spec.schema.json +1 -1
  300. package/schemas/sdd/2-plan.schema.json +73 -1
  301. package/schemas/sdd/3-tasks.schema.json +73 -1
  302. package/schemas/sdd/4-changelog.schema.json +1 -1
  303. package/schemas/sdd/5-quality.schema.json +442 -2
  304. package/schemas/sdd/adr.schema.json +148 -0
  305. package/schemas/sdd/agent-binding-adapter.schema.json +210 -0
  306. package/schemas/sdd/agent-binding-resolution.schema.json +338 -0
  307. package/schemas/sdd/backlog-projection-plan.schema.json +180 -0
  308. package/schemas/sdd/backlog-provider-contract.schema.json +260 -0
  309. package/schemas/sdd/codesdd-plugin.schema.json +474 -0
  310. package/schemas/sdd/debate.schema.json +244 -0
  311. package/schemas/sdd/deepagent-decision-evidence.schema.json +58 -0
  312. package/schemas/sdd/deepagent-env-contract.schema.json +143 -0
  313. package/schemas/sdd/deepagent-quality-evidence.schema.json +108 -0
  314. package/schemas/sdd/deepagent-run-evidence.schema.json +192 -0
  315. package/schemas/sdd/deepagent-run-plan.schema.json +197 -0
  316. package/schemas/sdd/deepagent-run-request.schema.json +321 -0
  317. package/schemas/sdd/deepagent-subagent-evidence.schema.json +110 -0
  318. package/schemas/sdd/deepagent-tool-call-evidence.schema.json +78 -0
  319. package/schemas/sdd/discarded.schema.json +127 -0
  320. package/schemas/sdd/epic.schema.json +147 -0
  321. package/schemas/sdd/insight.schema.json +136 -0
  322. package/schemas/sdd/parallel-feat-automation-plan.schema.json +215 -0
  323. package/schemas/sdd/parallel-feat-automation-request.schema.json +109 -0
  324. package/schemas/sdd/plugin-artifact-manifest.schema.json +150 -0
  325. package/schemas/sdd/plugin-compliance-index.schema.json +136 -0
  326. package/schemas/sdd/plugin-dry-run-plan.schema.json +260 -0
  327. package/schemas/sdd/plugin-evidence-manifest.schema.json +569 -0
  328. package/schemas/sdd/plugin-policy-evaluation.schema.json +92 -0
  329. package/schemas/sdd/plugin-policy-pack-evaluation.schema.json +94 -0
  330. package/schemas/sdd/plugin-policy-pack.schema.json +196 -0
  331. package/schemas/sdd/plugin-registry.schema.json +558 -0
  332. package/schemas/sdd/plugin-rollback-manifest.schema.json +87 -0
  333. package/schemas/sdd/plugin-runtime-invocation-plan.schema.json +845 -0
  334. package/schemas/sdd/plugin-skill-binding-resolution.schema.json +305 -0
  335. package/schemas/sdd/plugin-skill-binding.schema.json +88 -0
  336. package/schemas/sdd/plugin-validation-manifest.schema.json +123 -0
  337. package/schemas/sdd/quality-architecture-schema.schema.json +216 -0
  338. package/schemas/sdd/quality-evidence-bundle.schema.json +1228 -0
  339. package/schemas/sdd/quality-run.schema.json +197 -0
  340. package/schemas/sdd/quality-scenario.schema.json +252 -0
  341. package/schemas/sdd/workspace-catalog.schema.json +9841 -22
  342. package/schemas/spec-driven/schema.yaml +4 -4
  343. package/schemas/spec-driven/templates/proposal.md +1 -1
  344. package/dist/utils/openspec-compat.d.ts +0 -2
  345. package/dist/utils/openspec-compat.js +0 -2
@@ -5,7 +5,7 @@ import { Validator } from '../core/validation/validator.js';
5
5
  import { isInteractive } from '../utils/interactive.js';
6
6
  import { getSpecIds } from '../utils/item-discovery.js';
7
7
  import { CLI_NAME } from '../core/branding.js';
8
- import { displayLegacyOpenSpecPath, resolveOpenSpecSubpath, } from '../core/sdd/services/legacy-capability.service.js';
8
+ import { displayLegacySpecPath, resolveLegacySpecSubpath, } from '../core/sdd/services/legacy-capability.service.js';
9
9
  const SPECS_DIR = 'specs';
10
10
  function parseSpecFromFile(specPath, specId) {
11
11
  const content = readFileSync(specPath, 'utf-8');
@@ -30,7 +30,7 @@ function filterSpec(spec, options) {
30
30
  text: req.text,
31
31
  scenarios: includeScenarios ? req.scenarios : [],
32
32
  }));
33
- const metadata = spec.metadata ?? { version: '1.0.0', format: 'openspec' };
33
+ const metadata = spec.metadata ?? { version: '1.0.0', format: 'codesdd' };
34
34
  return {
35
35
  name: spec.name,
36
36
  overview: spec.overview,
@@ -63,9 +63,9 @@ export class SpecCommand {
63
63
  throw new Error('Missing required argument <spec-id>');
64
64
  }
65
65
  }
66
- const specPath = resolveOpenSpecSubpath(process.cwd(), this.SPECS_DIR, specId, 'spec.md');
66
+ const specPath = resolveLegacySpecSubpath(process.cwd(), this.SPECS_DIR, specId, 'spec.md');
67
67
  if (!existsSync(specPath)) {
68
- throw new Error(`Spec '${specId}' not found at ${displayLegacyOpenSpecPath('specs', specId, 'spec.md')}`);
68
+ throw new Error(`Spec '${specId}' not found at ${displayLegacySpecPath('specs', specId, 'spec.md')}`);
69
69
  }
70
70
  if (options.json) {
71
71
  if (options.requirements && options.requirement) {
@@ -79,7 +79,7 @@ export class SpecCommand {
79
79
  overview: parsed.overview,
80
80
  requirementCount: filtered.requirements.length,
81
81
  requirements: filtered.requirements,
82
- metadata: parsed.metadata ?? { version: '1.0.0', format: 'openspec' },
82
+ metadata: parsed.metadata ?? { version: '1.0.0', format: 'codesdd' },
83
83
  };
84
84
  console.log(JSON.stringify(output, null, 2));
85
85
  return;
@@ -90,7 +90,7 @@ export class SpecCommand {
90
90
  export function registerSpecCommand(rootProgram) {
91
91
  const specCommand = rootProgram
92
92
  .command('spec')
93
- .description('Manage and view OpenSpec specifications');
93
+ .description('Manage and view specifications');
94
94
  // Deprecation notice for noun-based commands
95
95
  specCommand.hook('preAction', () => {
96
96
  console.error(`Warning: The "${CLI_NAME} spec ..." commands are deprecated. Prefer verb-first commands (e.g., "${CLI_NAME} show", "${CLI_NAME} validate --specs").`);
@@ -120,7 +120,7 @@ export function registerSpecCommand(rootProgram) {
120
120
  .option('--long', 'Show id and title with counts')
121
121
  .action((options) => {
122
122
  try {
123
- const specsDir = resolveOpenSpecSubpath(process.cwd(), SPECS_DIR);
123
+ const specsDir = resolveLegacySpecSubpath(process.cwd(), SPECS_DIR);
124
124
  if (!existsSync(specsDir)) {
125
125
  console.log('No items found');
126
126
  return;
@@ -194,9 +194,9 @@ export function registerSpecCommand(rootProgram) {
194
194
  throw new Error('Missing required argument <spec-id>');
195
195
  }
196
196
  }
197
- const specPath = resolveOpenSpecSubpath(process.cwd(), SPECS_DIR, specId, 'spec.md');
197
+ const specPath = resolveLegacySpecSubpath(process.cwd(), SPECS_DIR, specId, 'spec.md');
198
198
  if (!existsSync(specPath)) {
199
- throw new Error(`Spec '${specId}' not found at ${displayLegacyOpenSpecPath('specs', specId, 'spec.md')}`);
199
+ throw new Error(`Spec '${specId}' not found at ${displayLegacySpecPath('specs', specId, 'spec.md')}`);
200
200
  }
201
201
  const validator = new Validator(options.strict);
202
202
  const report = await validator.validateSpec(specPath);
@@ -4,7 +4,7 @@ import { isInteractive, resolveNoInteractive } from '../utils/interactive.js';
4
4
  import { getActiveChangeIds, getSpecIds } from '../utils/item-discovery.js';
5
5
  import { nearestMatches } from '../utils/match.js';
6
6
  import { CLI_NAME } from '../core/branding.js';
7
- import { resolveOpenSpecSubpath } from '../core/sdd/services/legacy-capability.service.js';
7
+ import { resolveLegacySpecSubpath } from '../core/sdd/services/legacy-capability.service.js';
8
8
  export class ValidateCommand {
9
9
  async execute(itemName, options = {}) {
10
10
  const interactive = isInteractive(options);
@@ -100,7 +100,7 @@ export class ValidateCommand {
100
100
  async validateByType(type, id, opts) {
101
101
  const validator = new Validator(opts.strict);
102
102
  if (type === 'change') {
103
- const changeDir = resolveOpenSpecSubpath(process.cwd(), 'changes', id);
103
+ const changeDir = resolveLegacySpecSubpath(process.cwd(), 'changes', id);
104
104
  const start = Date.now();
105
105
  const report = await validator.validateChangeDeltaSpecs(changeDir);
106
106
  const durationMs = Date.now() - start;
@@ -109,7 +109,7 @@ export class ValidateCommand {
109
109
  process.exitCode = report.valid ? 0 : 1;
110
110
  return;
111
111
  }
112
- const file = resolveOpenSpecSubpath(process.cwd(), 'specs', id, 'spec.md');
112
+ const file = resolveLegacySpecSubpath(process.cwd(), 'specs', id, 'spec.md');
113
113
  const start = Date.now();
114
114
  const report = await validator.validateSpec(file);
115
115
  const durationMs = Date.now() - start;
@@ -158,13 +158,13 @@ export class ValidateCommand {
158
158
  ]);
159
159
  const DEFAULT_CONCURRENCY = 6;
160
160
  const maxSuggestions = 5; // used by nearestMatches
161
- const concurrency = normalizeConcurrency(opts.concurrency) ?? normalizeConcurrency(process.env.OPENSPEC_CONCURRENCY) ?? DEFAULT_CONCURRENCY;
161
+ const concurrency = normalizeConcurrency(opts.concurrency) ?? normalizeConcurrency(process.env.CODESDD_CONCURRENCY) ?? DEFAULT_CONCURRENCY;
162
162
  const validator = new Validator(opts.strict);
163
163
  const queue = [];
164
164
  for (const id of changeIds) {
165
165
  queue.push(async () => {
166
166
  const start = Date.now();
167
- const changeDir = resolveOpenSpecSubpath(process.cwd(), 'changes', id);
167
+ const changeDir = resolveLegacySpecSubpath(process.cwd(), 'changes', id);
168
168
  const report = await validator.validateChangeDeltaSpecs(changeDir);
169
169
  const durationMs = Date.now() - start;
170
170
  return { id, type: 'change', valid: report.valid, issues: report.issues, durationMs };
@@ -173,7 +173,7 @@ export class ValidateCommand {
173
173
  for (const id of specIds) {
174
174
  queue.push(async () => {
175
175
  const start = Date.now();
176
- const file = resolveOpenSpecSubpath(process.cwd(), 'specs', id, 'spec.md');
176
+ const file = resolveLegacySpecSubpath(process.cwd(), 'specs', id, 'spec.md');
177
177
  const report = await validator.validateSpec(file);
178
178
  const durationMs = Date.now() - start;
179
179
  return { id, type: 'spec', valid: report.valid, issues: report.issues, durationMs };
@@ -8,7 +8,7 @@ import ora from 'ora';
8
8
  import path from 'path';
9
9
  import * as fs from 'fs';
10
10
  import { loadChangeContext, generateInstructions, resolveSchema, } from '../../core/artifact-graph/index.js';
11
- import { resolveOpenSpecSubpath } from '../../core/sdd/services/legacy-capability.service.js';
11
+ import { resolveLegacySpecSubpath } from '../../core/sdd/services/legacy-capability.service.js';
12
12
  import { validateChangeExists, validateSchemaExists, } from './shared.js';
13
13
  import { CLI_NAME } from '../../core/branding.js';
14
14
  // -----------------------------------------------------------------------------
@@ -228,7 +228,7 @@ function artifactOutputExists(changeDir, generates) {
228
228
  export async function generateApplyInstructions(projectRoot, changeName, schemaName) {
229
229
  // loadChangeContext will auto-detect schema from metadata if not provided
230
230
  const context = loadChangeContext(projectRoot, changeName, schemaName);
231
- const changeDir = resolveOpenSpecSubpath(projectRoot, 'changes', changeName);
231
+ const changeDir = resolveLegacySpecSubpath(projectRoot, 'changes', changeName);
232
232
  // Get the full schema to access the apply phase configuration
233
233
  const schema = resolveSchema(context.schemaName, projectRoot);
234
234
  const applyConfig = schema.apply;
@@ -272,19 +272,19 @@ export async function generateApplyInstructions(projectRoot, changeName, schemaN
272
272
  let instruction;
273
273
  if (missingArtifacts.length > 0) {
274
274
  state = 'blocked';
275
- instruction = `Cannot apply this change yet. Missing artifacts: ${missingArtifacts.join(', ')}.\nUse the openspec-continue-change skill or run ${CLI_NAME} instructions to create the missing artifacts first.`;
275
+ instruction = `Cannot apply this change yet. Missing artifacts: ${missingArtifacts.join(', ')}.\nUse the codesdd-continue-change skill or run ${CLI_NAME} instructions to create the missing artifacts first.`;
276
276
  }
277
277
  else if (tracksFile && !tracksFileExists) {
278
278
  // Tracking file configured but doesn't exist yet
279
279
  const tracksFilename = path.basename(tracksFile);
280
280
  state = 'blocked';
281
- instruction = `The ${tracksFilename} file is missing and must be created.\nUse openspec-continue-change or run ${CLI_NAME} instructions to generate the tracking file.`;
281
+ instruction = `The ${tracksFilename} file is missing and must be created.\nUse codesdd-continue-change or run ${CLI_NAME} instructions to generate the tracking file.`;
282
282
  }
283
283
  else if (tracksFile && tracksFileExists && total === 0) {
284
284
  // Tracking file exists but contains no tasks
285
285
  const tracksFilename = path.basename(tracksFile);
286
286
  state = 'blocked';
287
- instruction = `The ${tracksFilename} file exists but contains no tasks.\nAdd tasks to ${tracksFilename} or regenerate it with openspec-continue-change.`;
287
+ instruction = `The ${tracksFilename} file exists but contains no tasks.\nAdd tasks to ${tracksFilename} or regenerate it with codesdd-continue-change.`;
288
288
  }
289
289
  else if (tracksFile && remaining === 0 && total > 0) {
290
290
  state = 'all_done';
@@ -344,7 +344,7 @@ export function printApplyInstructionsText(instructions) {
344
344
  console.log('### ⚠️ Blocked');
345
345
  console.log();
346
346
  console.log(`Missing artifacts: ${missingArtifacts.join(', ')}`);
347
- console.log(`Use the openspec-continue-change skill or run ${CLI_NAME} instructions to create these first.`);
347
+ console.log(`Use the codesdd-continue-change skill or run ${CLI_NAME} instructions to create these first.`);
348
348
  console.log();
349
349
  }
350
350
  // Context files (dynamically from schema)
@@ -7,7 +7,7 @@ import ora from 'ora';
7
7
  import path from 'path';
8
8
  import { createChange, validateChangeName } from '../../utils/change-utils.js';
9
9
  import { validateSchemaExists } from './shared.js';
10
- import { OPENSPEC_DIR_NAME } from '../../core/config.js';
10
+ import { displayLegacySpecPath, resolveLegacySpecLiveSubpath } from '../../core/sdd/services/legacy-capability.service.js';
11
11
  // -----------------------------------------------------------------------------
12
12
  // Command Implementation
13
13
  // -----------------------------------------------------------------------------
@@ -31,11 +31,11 @@ export async function newChangeCommand(name, options) {
31
31
  // If description provided, create README.md with description
32
32
  if (options.description) {
33
33
  const { promises: fs } = await import('fs');
34
- const changeDir = path.join(projectRoot, OPENSPEC_DIR_NAME, 'changes', name);
34
+ const changeDir = resolveLegacySpecLiveSubpath(projectRoot, 'changes', name);
35
35
  const readmePath = path.join(changeDir, 'README.md');
36
36
  await fs.writeFile(readmePath, `# ${name}\n\n${options.description}\n`, 'utf-8');
37
37
  }
38
- spinner.succeed(`Created change '${name}' at ${OPENSPEC_DIR_NAME}/changes/${name}/ (schema: ${result.schema})`);
38
+ spinner.succeed(`Created change '${name}' at ${displayLegacySpecPath('changes', name)}/ (schema: ${result.schema})`);
39
39
  }
40
40
  catch (error) {
41
41
  spinner.fail(`Failed to create change '${name}'`);
@@ -38,7 +38,7 @@ export declare function getStatusColor(status: 'done' | 'ready' | 'blocked'): (t
38
38
  */
39
39
  export declare function getStatusIndicator(status: 'done' | 'ready' | 'blocked'): string;
40
40
  /**
41
- * Returns the list of available change directory names under openspec/changes/.
41
+ * Returns the list of available legacy change directory names under legacy-spec/changes/.
42
42
  * Excludes the archive directory and hidden directories.
43
43
  */
44
44
  export declare function getAvailableChanges(projectRoot: string): Promise<string[]>;
@@ -9,7 +9,7 @@ import * as fs from 'fs';
9
9
  import { getSchemaDir, listSchemas } from '../../core/artifact-graph/index.js';
10
10
  import { validateChangeName } from '../../utils/change-utils.js';
11
11
  import { CLI_NAME } from '../../core/branding.js';
12
- import { resolveOpenSpecSubpath } from '../../core/sdd/services/legacy-capability.service.js';
12
+ import { resolveLegacySpecSubpath } from '../../core/sdd/services/legacy-capability.service.js';
13
13
  // -----------------------------------------------------------------------------
14
14
  // Constants
15
15
  // -----------------------------------------------------------------------------
@@ -54,11 +54,11 @@ export function getStatusIndicator(status) {
54
54
  }
55
55
  }
56
56
  /**
57
- * Returns the list of available change directory names under openspec/changes/.
57
+ * Returns the list of available legacy change directory names under legacy-spec/changes/.
58
58
  * Excludes the archive directory and hidden directories.
59
59
  */
60
60
  export async function getAvailableChanges(projectRoot) {
61
- const changesPath = resolveOpenSpecSubpath(projectRoot, 'changes');
61
+ const changesPath = resolveLegacySpecSubpath(projectRoot, 'changes');
62
62
  try {
63
63
  const entries = await fs.promises.readdir(changesPath, { withFileTypes: true });
64
64
  return entries
@@ -89,7 +89,7 @@ export async function validateChangeExists(changeName, projectRoot) {
89
89
  throw new Error(`Invalid change name '${changeName}': ${nameValidation.error}`);
90
90
  }
91
91
  // Check directory existence directly
92
- const changePath = resolveOpenSpecSubpath(projectRoot, 'changes', changeName);
92
+ const changePath = resolveLegacySpecSubpath(projectRoot, 'changes', changeName);
93
93
  const exists = fs.existsSync(changePath) && fs.statSync(changePath).isDirectory();
94
94
  if (!exists) {
95
95
  const available = await getAvailableChanges(projectRoot);
@@ -10,7 +10,7 @@ import { computeRequirementHash, readMeta, captureFingerprintsForChange, writeMe
10
10
  import { extractRequirementsSection, normalizeRequirementName, parseDeltaSpec, } from './parsers/requirement-blocks.js';
11
11
  import { CLI_NAME } from './branding.js';
12
12
  import { trackFingerprintMismatch } from '../telemetry/index.js';
13
- import { resolveOpenSpecLiveSubpath } from './sdd/services/legacy-capability.service.js';
13
+ import { resolveLegacySpecLiveSubpath } from './sdd/services/legacy-capability.service.js';
14
14
  const execFileAsync = promisify(execFile);
15
15
  function buildRequirementKey(capability, name) {
16
16
  return `${capability}::${normalizeRequirementName(name)}`;
@@ -56,15 +56,25 @@ async function moveDirectory(src, dest) {
56
56
  export class ArchiveCommand {
57
57
  async execute(changeName, options = {}) {
58
58
  const targetPath = '.';
59
- const changesDir = resolveOpenSpecLiveSubpath(targetPath, 'changes');
59
+ const changesDir = resolveLegacySpecLiveSubpath(targetPath, 'changes');
60
60
  const archiveDir = path.join(changesDir, 'archive');
61
- const mainSpecsDir = resolveOpenSpecLiveSubpath(targetPath, 'specs');
61
+ const mainSpecsDir = resolveLegacySpecLiveSubpath(targetPath, 'specs');
62
62
  // Check if changes directory exists
63
63
  try {
64
64
  await fs.access(changesDir);
65
65
  }
66
66
  catch {
67
- throw new Error(`No OpenSpec changes directory found. Run '${CLI_NAME} init' first.`);
67
+ const sddStatePath = path.join(targetPath, '.sdd', 'state', 'backlog.yaml');
68
+ try {
69
+ await fs.access(sddStatePath);
70
+ throw new Error(`This repository uses SDD canonical state. The legacy '${CLI_NAME} archive' command does not apply here.\nUse '${CLI_NAME} sdd finalize --ref <FEAT-ID>' to consolidate a completed FEAT.`);
71
+ }
72
+ catch (err) {
73
+ if (err instanceof Error && err.message.startsWith('This repository uses SDD canonical state')) {
74
+ throw err;
75
+ }
76
+ throw new Error(`No CodeSDD changes directory found. Run '${CLI_NAME} init' first.`);
77
+ }
68
78
  }
69
79
  // Get change name interactively if not provided
70
80
  if (!changeName) {
@@ -336,7 +346,7 @@ export class ArchiveCommand {
336
346
  return new Date().toISOString().split('T')[0];
337
347
  }
338
348
  async validateFingerprintsAgainstLiveSpec(changeName, changeDir, specUpdates) {
339
- const mainSpecsDir = resolveOpenSpecLiveSubpath('.', 'specs');
349
+ const mainSpecsDir = resolveLegacySpecLiveSubpath('.', 'specs');
340
350
  let meta = await readMeta(changeDir);
341
351
  if (!meta) {
342
352
  meta = await captureFingerprintsForChange(changeDir, mainSpecsDir, {
@@ -109,7 +109,7 @@ export declare function loadTemplate(schemaName: string, templatePath: string, p
109
109
  *
110
110
  * Schema resolution order:
111
111
  * 1. Explicit schemaName parameter (if provided)
112
- * 2. Schema from .openspec.yaml metadata (if exists in change directory)
112
+ * 2. Schema from .sdd.yaml metadata (if exists in change directory)
113
113
  * 3. Default 'spec-driven'
114
114
  *
115
115
  * @param projectRoot - Project root directory
@@ -5,7 +5,7 @@ import { ArtifactGraph } from './graph.js';
5
5
  import { detectCompleted } from './state.js';
6
6
  import { resolveSchemaForChange } from '../../utils/change-metadata.js';
7
7
  import { readProjectConfig, validateConfigRules } from '../project-config.js';
8
- import { resolveOpenSpecSubpath } from '../sdd/services/legacy-capability.service.js';
8
+ import { resolveLegacySpecSubpath } from '../sdd/services/legacy-capability.service.js';
9
9
  // Session-level cache for validation warnings (avoid repeating same warnings)
10
10
  const shownWarnings = new Set();
11
11
  /**
@@ -50,7 +50,7 @@ export function loadTemplate(schemaName, templatePath, projectRoot) {
50
50
  *
51
51
  * Schema resolution order:
52
52
  * 1. Explicit schemaName parameter (if provided)
53
- * 2. Schema from .openspec.yaml metadata (if exists in change directory)
53
+ * 2. Schema from .sdd.yaml metadata (if exists in change directory)
54
54
  * 3. Default 'spec-driven'
55
55
  *
56
56
  * @param projectRoot - Project root directory
@@ -59,7 +59,7 @@ export function loadTemplate(schemaName, templatePath, projectRoot) {
59
59
  * @returns Change context with graph, completed set, and metadata
60
60
  */
61
61
  export function loadChangeContext(projectRoot, changeName, schemaName) {
62
- const changeDir = resolveOpenSpecSubpath(projectRoot, 'changes', changeName);
62
+ const changeDir = resolveLegacySpecSubpath(projectRoot, 'changes', changeName);
63
63
  // Resolve schema: explicit > metadata > default
64
64
  const resolvedSchemaName = resolveSchemaForChange(changeDir, schemaName);
65
65
  const schema = resolveSchema(resolvedSchemaName, projectRoot);
@@ -26,8 +26,8 @@ export declare function getProjectSchemasDir(projectRoot: string): string;
26
26
  * Resolves a schema name to its directory path.
27
27
  *
28
28
  * Resolution order (when projectRoot is provided):
29
- * 1. Project-local: <projectRoot>/openspec/schemas/<name>/schema.yaml
30
- * 2. User override: ${XDG_DATA_HOME}/openspec/schemas/<name>/schema.yaml
29
+ * 1. Project-local: <projectRoot>/legacy-spec/schemas/<name>/schema.yaml
30
+ * 2. User override: ${XDG_DATA_HOME}/legacy-spec/schemas/<name>/schema.yaml
31
31
  * 3. Package built-in: <package>/schemas/<name>/schema.yaml
32
32
  *
33
33
  * When projectRoot is not provided, only user override and package built-in are checked
@@ -42,8 +42,8 @@ export declare function getSchemaDir(name: string, projectRoot?: string): string
42
42
  * Resolves a schema name to a SchemaYaml object.
43
43
  *
44
44
  * Resolution order (when projectRoot is provided):
45
- * 1. Project-local: <projectRoot>/openspec/schemas/<name>/schema.yaml
46
- * 2. User override: ${XDG_DATA_HOME}/openspec/schemas/<name>/schema.yaml
45
+ * 1. Project-local: <projectRoot>/legacy-spec/schemas/<name>/schema.yaml
46
+ * 2. User override: ${XDG_DATA_HOME}/legacy-spec/schemas/<name>/schema.yaml
47
47
  * 3. Package built-in: <package>/schemas/<name>/schema.yaml
48
48
  *
49
49
  * When projectRoot is not provided, only user override and package built-in are checked
@@ -2,7 +2,7 @@ import * as fs from 'node:fs';
2
2
  import * as path from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { getGlobalDataDir } from '../global-config.js';
5
- import { resolveOpenSpecSubpath } from '../sdd/services/legacy-capability.service.js';
5
+ import { resolveLegacySpecSubpath } from '../sdd/services/legacy-capability.service.js';
6
6
  import { parseSchema, SchemaValidationError } from './schema.js';
7
7
  /**
8
8
  * Error thrown when loading a schema fails.
@@ -38,14 +38,14 @@ export function getUserSchemasDir() {
38
38
  * @returns The path to the project's schemas directory
39
39
  */
40
40
  export function getProjectSchemasDir(projectRoot) {
41
- return resolveOpenSpecSubpath(projectRoot, 'schemas');
41
+ return resolveLegacySpecSubpath(projectRoot, 'schemas');
42
42
  }
43
43
  /**
44
44
  * Resolves a schema name to its directory path.
45
45
  *
46
46
  * Resolution order (when projectRoot is provided):
47
- * 1. Project-local: <projectRoot>/openspec/schemas/<name>/schema.yaml
48
- * 2. User override: ${XDG_DATA_HOME}/openspec/schemas/<name>/schema.yaml
47
+ * 1. Project-local: <projectRoot>/legacy-spec/schemas/<name>/schema.yaml
48
+ * 2. User override: ${XDG_DATA_HOME}/legacy-spec/schemas/<name>/schema.yaml
49
49
  * 3. Package built-in: <package>/schemas/<name>/schema.yaml
50
50
  *
51
51
  * When projectRoot is not provided, only user override and package built-in are checked
@@ -82,8 +82,8 @@ export function getSchemaDir(name, projectRoot) {
82
82
  * Resolves a schema name to a SchemaYaml object.
83
83
  *
84
84
  * Resolution order (when projectRoot is provided):
85
- * 1. Project-local: <projectRoot>/openspec/schemas/<name>/schema.yaml
86
- * 2. User override: ${XDG_DATA_HOME}/openspec/schemas/<name>/schema.yaml
85
+ * 1. Project-local: <projectRoot>/legacy-spec/schemas/<name>/schema.yaml
86
+ * 2. User override: ${XDG_DATA_HOME}/legacy-spec/schemas/<name>/schema.yaml
87
87
  * 3. Package built-in: <package>/schemas/<name>/schema.yaml
88
88
  *
89
89
  * When projectRoot is not provided, only user override and package built-in are checked
@@ -6,7 +6,7 @@ export const CLI_NAME = envOrDefault('CODESDD_CLI_NAME', 'codesdd');
6
6
  export const CLI_PACKAGE_NAME = envOrDefault('CODESDD_CLI_PACKAGE_NAME', '@devtrack-solution/codesdd');
7
7
  export const CLI_ENTRYPOINT = envOrDefault('CODESDD_CLI_ENTRYPOINT', 'bin/codesdd.js');
8
8
  export const CLI_PRODUCT_NAME = envOrDefault('CODESDD_CLI_PRODUCT_NAME', 'CodeSDD');
9
- export const CLI_REPOSITORY_SLUG = envOrDefault('CODESDD_REPOSITORY_SLUG', 'devtrack-solution/opensdd-cli');
10
- export const CLI_REPOSITORY_URL = envOrDefault('CODESDD_REPOSITORY_URL', 'https://github.com/devtrack-solution/opensdd-cli');
11
- export const CLI_ISSUES_URL = envOrDefault('CODESDD_ISSUES_URL', 'https://github.com/devtrack-solution/opensdd-cli/issues');
9
+ export const CLI_REPOSITORY_SLUG = envOrDefault('CODESDD_REPOSITORY_SLUG', 'devtrack-solution/codesdd');
10
+ export const CLI_REPOSITORY_URL = envOrDefault('CODESDD_REPOSITORY_URL', 'https://github.com/devtrack-solution/codesdd');
11
+ export const CLI_ISSUES_URL = envOrDefault('CODESDD_ISSUES_URL', 'https://github.com/devtrack-solution/codesdd/issues');
12
12
  //# sourceMappingURL=branding.js.map
@@ -23,6 +23,7 @@ export function collectCliLeafCommands(command, prefix = []) {
23
23
  }
24
24
  export const CLI_COMMAND_MATRIX = [
25
25
  { commandPath: 'init', strategy: 'contract', rationale: 'Project bootstrap is deterministic and already decomposes into testable setup services.' },
26
+ { commandPath: 'reload', strategy: 'spawned-e2e', rationale: 'Reload reapplies base setup plus SDD bootstrap with the installed CLI version and needs real-bin smoke coverage.' },
26
27
  { commandPath: 'install', strategy: 'spawned-e2e', rationale: 'Full installation composes base bootstrap plus SDD initialization and should keep a spawned smoke path.' },
27
28
  { commandPath: 'experimental', strategy: 'exception', rationale: 'Deprecated compatibility alias inherits init behavior and only needs lightweight regression coverage.' },
28
29
  { commandPath: 'update', strategy: 'contract', rationale: 'Update flow is deterministic and validated through targeted service and CLI contract tests.' },
@@ -36,6 +37,8 @@ export const CLI_COMMAND_MATRIX = [
36
37
  { commandPath: 'spec:list', strategy: 'contract', rationale: 'Spec listing is read-only and easy to validate with direct CLI assertions.' },
37
38
  { commandPath: 'spec:validate', strategy: 'contract', rationale: 'Spec validation is a deterministic contract surface with fixture-driven expectations.' },
38
39
  { commandPath: 'config:path', strategy: 'contract', rationale: 'Config path output is deterministic and scriptable.' },
40
+ { commandPath: 'config:init', strategy: 'contract', rationale: 'Global runtime bootstrap is deterministic and should be covered with fixture-backed contract tests.' },
41
+ { commandPath: 'config:doctor', strategy: 'contract', rationale: 'Doctor emits deterministic readiness diagnostics for DeepAgents, cache, and Redis boundary.' },
39
42
  { commandPath: 'config:list', strategy: 'contract', rationale: 'Config listing is a stable read-only contract.' },
40
43
  { commandPath: 'config:get', strategy: 'contract', rationale: 'Config key retrieval is a stable scriptable surface.' },
41
44
  { commandPath: 'config:set', strategy: 'contract', rationale: 'Config writes can be asserted directly against temporary config fixtures.' },
@@ -57,6 +60,7 @@ export const CLI_COMMAND_MATRIX = [
57
60
  { commandPath: 'sdd:breakdown', strategy: 'spawned-e2e', rationale: 'Breakdown materializes executable FEAT workspaces and needs lifecycle smoke coverage.' },
58
61
  { commandPath: 'sdd:mcp-manifest', strategy: 'contract', rationale: 'Manifest rendering is deterministic and provider-profile driven.' },
59
62
  { commandPath: 'sdd:mcp-call', strategy: 'contract', rationale: 'The MCP bridge reuses canonical services and is best guarded with direct contract assertions.' },
63
+ { commandPath: 'sdd:agent:run', strategy: 'contract', rationale: 'DeepAgents run gating is a deterministic fail-closed policy contract with no direct state writes.' },
60
64
  { commandPath: 'sdd:start', strategy: 'spawned-e2e', rationale: 'Start transitions planned work into active execution and is a core lifecycle boundary.' },
61
65
  { commandPath: 'sdd:frontend-impact', strategy: 'spawned-e2e', rationale: 'Frontend impact is a required lifecycle declaration that should remain part of spawned finalize-path smoke.' },
62
66
  { commandPath: 'sdd:finalize', strategy: 'spawned-e2e', rationale: 'Finalize is the highest-risk lifecycle transition and must keep spawned smoke coverage.' },
@@ -65,14 +69,19 @@ export const CLI_COMMAND_MATRIX = [
65
69
  { commandPath: 'sdd:aprovar', strategy: 'contract', rationale: 'Approval transitions are deterministic and fit fixture-driven lifecycle assertions.' },
66
70
  { commandPath: 'sdd:next', strategy: 'contract', rationale: 'Next is ranking logic over canonical state and is naturally contract-testable.' },
67
71
  { commandPath: 'sdd:audit', strategy: 'contract', rationale: 'Audit is a deterministic report over canonical state.' },
72
+ { commandPath: 'sdd:plugin:inspect', strategy: 'contract', rationale: 'Plugin inspect is a read-only manifest parser surface.' },
73
+ { commandPath: 'sdd:plugin:plan', strategy: 'contract', rationale: 'Plugin plan builds a non-executing runtime envelope from a manifest fixture.' },
74
+ { commandPath: 'sdd:plugin:devtrack-api:scaffold-dry-run', strategy: 'contract', rationale: 'DevTrack API scaffold dry-run plans appliance artifacts without executing a generator.' },
75
+ { commandPath: 'sdd:backlog:project', strategy: 'contract', rationale: 'Backlog projection is a read-only dry-run plan over canonical SDD refs with no provider I/O.' },
68
76
  { commandPath: 'sdd:check', strategy: 'contract', rationale: 'Check is a deterministic health summary with strict output contracts.' },
69
77
  { commandPath: 'sdd:rebuild', strategy: 'spawned-e2e', rationale: 'Rebuild reconstructs canonical state from filesystem artifacts and needs real-bin recovery smoke coverage.' },
70
78
  { commandPath: 'sdd:metrics', strategy: 'spawned-e2e', rationale: 'Metrics aggregate transition-log lifecycle data and should keep real-bin smoke coverage for reporting windows.' },
71
79
  { commandPath: 'sdd:dedup', strategy: 'spawned-e2e', rationale: 'Dedup apply reconciles historical warning_links across canonical state and needs real-bin mutation smoke coverage.' },
72
80
  { commandPath: 'sdd:lint:feature', strategy: 'spawned-e2e', rationale: 'Feature lint evaluates workspace scope heuristics and should keep real-bin smoke coverage for strict/non-strict behavior.' },
73
81
  { commandPath: 'sdd:migrate', strategy: 'contract', rationale: 'Migration planning and reporting are deterministic over fixture state.' },
82
+ { commandPath: 'sdd:upgrade-to-codesdd', strategy: 'contract', rationale: 'Transactional upgrade readiness, apply manifest, and rollback behavior are deterministic over fixture SDD state.' },
74
83
  { commandPath: 'sdd:migrate-workspace', strategy: 'contract', rationale: 'Workspace migration is deterministic and already aligns with fixture-based validation.' },
75
- { commandPath: 'sdd:import-openspec', strategy: 'spawned-e2e', rationale: 'Legacy import crosses filesystem and generated-state boundaries, so a spawned smoke path is valuable.' },
84
+ { commandPath: 'sdd:import-legacy-spec', strategy: 'spawned-e2e', rationale: 'Legacy import crosses filesystem and generated-state boundaries, so a spawned smoke path is valuable.' },
76
85
  { commandPath: 'sdd:skills:bundles', strategy: 'contract', rationale: 'Bundle listing is a stable read-only catalog contract.' },
77
86
  { commandPath: 'sdd:skills:sync', strategy: 'contract', rationale: 'Skill sync can be asserted directly against temporary memory roots and tool targets.' },
78
87
  { commandPath: 'sdd:skills:suggest', strategy: 'contract', rationale: 'Suggestion ranking is deterministic over the catalog state.' },
@@ -0,0 +1,27 @@
1
+ export type CliCommandEvidenceMode = 'contract' | 'in_process' | 'spawned_e2e' | 'exception';
2
+ export interface CliCommandQualityException {
3
+ reason: string;
4
+ accepted_risk: string;
5
+ compensating_control: string;
6
+ review_deadline: string;
7
+ }
8
+ export interface CliCommandQualityEntry {
9
+ path: string;
10
+ evidence_mode: CliCommandEvidenceMode;
11
+ owner: string;
12
+ rationale: string;
13
+ validation_refs: string[];
14
+ interactive: boolean;
15
+ exception?: CliCommandQualityException;
16
+ }
17
+ export interface CliCommandQualityValidation {
18
+ missing: string[];
19
+ extra: string[];
20
+ duplicate_paths: string[];
21
+ invalid_entries: string[];
22
+ }
23
+ export declare const UNIVERSAL_SPAWNED_HELP_SMOKE_REF = "test/cli-e2e/all-commands-smoke.test.ts";
24
+ export declare const CLI_COMMAND_QUALITY_MATRIX: CliCommandQualityEntry[];
25
+ export declare function commandQualityMatrixByPath(matrix?: CliCommandQualityEntry[]): Map<string, CliCommandQualityEntry>;
26
+ export declare function validateCliCommandQualityMatrix(registeredLeafCommandPaths: string[], matrix?: CliCommandQualityEntry[]): CliCommandQualityValidation;
27
+ //# sourceMappingURL=cli-command-quality.d.ts.map