@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
@@ -0,0 +1,158 @@
1
+ import chalk from 'chalk';
2
+ import { inspectPluginManifestFromFile, planDevTrackApiScaffoldDryRunFromFile, planPluginInvocationFromFile, } from '../../core/sdd/plugin-cli.js';
3
+ import { parseCsvOption } from './shared.js';
4
+ export function registerPluginCommands(sddCmd) {
5
+ const pluginCmd = sddCmd.command('plugin').description('Inspect and plan enterprise plugin operations');
6
+ pluginCmd
7
+ .command('inspect <manifestPath>')
8
+ .description('Inspect a CodeSDD plugin manifest without executing it')
9
+ .option('--json', 'Return plugin manifest summary as JSON')
10
+ .action(async (manifestPath, options) => {
11
+ const result = await inspectPluginManifestFromFile(manifestPath);
12
+ if (options?.json) {
13
+ console.log(JSON.stringify(result, null, 2));
14
+ return;
15
+ }
16
+ printInspectResult(result);
17
+ });
18
+ pluginCmd
19
+ .command('plan <manifestPath>')
20
+ .description('Build a non-executing runtime invocation plan for a plugin capability')
21
+ .requiredOption('--feature <ref>', 'Feature reference that owns the operation, for example FEAT-0148')
22
+ .requiredOption('--capability <name>', 'Plugin capability to resolve, for example scaffold.project')
23
+ .option('--skill <ref>', 'Skill reference bound to the operation')
24
+ .option('--input <json>', 'JSON object passed as plugin capability input')
25
+ .option('--write-scope <list>', 'Comma-separated requested write scope')
26
+ .option('--apply', 'Plan an apply operation instead of dry-run')
27
+ .option('--rollback', 'Plan a rollback operation instead of dry-run')
28
+ .option('--approval <list>', 'Comma-separated approval grants: maintainer,security,architecture-board')
29
+ .option('--operation-id <id>', 'Stable operation id to use in the invocation envelope')
30
+ .option('--source-checksum <checksum>', 'Expected source checksum for policy evaluation')
31
+ .option('--planned-writes <list>', 'Comma-separated planned write paths for policy evaluation')
32
+ .option('--env <list>', 'Comma-separated requested environment variables')
33
+ .option('--network-domains <list>', 'Comma-separated requested network domains')
34
+ .option('--process-spawn', 'Declare that the operation requests process spawning')
35
+ .option('--project-root <path>', 'Project root used for standalone storage-boundary validation')
36
+ .option('--language <language>', 'Technology language constraint')
37
+ .option('--framework <framework>', 'Technology framework constraint')
38
+ .option('--json', 'Return invocation plan as JSON')
39
+ .action(async (manifestPath, options) => {
40
+ const result = await planPluginInvocationFromFile(manifestPath, {
41
+ feature_ref: options.feature,
42
+ capability: options.capability,
43
+ mode: resolvePlanMode(options),
44
+ skill_ref: options.skill,
45
+ inputs: parseJsonObjectOption(options.input),
46
+ requested_write_scope: parseCsvOption(options.writeScope),
47
+ approval_grants: parseCsvOption(options.approval),
48
+ operation_id: options.operationId,
49
+ source_checksum: options.sourceChecksum,
50
+ planned_writes: parseCsvOption(options.plannedWrites),
51
+ requested_env: parseCsvOption(options.env),
52
+ network_domains: parseCsvOption(options.networkDomains),
53
+ process_spawn_requested: options.processSpawn ?? false,
54
+ project_root: options.projectRoot,
55
+ technology: resolveTechnologyConstraint(options),
56
+ });
57
+ if (options.json) {
58
+ console.log(JSON.stringify(result, null, 2));
59
+ return;
60
+ }
61
+ printPlanResult(result);
62
+ });
63
+ const devtrackApiCmd = pluginCmd.command('devtrack-api').description('Plan DevTrack API appliance operations');
64
+ devtrackApiCmd
65
+ .command('scaffold-dry-run <manifestPath>')
66
+ .description('Build a deterministic DevTrack API scaffold dry-run plan without executing the appliance')
67
+ .requiredOption('--feature <ref>', 'Feature reference that owns the scaffold operation, for example FEAT-0152')
68
+ .requiredOption('--project <name>', 'Project display name to scaffold')
69
+ .option('--package <name>', 'Package name to use in the scaffold plan')
70
+ .option('--operation-id <id>', 'Stable operation id to use in the dry-run plan')
71
+ .option('--write-scope <list>', 'Comma-separated requested write scope')
72
+ .option('--json', 'Return scaffold dry-run plan as JSON')
73
+ .action(async (manifestPath, options) => {
74
+ const result = await planDevTrackApiScaffoldDryRunFromFile(manifestPath, {
75
+ feature_ref: options.feature,
76
+ project_name: options.project,
77
+ package_name: options.package,
78
+ operation_id: options.operationId,
79
+ requested_write_scope: parseCsvOption(options.writeScope),
80
+ });
81
+ if (options.json) {
82
+ console.log(JSON.stringify(result, null, 2));
83
+ return;
84
+ }
85
+ printDevTrackApiScaffoldDryRunResult(result);
86
+ });
87
+ }
88
+ function resolvePlanMode(options) {
89
+ if (options.apply && options.rollback) {
90
+ throw new Error('Use only one of --apply or --rollback.');
91
+ }
92
+ if (options.apply)
93
+ return 'apply';
94
+ if (options.rollback)
95
+ return 'rollback';
96
+ return 'dry-run';
97
+ }
98
+ function parseJsonObjectOption(value) {
99
+ if (!value)
100
+ return {};
101
+ const parsed = JSON.parse(value);
102
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
103
+ throw new Error('--input must be a JSON object.');
104
+ }
105
+ return parsed;
106
+ }
107
+ function resolveTechnologyConstraint(options) {
108
+ if (!options.language && !options.framework) {
109
+ return undefined;
110
+ }
111
+ return {
112
+ language: options.language,
113
+ framework: options.framework,
114
+ };
115
+ }
116
+ function printInspectResult(result) {
117
+ console.log(chalk.green(`Plugin: ${result.plugin_ref.id}@${result.plugin_ref.version}`));
118
+ console.log(`Manifest: ${result.manifest_path}`);
119
+ console.log(`Contract: ${result.contract_version}`);
120
+ console.log(`Technology: ${result.technology.language}${result.technology.framework ? `/${result.technology.framework}` : ''}`);
121
+ console.log(`Trust: ${result.governance.trust_tier}`);
122
+ console.log(`Capabilities: ${result.capabilities.map((capability) => capability.name).join(', ')}`);
123
+ }
124
+ function printPlanResult(result) {
125
+ const { plan } = result;
126
+ console.log(chalk.green(`Plugin plan: ${plan.status}`));
127
+ console.log(`Manifest: ${result.manifest_path}`);
128
+ console.log(`Policy: ${plan.policy?.decision ?? 'not-evaluated'}`);
129
+ console.log(`Standalone runner: ${result.workcell_runner.standalone.status}`);
130
+ console.log(`Package governance: ${result.workcell_runner.standalone.package_governance.status}`);
131
+ console.log(`Storage boundary: ${result.workcell_runner.standalone.storage_boundary.status}`);
132
+ if (plan.envelope) {
133
+ console.log(`Operation: ${plan.envelope.operation_id}`);
134
+ console.log(`Plugin: ${plan.envelope.plugin_ref.id}@${plan.envelope.plugin_ref.version}`);
135
+ console.log(`Capability: ${plan.envelope.capability}`);
136
+ console.log(`Mode: ${plan.envelope.mode}`);
137
+ console.log(`Write scope: ${plan.envelope.write_scope.join(', ') || 'none'}`);
138
+ }
139
+ if (plan.reasons.length > 0) {
140
+ console.log(`Reasons: ${plan.reasons.join(' | ')}`);
141
+ }
142
+ }
143
+ function printDevTrackApiScaffoldDryRunResult(result) {
144
+ const { plan } = result;
145
+ console.log(chalk.green(`DevTrack API scaffold dry-run: ${plan.status}`));
146
+ console.log(`Manifest: ${result.manifest_path}`);
147
+ console.log(`Project: ${plan.project_name}`);
148
+ console.log(`Package: ${plan.package_name}`);
149
+ if (plan.status === 'planned') {
150
+ console.log(`Operation: ${plan.operation_id}`);
151
+ console.log(`Artifacts: ${plan.artifacts.length}`);
152
+ console.log(`Policy: ${plan.runtime_plan.policy?.decision ?? 'not-evaluated'}`);
153
+ }
154
+ if (plan.issues.length > 0) {
155
+ console.log(`Issues: ${plan.issues.join(' | ')}`);
156
+ }
157
+ }
158
+ //# sourceMappingURL=plugin.js.map
@@ -2,6 +2,7 @@ import { type SddLanguage, type SddLayout } from '../../core/sdd/state.js';
2
2
  import type { FlowMode } from '../../core/sdd/types.js';
3
3
  export declare function parseCsvOption(value?: string): string[];
4
4
  export declare function resolveRoot(targetPath?: string): string;
5
+ export declare function resolveInitRoot(targetPath?: string): string;
5
6
  export declare function parseLangOption(value?: string): SddLanguage | undefined;
6
7
  export declare function parseLayoutOption(value?: string): SddLayout | undefined;
7
8
  export declare function parseFlowModeOption(value?: string): FlowMode | undefined;
@@ -1,11 +1,8 @@
1
1
  import { promises as fs } from 'node:fs';
2
2
  import path from 'node:path';
3
- import chalk from 'chalk';
4
3
  import { resolveProjectRoot } from '../../core/sdd/resolve-project-root.js';
5
4
  import { loadProjectSddConfig, resolveSddPaths, } from '../../core/sdd/state.js';
6
- import { assessSddMigration, SddMigrateCommand } from '../../core/sdd/migrate.js';
7
- import { withStateLock } from '../../core/sdd/state-lock.js';
8
- import { isInteractive } from '../../utils/interactive.js';
5
+ import { assessSddMigration } from '../../core/sdd/migrate.js';
9
6
  export function parseCsvOption(value) {
10
7
  if (!value)
11
8
  return [];
@@ -17,6 +14,15 @@ export function parseCsvOption(value) {
17
14
  export function resolveRoot(targetPath = '.') {
18
15
  return resolveProjectRoot(targetPath === '.' ? undefined : targetPath);
19
16
  }
17
+ export function resolveInitRoot(targetPath = '.') {
18
+ const absoluteTarget = path.resolve(targetPath);
19
+ const segments = absoluteTarget.split(path.sep);
20
+ const sddIndex = segments.lastIndexOf('.sdd');
21
+ if (sddIndex >= 0) {
22
+ return segments.slice(0, sddIndex).join(path.sep) || path.parse(absoluteTarget).root;
23
+ }
24
+ return absoluteTarget;
25
+ }
20
26
  export function parseLangOption(value) {
21
27
  if (!value)
22
28
  return undefined;
@@ -62,23 +68,6 @@ export async function ensureMandatorySddMigration(targetPath) {
62
68
  return;
63
69
  }
64
70
  const summary = assessment.reasons.join(' | ');
65
- if (isInteractive()) {
66
- const { confirm } = await import('@inquirer/prompts');
67
- const approved = await confirm({
68
- message: `Migracao SDD obrigatoria detectada. Deseja aplicar agora para continuar? ${summary}`,
69
- default: true,
70
- });
71
- if (!approved) {
72
- throw new Error('Operacao interrompida: aplique a migracao SDD mandatória com `openspec sdd migrate`.');
73
- }
74
- }
75
- const stateDir = path.dirname(paths.stateFiles.discoveryIndex);
76
- const result = await withStateLock(stateDir, async () => {
77
- const command = new SddMigrateCommand();
78
- return command.execute(resolved, { radToEpic: true });
79
- });
80
- for (const message of result.messages) {
81
- console.log(chalk.yellow(`[sdd:migrate] ${message}`));
82
- }
71
+ throw new Error(`Migracao SDD obrigatoria detectada: ${summary}. Execute \`codesdd sdd migrate --yes\` e reexecute o comando.`);
83
72
  }
84
73
  //# sourceMappingURL=shared.js.map
@@ -62,6 +62,13 @@ export function registerSkillsCommands(sddCmd) {
62
62
  console.log(chalk.green(`Skills sincronizadas: ${result.synced}`));
63
63
  console.log(`Skills locais (${localSkillsPath}): ${result.local_synced}`);
64
64
  console.log(`Ferramentas atualizadas: ${result.tools.length > 0 ? result.tools.join(', ') : 'nenhuma'}`);
65
+ if (result.alerts.length > 0) {
66
+ console.log(chalk.yellow(`Alertas de user-extension (nao bloqueante): ${result.alerts.length}`));
67
+ for (const alert of result.alerts) {
68
+ const expected = alert.expected_sha256 || '<missing>';
69
+ console.log(`- ${alert.skill_id}: ${alert.status} (expected=${expected}, observed=${alert.observed_sha256})`);
70
+ }
71
+ }
65
72
  });
66
73
  skillsCmd
67
74
  .command('suggest [path]')
@@ -5,8 +5,9 @@ import { SddInitCommand, SddInitContextCommand } from '../core/sdd/init.js';
5
5
  import { SddCheckCommand } from '../core/sdd/check.js';
6
6
  import { loadProjectSddConfig, resolveSddPaths, } from '../core/sdd/state.js';
7
7
  import { assessSddMigration, SddMigrateCommand } from '../core/sdd/migrate.js';
8
+ import { formatUpgradeToCodeSddReadiness, UpgradeToCodeSddCommand, } from '../core/sdd/upgrade-to-codesdd.js';
8
9
  import { MigrateWorkspaceCommand } from '../core/sdd/migrate-workspace.js';
9
- import { SddImportOpenSpecCommand } from '../core/sdd/import-openspec.js';
10
+ import { SddImportLegacySpecCommand } from '../core/sdd/import-legacy-spec.js';
10
11
  import { isInteractive } from '../utils/interactive.js';
11
12
  import { createSddStores } from "../core/sdd/store/sdd-stores.js";
12
13
  import { InsightService } from "../core/sdd/services/insight.service.js";
@@ -22,13 +23,50 @@ import { SddRebuildService, formatSddRebuildReport } from "../core/sdd/services/
22
23
  import { SddMetricsService, formatSddMetricsReport } from "../core/sdd/services/metrics.service.js";
23
24
  import { FeatureLintService, formatFeatureLintReport } from "../core/sdd/services/feature-lint.service.js";
24
25
  import { SddDedupApplyService, formatSddDedupApplyReport } from "../core/sdd/services/dedup-apply.service.js";
26
+ import { evaluateSddIntentGuard } from '../core/sdd/intent-guard.js';
25
27
  import { captureFingerprintsForChange, writeMeta } from '../core/sdd/fingerprint.js';
26
- import { ensureMandatorySddMigration, parseCsvOption, parseFlowModeOption, parseLangOption, parseLayoutOption, resolveRoot, } from './sdd/shared.js';
28
+ import { ensureMandatorySddMigration, parseCsvOption, parseFlowModeOption, parseLangOption, parseLayoutOption, resolveInitRoot, resolveRoot, } from './sdd/shared.js';
27
29
  import { registerExecutionCommands } from './sdd/execution.js';
30
+ import { registerPluginCommands } from './sdd/plugin.js';
28
31
  import { registerSkillsCommands } from './sdd/skills.js';
29
- import { displayLegacyOpenSpecPath, resolveOpenSpecSubpath, } from '../core/sdd/services/legacy-capability.service.js';
32
+ import { registerBacklogCommands } from './sdd/backlog.js';
33
+ import { displayLegacySpecPath, resolveLegacySpecSubpath, } from '../core/sdd/services/legacy-capability.service.js';
30
34
  export function registerSddCommand(program) {
31
35
  const sddCmd = program.command('sdd').description('SDD memory operations');
36
+ sddCmd
37
+ .command('intent-guard')
38
+ .description('Classifica uma solicitacao e informa quando o fluxo CodeSDD e obrigatorio')
39
+ .alias('guarda-intencao')
40
+ .requiredOption('--request <text>', 'Texto da solicitacao do usuario/agente')
41
+ .option('--feat <FEAT-ID>', 'FEAT ja selecionada para o contexto CodeSDD')
42
+ .option('--strict', 'Retorna exit code 2 quando a solicitacao exige CodeSDD e nenhuma FEAT foi informada')
43
+ .option('--json', 'Saida em JSON')
44
+ .action((options) => {
45
+ const result = evaluateSddIntentGuard({
46
+ request: options?.request ?? '',
47
+ featureRef: options?.feat,
48
+ });
49
+ if (options?.json) {
50
+ console.log(JSON.stringify(result, null, 2));
51
+ }
52
+ else {
53
+ console.log(`Classificacao: ${result.classification}`);
54
+ console.log(`Requer CodeSDD: ${result.requires_codesdd_planning ? 'sim' : 'nao'}`);
55
+ console.log(`Motivo: ${result.reason}`);
56
+ if (result.required_commands.length > 0) {
57
+ console.log('Comandos obrigatorios:');
58
+ for (const command of result.required_commands) {
59
+ console.log(`- ${command}`);
60
+ }
61
+ }
62
+ for (const warning of result.warnings) {
63
+ console.log(chalk.yellow(`Aviso: ${warning}`));
64
+ }
65
+ }
66
+ if (options?.strict && result.requires_codesdd_planning && !result.feature_ref) {
67
+ process.exitCode = 2;
68
+ }
69
+ });
32
70
  sddCmd
33
71
  .command('init [path]')
34
72
  .description('Initializes the .sdd structure and base state files')
@@ -38,7 +76,7 @@ export function registerSddCommand(program) {
38
76
  .option('--layout <layout>', 'Folder layout: en-US|legacy|pt-BR')
39
77
  .option('--no-render', 'Does not generate Markdown views after initialization')
40
78
  .action(async (targetPath = '.', options) => {
41
- const root = resolveRoot(targetPath);
79
+ const root = resolveInitRoot(targetPath);
42
80
  const __config = await loadProjectSddConfig(root);
43
81
  const __paths = resolveSddPaths(root, __config);
44
82
  const stores = createSddStores(__paths);
@@ -69,6 +107,9 @@ export function registerSddCommand(program) {
69
107
  .alias('iniciar-contexto')
70
108
  .option('--mode <mode>', 'Modo de escrita: merge|replace (padrao: merge)')
71
109
  .option('--no-deep', 'Desativa inspecao profunda de estrutura de repositorio')
110
+ .option('--frontend', 'Ativa arquivos e views de frontend durante o bootstrap')
111
+ .option('--lang <lang>', 'Idioma SDD: pt-BR|en-US')
112
+ .option('--layout <layout>', 'Layout de pastas: en-US|legacy|pt-BR')
72
113
  .option('--no-render', 'Nao gera views apos bootstrap de contexto')
73
114
  .option('--json', 'Saida em JSON')
74
115
  .action(async (targetPath = '.', options) => {
@@ -84,6 +125,9 @@ export function registerSddCommand(program) {
84
125
  mode: options?.mode,
85
126
  deep: options?.deep,
86
127
  render: options?.render,
128
+ frontendEnabled: options?.frontend,
129
+ language: parseLangOption(options?.lang),
130
+ layout: parseLayoutOption(options?.layout),
87
131
  });
88
132
  if (options?.json) {
89
133
  console.log(JSON.stringify(result, null, 2));
@@ -113,8 +157,8 @@ export function registerSddCommand(program) {
113
157
  if (!options?.backfill) {
114
158
  throw new Error('Use --backfill para executar esta operação.');
115
159
  }
116
- const changeRoot = resolveOpenSpecSubpath(root, 'changes');
117
- const mainSpecsDir = resolveOpenSpecSubpath(root, 'specs');
160
+ const changeRoot = resolveLegacySpecSubpath(root, 'changes');
161
+ const mainSpecsDir = resolveLegacySpecSubpath(root, 'specs');
118
162
  await fs.access(changeRoot);
119
163
  let changeIds;
120
164
  if (options?.ref) {
@@ -124,7 +168,7 @@ export function registerSddCommand(program) {
124
168
  const requestedChangeDir = path.join(changeRoot, options.ref);
125
169
  const stat = await fs.stat(requestedChangeDir);
126
170
  if (!stat.isDirectory()) {
127
- throw new Error(`Change '${options.ref}' nao encontrado em ${displayLegacyOpenSpecPath('changes')}`);
171
+ throw new Error(`Change '${options.ref}' nao encontrado em ${displayLegacySpecPath('changes')}`);
128
172
  }
129
173
  changeIds = [options.ref];
130
174
  }
@@ -341,6 +385,8 @@ export function registerSddCommand(program) {
341
385
  console.log(`Duplicatas puladas: ${result.skipped_duplicates.length}`);
342
386
  });
343
387
  registerExecutionCommands(sddCmd);
388
+ registerPluginCommands(sddCmd);
389
+ registerBacklogCommands(sddCmd);
344
390
  sddCmd
345
391
  .command('check [path]')
346
392
  .description('Valida arquivos de estado .sdd e opcionalmente gera views')
@@ -367,7 +413,7 @@ export function registerSddCommand(program) {
367
413
  console.log(`Registros de discovery: ${report.summary.discovery}`);
368
414
  console.log(`Itens de backlog: ${report.summary.backlog}`);
369
415
  console.log(`Itens de divida tecnica: ${report.summary.techDebt}`);
370
- console.log(`Itens na fila de finalize: ${report.summary.finalizeQueue}`);
416
+ console.log(`Registros de finalize: ${report.summary.finalizeQueue} (pendentes: ${report.summary.finalizeQueuePending}; concluidos: ${report.summary.finalizeQueueDone})`);
371
417
  console.log(`Frontend ativado: ${report.summary.frontendEnabled ? 'sim' : 'nao'}`);
372
418
  console.log(`Progresso global: ${report.summary.progress_global.percent}% (${report.summary.progress_global.done}/${report.summary.progress_global.total})`);
373
419
  console.log(`Prontas para paralelo: ${report.summary.ready_for_parallel}`);
@@ -545,6 +591,52 @@ export function registerSddCommand(program) {
545
591
  console.log(`- ${msg}`);
546
592
  }
547
593
  });
594
+ sddCmd
595
+ .command('upgrade-to-codesdd')
596
+ .description('Plans, applies, or rolls back a transactional upgrade to the CodeSDD SDD contract')
597
+ .option('--dry-run', 'Preview readiness and planned steps without writing files')
598
+ .option('--apply', 'Apply the transactional upgrade')
599
+ .option('--yes', 'Confirm transactional mutation')
600
+ .option('--rollback <transactionId>', 'Rollback a previous upgrade transaction id')
601
+ .option('--reason <reason>', 'Rollback reason used with --rollback')
602
+ .option('--json', 'JSON output')
603
+ .action(async (options) => {
604
+ const root = resolveRoot();
605
+ const command = new UpgradeToCodeSddCommand();
606
+ if (options?.rollback) {
607
+ if (options.apply || options.dryRun) {
608
+ throw new Error('Use --rollback without --apply or --dry-run.');
609
+ }
610
+ const result = await command.rollback(root, options.rollback, {
611
+ reason: options.reason,
612
+ });
613
+ if (options.json) {
614
+ console.log(JSON.stringify(result, null, 2));
615
+ return;
616
+ }
617
+ console.log(chalk.green(`Upgrade rollback completed: ${result.transaction_id}`));
618
+ console.log(`Manifest: ${result.manifest_path}`);
619
+ console.log(`Restored: ${result.restored_paths.join(', ') || '-'}`);
620
+ console.log(`Skipped: ${result.skipped_paths.join(', ') || '-'}`);
621
+ console.log(`Reason: ${result.reason}`);
622
+ return;
623
+ }
624
+ const result = await command.execute(root, {
625
+ dryRun: options?.dryRun || !options?.apply,
626
+ apply: options?.apply,
627
+ yes: options?.yes,
628
+ });
629
+ if (options?.json) {
630
+ console.log(JSON.stringify(result, null, 2));
631
+ return;
632
+ }
633
+ console.log(formatUpgradeToCodeSddReadiness(result.readiness));
634
+ if (result.mode === 'apply') {
635
+ console.log(chalk.green('Transactional upgrade applied.'));
636
+ console.log(`Transaction: ${result.manifest?.transaction_id}`);
637
+ console.log(`Manifest: ${result.manifest_path}`);
638
+ }
639
+ });
548
640
  sddCmd
549
641
  .command('migrate-workspace')
550
642
  .description('Migra workspaces SDD legados de Markdown para YAML validado')
@@ -586,11 +678,11 @@ export function registerSddCommand(program) {
586
678
  }
587
679
  });
588
680
  sddCmd
589
- .command('import-openspec [path]')
590
- .description('Imports legacy openspec/ state into .sdd sources and source-index')
591
- .alias('importar-openspec')
681
+ .command('import-legacy-spec [path]')
682
+ .description('Imports legacy legacy-spec/ state into .sdd sources and source-index')
683
+ .alias('importar-codesdd')
592
684
  .option('--dry-run', 'Preview import without writing files')
593
- .option('--remove', 'Remove openspec/ after successful import verification')
685
+ .option('--remove', 'Remove legacy-spec/ after successful import verification')
594
686
  .option('--yes', 'Confirm destructive removal when --remove is used')
595
687
  .option('--json', 'JSON output')
596
688
  .option('--no-render', 'Does not generate views after updating state')
@@ -600,7 +692,7 @@ export function registerSddCommand(program) {
600
692
  const __paths = resolveSddPaths(root, __config);
601
693
  const stores = createSddStores(__paths);
602
694
  await ensureMandatorySddMigration(root);
603
- const command = new SddImportOpenSpecCommand();
695
+ const command = new SddImportLegacySpecCommand();
604
696
  const result = await command.execute(root, {
605
697
  dryRun: options?.dryRun,
606
698
  remove: options?.remove,
@@ -611,7 +703,7 @@ export function registerSddCommand(program) {
611
703
  console.log(JSON.stringify(result, null, 2));
612
704
  return;
613
705
  }
614
- console.log(chalk.green('OpenSpec import completed.'));
706
+ console.log(chalk.green('Legacy spec import completed.'));
615
707
  console.log(`Source root: ${result.source_root}`);
616
708
  console.log(`Target root: ${result.target_root}`);
617
709
  console.log(`Report: ${result.report_path}`);
@@ -619,7 +711,7 @@ export function registerSddCommand(program) {
619
711
  console.log(`Files seen: ${result.files_seen}`);
620
712
  console.log(`Files copied: ${result.files_copied}`);
621
713
  console.log(`Sources indexed: ${result.sources_indexed}`);
622
- console.log(`Removed openspec/: ${result.removed_source_root ? 'yes' : 'no'}`);
714
+ console.log(`Removed legacy-spec/: ${result.removed_source_root ? 'yes' : 'no'}`);
623
715
  const categories = Object.entries(result.categories)
624
716
  .map(([name, count]) => `${name}=${count}`)
625
717
  .join(', ');
@@ -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)