@devtrack-solution/codesdd 1.2.2 → 1.2.4-rc3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/.sdd/skills/curated/api-clean-flask-langgraph/SKILL.md +17 -17
  2. package/.sdd/skills/curated/devtrack-api/SKILL.md +170 -31
  3. package/.sdd/skills/curated/devtrack-api/agents/claude-code.yaml +8 -0
  4. package/.sdd/skills/curated/devtrack-api/agents/codex.yaml +8 -0
  5. package/.sdd/skills/curated/devtrack-api/agents/cursor.yaml +8 -0
  6. package/.sdd/skills/curated/devtrack-api/agents/gemini.yaml +8 -0
  7. package/.sdd/skills/curated/devtrack-api/agents/kimi.yaml +8 -0
  8. package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +4 -2
  9. package/.sdd/skills/curated/devtrack-api/agents/opencode.yaml +10 -0
  10. package/.sdd/skills/curated/devtrack-api/references/application-presentation.md +2 -2
  11. package/.sdd/skills/curated/devtrack-api/references/architecture-governance.md +8 -7
  12. package/.sdd/skills/curated/devtrack-api/references/consumer-sync-policy.md +93 -0
  13. package/.sdd/skills/curated/devtrack-api/references/contract-pack.yaml +372 -0
  14. package/.sdd/skills/curated/devtrack-api/references/domain-modeling.md +13 -13
  15. package/.sdd/skills/curated/devtrack-api/references/field-validation-protocol.md +95 -0
  16. package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +294 -0
  17. package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +5 -5
  18. package/.sdd/skills/curated/devtrack-api/references/imports-lint.md +4 -0
  19. package/.sdd/skills/curated/devtrack-api/references/portable-agent-contract.md +41 -0
  20. package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +2 -2
  21. package/.sdd/skills/curated/devtrack-api/references/typeorm-infrastructure.md +7 -9
  22. package/LICENSE +1 -1
  23. package/README.md +399 -53
  24. package/bin/codesdd.js +3 -2
  25. package/dist/applications/sdd/index.d.ts +16 -0
  26. package/dist/applications/sdd/index.js +16 -0
  27. package/dist/cli/index.d.ts +2 -2
  28. package/dist/cli/index.js +11 -558
  29. package/dist/cli/program.d.ts +14 -0
  30. package/dist/cli/program.js +645 -0
  31. package/dist/commands/change.js +5 -5
  32. package/dist/commands/completion.d.ts +1 -1
  33. package/dist/commands/completion.js +9 -2
  34. package/dist/commands/config.js +320 -20
  35. package/dist/commands/feedback.js +1 -1
  36. package/dist/commands/schema.d.ts +63 -0
  37. package/dist/commands/schema.js +12 -12
  38. package/dist/commands/sdd/backlog.d.ts +3 -0
  39. package/dist/commands/sdd/backlog.js +54 -0
  40. package/dist/commands/sdd/execution.js +489 -28
  41. package/dist/commands/sdd/plugin.d.ts +3 -0
  42. package/dist/commands/sdd/plugin.js +158 -0
  43. package/dist/commands/sdd/shared.d.ts +1 -0
  44. package/dist/commands/sdd/shared.js +11 -22
  45. package/dist/commands/sdd/skills.js +7 -0
  46. package/dist/commands/sdd.js +107 -15
  47. package/dist/commands/spec.js +9 -9
  48. package/dist/commands/validate.js +6 -6
  49. package/dist/commands/workflow/instructions.js +6 -6
  50. package/dist/commands/workflow/new-change.js +3 -3
  51. package/dist/commands/workflow/shared.d.ts +1 -1
  52. package/dist/commands/workflow/shared.js +4 -4
  53. package/dist/core/archive.js +15 -5
  54. package/dist/core/artifact-graph/instruction-loader.d.ts +1 -1
  55. package/dist/core/artifact-graph/instruction-loader.js +3 -3
  56. package/dist/core/artifact-graph/resolver.d.ts +4 -4
  57. package/dist/core/artifact-graph/resolver.js +6 -6
  58. package/dist/core/branding.js +3 -3
  59. package/dist/core/cli/command-matrix.js +19 -1
  60. package/dist/core/cli-command-quality.d.ts +27 -0
  61. package/dist/core/cli-command-quality.js +180 -0
  62. package/dist/core/command-generation/adapters/costrict.d.ts +1 -1
  63. package/dist/core/command-generation/adapters/costrict.js +2 -2
  64. package/dist/core/command-generation/types.d.ts +1 -1
  65. package/dist/core/completions/command-registry.d.ts +1 -1
  66. package/dist/core/completions/command-registry.js +200 -12
  67. package/dist/core/completions/completion-provider.d.ts +14 -1
  68. package/dist/core/completions/completion-provider.js +29 -1
  69. package/dist/core/completions/generators/bash-generator.d.ts +1 -1
  70. package/dist/core/completions/generators/bash-generator.js +20 -12
  71. package/dist/core/completions/generators/fish-generator.d.ts +9 -1
  72. package/dist/core/completions/generators/fish-generator.js +39 -25
  73. package/dist/core/completions/generators/powershell-generator.d.ts +1 -1
  74. package/dist/core/completions/generators/powershell-generator.js +21 -11
  75. package/dist/core/completions/generators/zsh-generator.d.ts +3 -6
  76. package/dist/core/completions/generators/zsh-generator.js +21 -42
  77. package/dist/core/completions/installers/bash-installer.js +6 -6
  78. package/dist/core/completions/installers/fish-installer.js +1 -1
  79. package/dist/core/completions/installers/powershell-installer.js +14 -14
  80. package/dist/core/completions/installers/zsh-installer.d.ts +7 -1
  81. package/dist/core/completions/installers/zsh-installer.js +36 -8
  82. package/dist/core/completions/templates/bash-templates.d.ts +1 -1
  83. package/dist/core/completions/templates/bash-templates.js +12 -6
  84. package/dist/core/completions/templates/fish-templates.d.ts +2 -2
  85. package/dist/core/completions/templates/fish-templates.js +20 -9
  86. package/dist/core/completions/templates/powershell-templates.d.ts +1 -1
  87. package/dist/core/completions/templates/powershell-templates.js +13 -4
  88. package/dist/core/completions/templates/zsh-templates.d.ts +1 -1
  89. package/dist/core/completions/templates/zsh-templates.js +18 -9
  90. package/dist/core/config-schema.d.ts +20 -1
  91. package/dist/core/config-schema.js +70 -2
  92. package/dist/core/config.d.ts +3 -3
  93. package/dist/core/config.js +4 -4
  94. package/dist/core/global-config.d.ts +57 -12
  95. package/dist/core/global-config.js +344 -27
  96. package/dist/core/index.d.ts +1 -1
  97. package/dist/core/index.js +2 -2
  98. package/dist/core/init.d.ts +6 -1
  99. package/dist/core/init.js +99 -77
  100. package/dist/core/legacy-cleanup.d.ts +17 -17
  101. package/dist/core/legacy-cleanup.js +96 -79
  102. package/dist/core/list.js +18 -4
  103. package/dist/core/migration.d.ts +3 -1
  104. package/dist/core/migration.js +7 -8
  105. package/dist/core/parsers/change-parser.js +1 -1
  106. package/dist/core/parsers/markdown-parser.js +2 -2
  107. package/dist/core/profile-sync-drift.d.ts +1 -1
  108. package/dist/core/profile-sync-drift.js +13 -13
  109. package/dist/core/project-config.d.ts +4 -4
  110. package/dist/core/project-config.js +11 -11
  111. package/dist/core/schemas/change.schema.d.ts +1 -1
  112. package/dist/core/schemas/change.schema.js +1 -1
  113. package/dist/core/schemas/spec.schema.d.ts +1 -1
  114. package/dist/core/schemas/spec.schema.js +1 -1
  115. package/dist/core/sdd/adr.js +23 -1
  116. package/dist/core/sdd/agent-binding.d.ts +346 -0
  117. package/dist/core/sdd/agent-binding.js +343 -0
  118. package/dist/core/sdd/agent-runtime-contract.d.ts +204 -0
  119. package/dist/core/sdd/agent-runtime-contract.js +200 -0
  120. package/dist/core/sdd/backlog-cli.d.ts +16 -0
  121. package/dist/core/sdd/backlog-cli.js +146 -0
  122. package/dist/core/sdd/backlog-conflict-policy.d.ts +58 -0
  123. package/dist/core/sdd/backlog-conflict-policy.js +230 -0
  124. package/dist/core/sdd/backlog-projection.d.ts +8 -0
  125. package/dist/core/sdd/backlog-projection.js +89 -0
  126. package/dist/core/sdd/backlog-provider-contract.d.ts +252 -0
  127. package/dist/core/sdd/backlog-provider-contract.js +158 -0
  128. package/dist/core/sdd/bootstrap.js +2 -2
  129. package/dist/core/sdd/check.d.ts +44 -0
  130. package/dist/core/sdd/check.js +62 -24
  131. package/dist/core/sdd/contract.d.ts +13 -0
  132. package/dist/core/sdd/contract.js +36 -0
  133. package/dist/core/sdd/coordination/coordination-adapters.d.ts +53 -8
  134. package/dist/core/sdd/coordination/coordination-adapters.js +182 -16
  135. package/dist/core/sdd/coordination/index.d.ts +1 -0
  136. package/dist/core/sdd/coordination/index.js +1 -0
  137. package/dist/core/sdd/coordination/redis-runtime.d.ts +131 -0
  138. package/dist/core/sdd/coordination/redis-runtime.js +698 -0
  139. package/dist/core/sdd/deepagent-contracts.d.ts +370 -0
  140. package/dist/core/sdd/deepagent-contracts.js +235 -0
  141. package/dist/core/sdd/deepagents/adr-governor.d.ts +2 -0
  142. package/dist/core/sdd/deepagents/adr-governor.js +30 -0
  143. package/dist/core/sdd/deepagents/backend.d.ts +63 -0
  144. package/dist/core/sdd/deepagents/backend.js +174 -0
  145. package/dist/core/sdd/deepagents/codesdd-tools.d.ts +39 -0
  146. package/dist/core/sdd/deepagents/codesdd-tools.js +83 -0
  147. package/dist/core/sdd/deepagents/evidence-mapper.d.ts +86 -0
  148. package/dist/core/sdd/deepagents/evidence-mapper.js +178 -0
  149. package/dist/core/sdd/deepagents/model-provider.d.ts +53 -0
  150. package/dist/core/sdd/deepagents/model-provider.js +379 -0
  151. package/dist/core/sdd/deepagents/policy-enforcement.d.ts +30 -0
  152. package/dist/core/sdd/deepagents/policy-enforcement.js +90 -0
  153. package/dist/core/sdd/deepagents/policy.d.ts +75 -0
  154. package/dist/core/sdd/deepagents/policy.js +358 -0
  155. package/dist/core/sdd/deepagents/quality-witness.d.ts +3 -0
  156. package/dist/core/sdd/deepagents/quality-witness.js +77 -0
  157. package/dist/core/sdd/deepagents/reversa-subagents.d.ts +75 -0
  158. package/dist/core/sdd/deepagents/reversa-subagents.js +182 -0
  159. package/dist/core/sdd/deepagents/runtime-factory.d.ts +90 -0
  160. package/dist/core/sdd/deepagents/runtime-factory.js +231 -0
  161. package/dist/core/sdd/deepagents/runtime-loader.d.ts +16 -0
  162. package/dist/core/sdd/deepagents/runtime-loader.js +65 -0
  163. package/dist/core/sdd/default-bootstrap-files.d.ts +3 -3
  164. package/dist/core/sdd/default-bootstrap-files.js +50 -10
  165. package/dist/core/sdd/default-skills.d.ts +30 -0
  166. package/dist/core/sdd/default-skills.js +288 -8
  167. package/dist/core/sdd/devtrack-api-appliance.d.ts +91 -0
  168. package/dist/core/sdd/devtrack-api-appliance.js +280 -0
  169. package/dist/core/sdd/devtrack-api-architecture.d.ts +31 -0
  170. package/dist/core/sdd/devtrack-api-architecture.js +608 -0
  171. package/dist/core/sdd/devtrack-api-import-boundary.d.ts +19 -0
  172. package/dist/core/sdd/devtrack-api-import-boundary.js +32 -0
  173. package/dist/core/sdd/diagnose.d.ts +59 -0
  174. package/dist/core/sdd/diagnose.js +37 -37
  175. package/dist/core/sdd/docs-sync.js +54 -20
  176. package/dist/core/sdd/domain/capability-diff.d.ts +63 -0
  177. package/dist/core/sdd/domain/capability-diff.js +200 -0
  178. package/dist/core/sdd/domain/change-safety-guardrails.d.ts +74 -0
  179. package/dist/core/sdd/domain/change-safety-guardrails.js +333 -0
  180. package/dist/core/sdd/domain/post-active-validation.d.ts +7 -0
  181. package/dist/core/sdd/domain/post-active-validation.js +61 -0
  182. package/dist/core/sdd/domain/semantic-intent-classifier.d.ts +29 -0
  183. package/dist/core/sdd/domain/semantic-intent-classifier.js +117 -0
  184. package/dist/core/sdd/domain/transition-engine.js +1 -0
  185. package/dist/core/sdd/entity-reference.d.ts +5 -0
  186. package/dist/core/sdd/entity-reference.js +22 -0
  187. package/dist/core/sdd/foundation-artifact-map-validator.d.ts +16 -0
  188. package/dist/core/sdd/foundation-artifact-map-validator.js +71 -0
  189. package/dist/core/sdd/foundation-layer-manifest.d.ts +24 -0
  190. package/dist/core/sdd/foundation-layer-manifest.js +117 -0
  191. package/dist/core/sdd/governance-backfill.d.ts +31 -0
  192. package/dist/core/sdd/governance-backfill.js +359 -0
  193. package/dist/core/sdd/governance-parser.d.ts +21 -0
  194. package/dist/core/sdd/governance-parser.js +91 -0
  195. package/dist/core/sdd/governance-schemas.d.ts +245 -0
  196. package/dist/core/sdd/governance-schemas.js +143 -0
  197. package/dist/core/sdd/{import-openspec.d.ts → import-legacy-spec.d.ts} +7 -7
  198. package/dist/core/sdd/{import-openspec.js → import-legacy-spec.js} +21 -29
  199. package/dist/core/sdd/init.d.ts +3 -0
  200. package/dist/core/sdd/init.js +6 -3
  201. package/dist/core/sdd/intent-guard.d.ts +22 -0
  202. package/dist/core/sdd/intent-guard.js +67 -0
  203. package/dist/core/sdd/json-schema.js +108 -6
  204. package/dist/core/sdd/knowledge-graph.d.ts +45 -0
  205. package/dist/core/sdd/knowledge-graph.js +288 -0
  206. package/dist/core/sdd/legacy-operations.js +507 -44
  207. package/dist/core/sdd/lenses.d.ts +1 -0
  208. package/dist/core/sdd/lenses.js +29 -1
  209. package/dist/core/sdd/migrate-workspace.js +95 -2
  210. package/dist/core/sdd/migrate.d.ts +1 -1
  211. package/dist/core/sdd/migrate.js +36 -2
  212. package/dist/core/sdd/package-security-gates.d.ts +21 -0
  213. package/dist/core/sdd/package-security-gates.js +119 -0
  214. package/dist/core/sdd/package-structure-gate.d.ts +83 -0
  215. package/dist/core/sdd/package-structure-gate.js +357 -0
  216. package/dist/core/sdd/parallel-feat-automation.d.ts +330 -0
  217. package/dist/core/sdd/parallel-feat-automation.js +424 -0
  218. package/dist/core/sdd/plugin-broker.d.ts +777 -0
  219. package/dist/core/sdd/plugin-broker.js +492 -0
  220. package/dist/core/sdd/plugin-certification.d.ts +79 -0
  221. package/dist/core/sdd/plugin-certification.js +453 -0
  222. package/dist/core/sdd/plugin-cli.d.ts +139 -0
  223. package/dist/core/sdd/plugin-cli.js +265 -0
  224. package/dist/core/sdd/plugin-evidence.d.ts +348 -0
  225. package/dist/core/sdd/plugin-evidence.js +307 -0
  226. package/dist/core/sdd/plugin-manifest.d.ts +232 -0
  227. package/dist/core/sdd/plugin-manifest.js +225 -0
  228. package/dist/core/sdd/plugin-policy-pack.d.ts +88 -0
  229. package/dist/core/sdd/plugin-policy-pack.js +236 -0
  230. package/dist/core/sdd/plugin-policy.d.ts +68 -0
  231. package/dist/core/sdd/plugin-policy.js +212 -0
  232. package/dist/core/sdd/plugin-registry.d.ts +447 -0
  233. package/dist/core/sdd/plugin-registry.js +138 -0
  234. package/dist/core/sdd/plugin-sdk-contract.d.ts +363 -0
  235. package/dist/core/sdd/plugin-sdk-contract.js +268 -0
  236. package/dist/core/sdd/plugin-skill-binding.d.ts +151 -0
  237. package/dist/core/sdd/plugin-skill-binding.js +339 -0
  238. package/dist/core/sdd/quality-artifact-manifest-validator.d.ts +28 -0
  239. package/dist/core/sdd/quality-artifact-manifest-validator.js +167 -0
  240. package/dist/core/sdd/quality-evidence-renderer.d.ts +65 -0
  241. package/dist/core/sdd/quality-evidence-renderer.js +218 -0
  242. package/dist/core/sdd/quality-scenario-runner.d.ts +42 -0
  243. package/dist/core/sdd/quality-scenario-runner.js +613 -0
  244. package/dist/core/sdd/quality-validation.d.ts +620 -0
  245. package/dist/core/sdd/quality-validation.js +239 -0
  246. package/dist/core/sdd/release-readiness.d.ts +19 -0
  247. package/dist/core/sdd/release-readiness.js +472 -0
  248. package/dist/core/sdd/resolve-project-root.d.ts +2 -2
  249. package/dist/core/sdd/resolve-project-root.js +11 -5
  250. package/dist/core/sdd/runtime-boundary-contract.d.ts +45 -0
  251. package/dist/core/sdd/runtime-boundary-contract.js +90 -0
  252. package/dist/core/sdd/sanitize.d.ts +30 -1
  253. package/dist/core/sdd/sanitize.js +23 -23
  254. package/dist/core/sdd/sdk-agent-plugin-quality-gates.d.ts +150 -0
  255. package/dist/core/sdd/sdk-agent-plugin-quality-gates.js +258 -0
  256. package/dist/core/sdd/services/agent-run.service.d.ts +97 -0
  257. package/dist/core/sdd/services/agent-run.service.js +261 -0
  258. package/dist/core/sdd/services/breakdown.service.js +2 -1
  259. package/dist/core/sdd/services/capability-diff.service.d.ts +18 -0
  260. package/dist/core/sdd/services/capability-diff.service.js +26 -0
  261. package/dist/core/sdd/services/change-safety-preflight.service.d.ts +17 -0
  262. package/dist/core/sdd/services/change-safety-preflight.service.js +17 -0
  263. package/dist/core/sdd/services/context.service.d.ts +43 -340
  264. package/dist/core/sdd/services/context.service.js +341 -25
  265. package/dist/core/sdd/services/debate.service.js +15 -2
  266. package/dist/core/sdd/services/feature-lint.service.d.ts +22 -0
  267. package/dist/core/sdd/services/feature-lint.service.js +105 -5
  268. package/dist/core/sdd/services/finalize.service.d.ts +105 -0
  269. package/dist/core/sdd/services/finalize.service.js +499 -38
  270. package/dist/core/sdd/services/frontend-gap.service.js +22 -7
  271. package/dist/core/sdd/services/frontend-impact.service.d.ts +1 -1
  272. package/dist/core/sdd/services/governance-control-plane-runtime-adapters.d.ts +17 -0
  273. package/dist/core/sdd/services/governance-control-plane-runtime-adapters.js +38 -0
  274. package/dist/core/sdd/services/governance-control-plane.service.d.ts +66 -0
  275. package/dist/core/sdd/services/governance-control-plane.service.js +134 -0
  276. package/dist/core/sdd/services/ingest-deposito.service.js +1 -1
  277. package/dist/core/sdd/services/legacy-capability.service.d.ts +10 -7
  278. package/dist/core/sdd/services/legacy-capability.service.js +38 -21
  279. package/dist/core/sdd/services/mcp-runtime.service.d.ts +123 -8
  280. package/dist/core/sdd/services/mcp-runtime.service.js +1085 -33
  281. package/dist/core/sdd/services/onboard.service.js +2 -1
  282. package/dist/core/sdd/services/rebuild.service.js +6 -1
  283. package/dist/core/sdd/services/semantic-intent-classifier.service.d.ts +6 -0
  284. package/dist/core/sdd/services/semantic-intent-classifier.service.js +7 -0
  285. package/dist/core/sdd/services/skills-sync.service.d.ts +17 -5
  286. package/dist/core/sdd/services/skills-sync.service.js +55 -2
  287. package/dist/core/sdd/services/start.service.js +6 -4
  288. package/dist/core/sdd/skill-bundles-curation-schema.d.ts +66 -0
  289. package/dist/core/sdd/skill-bundles-curation-schema.js +52 -0
  290. package/dist/core/sdd/skill-evidence.d.ts +19 -0
  291. package/dist/core/sdd/skill-evidence.js +38 -0
  292. package/dist/core/sdd/skill-policy-pool.d.ts +46 -0
  293. package/dist/core/sdd/skill-policy-pool.js +185 -0
  294. package/dist/core/sdd/state.d.ts +23 -0
  295. package/dist/core/sdd/state.js +313 -66
  296. package/dist/core/sdd/store/sdd-stores.js +2 -2
  297. package/dist/core/sdd/structural-health.d.ts +55 -55
  298. package/dist/core/sdd/types.d.ts +60 -19
  299. package/dist/core/sdd/types.js +21 -0
  300. package/dist/core/sdd/upgrade-to-codesdd.d.ts +45 -0
  301. package/dist/core/sdd/upgrade-to-codesdd.js +179 -0
  302. package/dist/core/sdd/views.js +17 -0
  303. package/dist/core/sdd/workspace-schemas.d.ts +670 -19
  304. package/dist/core/sdd/workspace-schemas.js +285 -5
  305. package/dist/core/sdd/write-manifest.js +22 -4
  306. package/dist/core/shared/skill-generation.d.ts +1 -1
  307. package/dist/core/shared/skill-generation.js +15 -15
  308. package/dist/core/shared/tool-detection.d.ts +3 -3
  309. package/dist/core/shared/tool-detection.js +14 -14
  310. package/dist/core/specs-apply.js +6 -6
  311. package/dist/core/templates/index.d.ts +1 -1
  312. package/dist/core/templates/index.js +1 -1
  313. package/dist/core/templates/workflows/apply-change.js +14 -14
  314. package/dist/core/templates/workflows/archive-change.js +32 -32
  315. package/dist/core/templates/workflows/bulk-archive-change.js +25 -25
  316. package/dist/core/templates/workflows/continue-change.js +12 -12
  317. package/dist/core/templates/workflows/explore.js +29 -29
  318. package/dist/core/templates/workflows/feedback.js +6 -6
  319. package/dist/core/templates/workflows/ff-change.js +24 -24
  320. package/dist/core/templates/workflows/new-change.js +20 -20
  321. package/dist/core/templates/workflows/onboard.js +33 -33
  322. package/dist/core/templates/workflows/propose.js +23 -23
  323. package/dist/core/templates/workflows/sdd.js +8 -8
  324. package/dist/core/templates/workflows/sync-specs.js +19 -19
  325. package/dist/core/templates/workflows/verify-change.js +17 -17
  326. package/dist/core/update.d.ts +2 -2
  327. package/dist/core/update.js +16 -15
  328. package/dist/core/validation/constants.d.ts +1 -1
  329. package/dist/core/validation/constants.js +1 -1
  330. package/dist/core/view.js +11 -11
  331. package/dist/domains/sdd/index.d.ts +6 -0
  332. package/dist/domains/sdd/index.js +6 -0
  333. package/dist/infrastructures/sdd/index.d.ts +7 -0
  334. package/dist/infrastructures/sdd/index.js +6 -0
  335. package/dist/presentations/cli/sdd/index.d.ts +3 -0
  336. package/dist/presentations/cli/sdd/index.js +3 -0
  337. package/dist/shared/sdd/index.d.ts +3 -0
  338. package/dist/shared/sdd/index.js +2 -0
  339. package/dist/telemetry/config.d.ts +2 -1
  340. package/dist/telemetry/config.js +17 -8
  341. package/dist/telemetry/index.d.ts +10 -2
  342. package/dist/telemetry/index.js +40 -7
  343. package/dist/ui/ascii-patterns.d.ts +2 -2
  344. package/dist/ui/ascii-patterns.js +2 -2
  345. package/dist/ui/welcome-screen.js +2 -2
  346. package/dist/utils/change-metadata.d.ts +4 -4
  347. package/dist/utils/change-metadata.js +6 -6
  348. package/dist/utils/change-utils.d.ts +3 -3
  349. package/dist/utils/change-utils.js +5 -5
  350. package/dist/utils/file-system.js +1 -1
  351. package/dist/utils/interactive.js +1 -1
  352. package/dist/utils/item-discovery.js +4 -4
  353. package/dist/utils/legacy-spec-compat.d.ts +2 -0
  354. package/dist/utils/legacy-spec-compat.js +2 -0
  355. package/dist/utils/shell-detection.d.ts +1 -0
  356. package/dist/utils/shell-detection.js +16 -0
  357. package/package.json +34 -21
  358. package/schemas/sdd/1-spec.schema.json +1 -1
  359. package/schemas/sdd/2-plan.schema.json +280 -3
  360. package/schemas/sdd/3-tasks.schema.json +73 -1
  361. package/schemas/sdd/4-changelog.schema.json +1 -1
  362. package/schemas/sdd/5-quality.schema.json +701 -5
  363. package/schemas/sdd/adr.schema.json +148 -0
  364. package/schemas/sdd/agent-binding-adapter.schema.json +210 -0
  365. package/schemas/sdd/agent-binding-resolution.schema.json +338 -0
  366. package/schemas/sdd/agent-runtime-command-plan.schema.json +212 -0
  367. package/schemas/sdd/agent-runtime-opencode-run-evidence.schema.json +270 -0
  368. package/schemas/sdd/backlog-projection-plan.schema.json +180 -0
  369. package/schemas/sdd/backlog-provider-contract.schema.json +260 -0
  370. package/schemas/sdd/codesdd-plugin.schema.json +645 -0
  371. package/schemas/sdd/debate.schema.json +244 -0
  372. package/schemas/sdd/deepagent-decision-evidence.schema.json +58 -0
  373. package/schemas/sdd/deepagent-env-contract.schema.json +143 -0
  374. package/schemas/sdd/deepagent-quality-evidence.schema.json +108 -0
  375. package/schemas/sdd/deepagent-run-evidence.schema.json +192 -0
  376. package/schemas/sdd/deepagent-run-plan.schema.json +197 -0
  377. package/schemas/sdd/deepagent-run-request.schema.json +637 -0
  378. package/schemas/sdd/deepagent-subagent-evidence.schema.json +110 -0
  379. package/schemas/sdd/deepagent-tool-call-evidence.schema.json +78 -0
  380. package/schemas/sdd/discarded.schema.json +127 -0
  381. package/schemas/sdd/epic.schema.json +147 -0
  382. package/schemas/sdd/insight.schema.json +136 -0
  383. package/schemas/sdd/parallel-feat-automation-plan.schema.json +304 -0
  384. package/schemas/sdd/parallel-feat-automation-request.schema.json +109 -0
  385. package/schemas/sdd/parallel-feat-scheduler-request.schema.json +116 -0
  386. package/schemas/sdd/parallel-feat-scheduler-result.schema.json +404 -0
  387. package/schemas/sdd/plugin-artifact-manifest.schema.json +259 -0
  388. package/schemas/sdd/plugin-artifact-map.schema.json +223 -0
  389. package/schemas/sdd/plugin-compliance-index.schema.json +136 -0
  390. package/schemas/sdd/plugin-dry-run-plan.schema.json +260 -0
  391. package/schemas/sdd/plugin-evidence-manifest.schema.json +678 -0
  392. package/schemas/sdd/plugin-language-runtime.schema.json +103 -0
  393. package/schemas/sdd/plugin-package-governance.schema.json +74 -0
  394. package/schemas/sdd/plugin-policy-evaluation.schema.json +92 -0
  395. package/schemas/sdd/plugin-policy-pack-evaluation.schema.json +94 -0
  396. package/schemas/sdd/plugin-policy-pack.schema.json +196 -0
  397. package/schemas/sdd/plugin-registry.schema.json +729 -0
  398. package/schemas/sdd/plugin-rollback-manifest.schema.json +87 -0
  399. package/schemas/sdd/plugin-runtime-invocation-plan.schema.json +954 -0
  400. package/schemas/sdd/plugin-skill-binding-resolution.schema.json +305 -0
  401. package/schemas/sdd/plugin-skill-binding.schema.json +88 -0
  402. package/schemas/sdd/plugin-validation-manifest.schema.json +123 -0
  403. package/schemas/sdd/quality-architecture-schema.schema.json +216 -0
  404. package/schemas/sdd/quality-evidence-bundle.schema.json +1337 -0
  405. package/schemas/sdd/quality-run.schema.json +197 -0
  406. package/schemas/sdd/quality-scenario.schema.json +252 -0
  407. package/schemas/sdd/sdk-agent-plugin-quality-gate-input.schema.json +168 -0
  408. package/schemas/sdd/sdk-agent-plugin-quality-gate-report.schema.json +160 -0
  409. package/schemas/sdd/workspace-catalog.schema.json +13232 -35
  410. package/schemas/spec-driven/schema.yaml +4 -4
  411. package/schemas/spec-driven/templates/proposal.md +1 -1
  412. package/dist/utils/openspec-compat.d.ts +0 -2
  413. package/dist/utils/openspec-compat.js +0 -2
@@ -1,4 +1,5 @@
1
1
  import { type NamingContractState, type ArchitectureState, type BacklogState, type DiscoveryIndexState, type FinalizeQueueState, type FrontendDecisionsState, type FrontendGapsState, type FrontendMapState, type IntegrationContractsState, type RepoMapState, type SourceIndexState, type SkillCatalogState, type SkillRoutingState, type ServiceCatalogState, type TechStackState, type TechDebtState, type UnblockEventsState, type TransitionLogState, type AuditHistoryState } from './types.js';
2
+ import { type BuiltInSkillDefinition, type BuiltInSkillSourceTree } from './default-skills.js';
2
3
  export type SddLanguage = 'pt-BR' | 'en-US';
3
4
  export type SddLayout = 'legacy' | 'pt-BR' | 'en-US';
4
5
  export interface SddRuntimeConfig {
@@ -23,6 +24,7 @@ export interface SddRuntimeConfig {
23
24
  autoRender: boolean;
24
25
  };
25
26
  }
27
+ export declare function buildDefaultSkillRoutingState(): SkillRoutingState;
26
28
  export interface SddPaths {
27
29
  projectRoot: string;
28
30
  memoryRoot: string;
@@ -89,6 +91,21 @@ export interface SddStateSnapshot {
89
91
  sourceIndex: SourceIndexState;
90
92
  skillRouting: SkillRoutingState;
91
93
  }
94
+ export declare function skillSubfoldersForLayout(layout: SddLayout): {
95
+ curated: string;
96
+ bundles: string;
97
+ };
98
+ export declare function defaultFoldersForLayout(layout: SddLayout): SddRuntimeConfig['folders'];
99
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
100
+ export declare function mergeRuntimeConfig(raw: unknown): SddRuntimeConfig;
101
+ export declare function validateRuntimeConfig(config: SddRuntimeConfig): void;
102
+ export declare function defaultRuntimeConfig(): SddRuntimeConfig;
103
+ export declare function fileExists(filePath: string): Promise<boolean>;
104
+ export declare function firstExistingFile(paths: string[]): Promise<string | null>;
105
+ export declare function readYamlObject(filePath: string): Promise<Record<string, unknown>>;
106
+ export declare function isLegacyGeneratedBy(value: unknown): boolean;
107
+ export declare function buildSddConfigDocument(existing: Record<string, unknown>, config: SddRuntimeConfig): Record<string, unknown>;
108
+ export declare function removeSddRuntimeConfigFromLegacySpecConfig(projectRoot: string): Promise<void>;
92
109
  export declare function loadProjectSddConfig(projectRoot: string): Promise<SddRuntimeConfig>;
93
110
  export declare function upsertProjectSddConfig(projectRoot: string, overrides?: {
94
111
  frontendEnabled?: boolean;
@@ -97,6 +114,12 @@ export declare function upsertProjectSddConfig(projectRoot: string, overrides?:
97
114
  }): Promise<SddRuntimeConfig>;
98
115
  export declare function resolveSddPaths(projectRoot: string, config: SddRuntimeConfig): SddPaths;
99
116
  export declare function ensureBaseStructure(paths: SddPaths): Promise<void>;
117
+ export declare function isBuiltInSkillSourceTree(definition: BuiltInSkillDefinition): definition is BuiltInSkillSourceTree;
118
+ export declare function adaptSkillContentForLayout(content: string, paths: SddPaths, config: SddRuntimeConfig): string;
119
+ export declare function listTreeFiles(rootDir: string): Promise<string[]>;
120
+ export declare function resolveBuiltInSourceRoot(paths: SddPaths, sourceRoot: string): Promise<string | null>;
121
+ export declare function materializeBuiltInSkill(paths: SddPaths, config: SddRuntimeConfig, skillId: string, definition: BuiltInSkillDefinition): Promise<void>;
122
+ export declare function ensureCuratedSkillCatalog(filePath: string): Promise<void>;
100
123
  export declare function ensureBaseFiles(paths: SddPaths, config: SddRuntimeConfig): Promise<void>;
101
124
  export declare function loadStateSnapshot(paths: SddPaths, config: SddRuntimeConfig): Promise<SddStateSnapshot>;
102
125
  export declare function loadSkillCatalogState(paths: SddPaths): Promise<SkillCatalogState>;
@@ -2,12 +2,261 @@ import path from 'node:path';
2
2
  import { promises as fs } from 'node:fs';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
5
- import { resolveOpenSpecLiveSubpath } from './services/legacy-capability.service.js';
5
+ import { resolveLegacySpecLiveSubpath } from './services/legacy-capability.service.js';
6
6
  import { ArchitectureStateSchema, BacklogStateSchema, DiscoveryIndexStateSchema, FinalizeQueueStateSchema, IntegrationContractsStateSchema, FrontendDecisionsStateSchema, UnblockEventsStateSchema, TransitionLogStateSchema, AuditHistoryStateSchema, FrontendGapsStateSchema, FrontendMapStateSchema, RepoMapStateSchema, SourceIndexStateSchema, SkillCatalogStateSchema, SkillRoutingStateSchema, ServiceCatalogStateSchema, TechStackStateSchema, TechDebtStateSchema, NamingContractStateSchema, } from './types.js';
7
7
  import { CLI_NAME } from '../branding.js';
8
- import { DEFAULT_CURATED_SKILL_CATALOG, BUILT_IN_SDD_SKILLS, buildCuratedBundlesMarkdown, } from './default-skills.js';
8
+ import { CURRENT_SDD_STATE_VERSION, buildSddContractConfig } from './contract.js';
9
+ import { DEFAULT_CURATED_SKILL_CATALOG, BUILT_IN_SDD_SKILLS, buildCuratedBundlesMarkdown, buildCuratedBundlesCurationData, } from './default-skills.js';
9
10
  import { buildSddInternalReadme, PROMPT_00_COMECE_POR_AQUI_MD, PROMPT_01_INGESTAO_DEPOSITO_MD, PROMPT_02_NORMALIZAR_PLANEJAMENTO_MD, PROMPT_03_EXECUCAO_FEATURE_MD, PROMPT_04_CONSOLIDACAO_FINALIZE_MD, PROMPTS_README_MD, TEMPLATE_1_SPEC_MD, TEMPLATE_2_PLAN_MD, TEMPLATE_QUALITY_MD, TEMPLATE_3_TASKS_MD, TEMPLATE_4_CHANGELOG_MD, } from './default-bootstrap-files.js';
10
11
  import { SddWriteTransaction } from './transaction.js';
12
+ export function buildDefaultSkillRoutingState() {
13
+ return {
14
+ version: 1,
15
+ default_skills: ['architecture', 'concise-planning', 'context-window-management'],
16
+ routes: [
17
+ {
18
+ domain: 'backend',
19
+ skills: ['devtrack-api', 'architecture', 'api-design-principles'],
20
+ bundles: ['architecture-backend'],
21
+ },
22
+ {
23
+ domain: 'api',
24
+ skills: ['devtrack-api', 'api-design-principles'],
25
+ bundles: ['architecture-backend'],
26
+ },
27
+ {
28
+ domain: 'nestjs',
29
+ skills: ['devtrack-api', 'architecture'],
30
+ bundles: ['architecture-backend'],
31
+ },
32
+ {
33
+ domain: 'typeorm',
34
+ skills: ['devtrack-api', 'database-design'],
35
+ bundles: ['architecture-backend'],
36
+ },
37
+ {
38
+ domain: 'devtrack',
39
+ skills: ['devtrack-api'],
40
+ bundles: ['architecture-backend'],
41
+ },
42
+ {
43
+ domain: 'python',
44
+ skills: ['api-clean-flask-langgraph', 'architecture'],
45
+ bundles: ['python-agentic-backend'],
46
+ },
47
+ {
48
+ domain: 'flask',
49
+ skills: ['api-clean-flask-langgraph'],
50
+ bundles: ['python-agentic-backend'],
51
+ },
52
+ {
53
+ domain: 'frontend',
54
+ skills: ['frontend-design', 'react-patterns'],
55
+ bundles: ['frontend-product'],
56
+ },
57
+ {
58
+ domain: 'angular',
59
+ skills: ['frontend-design', 'frontend-security-coder'],
60
+ bundles: ['frontend-product', 'security-quality'],
61
+ },
62
+ {
63
+ domain: 'flutter',
64
+ skills: ['devtrack-flutter', 'mobile-design', 'frontend-design'],
65
+ bundles: ['frontend-product'],
66
+ },
67
+ {
68
+ domain: 'dart',
69
+ skills: ['devtrack-flutter', 'architecture'],
70
+ bundles: ['frontend-product', 'architecture-backend'],
71
+ },
72
+ {
73
+ domain: 'cross-platform',
74
+ skills: ['devtrack-flutter', 'mobile-design'],
75
+ bundles: ['frontend-product'],
76
+ },
77
+ {
78
+ domain: 'flutter-ui',
79
+ skills: ['devtrack-flutter', 'frontend-design'],
80
+ bundles: ['frontend-product'],
81
+ },
82
+ {
83
+ domain: 'flutter-layout',
84
+ skills: ['devtrack-flutter', 'frontend-design'],
85
+ bundles: ['frontend-product'],
86
+ },
87
+ {
88
+ domain: 'flutter-routing',
89
+ skills: ['devtrack-flutter', 'architecture'],
90
+ bundles: ['frontend-product', 'architecture-backend'],
91
+ },
92
+ {
93
+ domain: 'flutter-l10n',
94
+ skills: ['devtrack-flutter'],
95
+ bundles: ['frontend-product'],
96
+ },
97
+ {
98
+ domain: 'flutter-http',
99
+ skills: ['devtrack-flutter', 'frontend-security-coder'],
100
+ bundles: ['frontend-product', 'security-quality'],
101
+ },
102
+ {
103
+ domain: 'flutter-json',
104
+ skills: ['devtrack-flutter'],
105
+ bundles: ['frontend-product'],
106
+ },
107
+ {
108
+ domain: 'widget-preview',
109
+ skills: ['devtrack-flutter', 'frontend-design'],
110
+ bundles: ['frontend-product'],
111
+ },
112
+ {
113
+ domain: 'widget-test',
114
+ skills: ['devtrack-flutter'],
115
+ bundles: ['frontend-product'],
116
+ },
117
+ {
118
+ domain: 'integration-test',
119
+ skills: ['devtrack-flutter'],
120
+ bundles: ['frontend-product'],
121
+ },
122
+ {
123
+ domain: 'go-router',
124
+ skills: ['devtrack-flutter', 'architecture'],
125
+ bundles: ['frontend-product', 'architecture-backend'],
126
+ },
127
+ {
128
+ domain: 'arb',
129
+ skills: ['devtrack-flutter'],
130
+ bundles: ['frontend-product'],
131
+ },
132
+ {
133
+ domain: 'l10n',
134
+ skills: ['devtrack-flutter'],
135
+ bundles: ['frontend-product'],
136
+ },
137
+ {
138
+ domain: 'admin',
139
+ skills: ['devtrack-angular', 'frontend-design', 'frontend-security-coder'],
140
+ bundles: ['frontend-product', 'security-quality'],
141
+ },
142
+ {
143
+ domain: 'angular-admin',
144
+ skills: ['devtrack-angular', 'frontend-design', 'frontend-security-coder'],
145
+ bundles: ['frontend-product', 'security-quality'],
146
+ },
147
+ {
148
+ domain: 'backoffice',
149
+ skills: ['devtrack-angular', 'frontend-design', 'frontend-security-coder'],
150
+ bundles: ['frontend-product', 'security-quality'],
151
+ },
152
+ {
153
+ domain: 'dashboard',
154
+ skills: ['devtrack-angular', 'frontend-design'],
155
+ bundles: ['frontend-product'],
156
+ },
157
+ {
158
+ domain: 'crud',
159
+ skills: ['devtrack-angular', 'architecture'],
160
+ bundles: ['frontend-product', 'architecture-backend'],
161
+ },
162
+ {
163
+ domain: 'data-grid',
164
+ skills: ['devtrack-angular', 'frontend-design'],
165
+ bundles: ['frontend-product'],
166
+ },
167
+ {
168
+ domain: 'formly',
169
+ skills: ['frontend-design'],
170
+ bundles: ['frontend-product'],
171
+ },
172
+ {
173
+ domain: 'ngxs',
174
+ skills: ['architecture'],
175
+ bundles: ['frontend-product', 'architecture-backend'],
176
+ },
177
+ {
178
+ domain: 'admin-formly',
179
+ skills: ['devtrack-angular', 'frontend-design'],
180
+ bundles: ['frontend-product'],
181
+ },
182
+ {
183
+ domain: 'admin-state',
184
+ skills: ['devtrack-angular', 'architecture'],
185
+ bundles: ['frontend-product', 'architecture-backend'],
186
+ },
187
+ {
188
+ domain: 'ngxs-admin',
189
+ skills: ['devtrack-angular', 'architecture'],
190
+ bundles: ['frontend-product', 'architecture-backend'],
191
+ },
192
+ {
193
+ domain: 'uiux',
194
+ skills: ['frontend-design', 'ui-ux-pro-max'],
195
+ bundles: ['frontend-product'],
196
+ },
197
+ {
198
+ domain: 'permissions',
199
+ skills: ['devtrack-angular', 'frontend-security-coder'],
200
+ bundles: ['frontend-product', 'security-quality'],
201
+ },
202
+ {
203
+ domain: 'reports',
204
+ skills: ['devtrack-angular', 'frontend-design'],
205
+ bundles: ['frontend-product'],
206
+ },
207
+ {
208
+ domain: 'workflow',
209
+ skills: ['devtrack-angular', 'architecture'],
210
+ bundles: ['frontend-product', 'architecture-backend'],
211
+ },
212
+ {
213
+ domain: 'realtime',
214
+ skills: ['architecture'],
215
+ bundles: ['frontend-product'],
216
+ },
217
+ {
218
+ domain: 'rtc',
219
+ skills: ['architecture'],
220
+ bundles: ['frontend-product'],
221
+ },
222
+ {
223
+ domain: 'chat',
224
+ skills: ['frontend-design'],
225
+ bundles: ['frontend-product'],
226
+ },
227
+ {
228
+ domain: 'admin-realtime',
229
+ skills: ['devtrack-angular', 'architecture'],
230
+ bundles: ['frontend-product'],
231
+ },
232
+ {
233
+ domain: 'admin-chat',
234
+ skills: ['devtrack-angular', 'frontend-design'],
235
+ bundles: ['frontend-product'],
236
+ },
237
+ {
238
+ domain: 'mobile',
239
+ skills: ['mobile-design'],
240
+ bundles: ['frontend-product'],
241
+ },
242
+ {
243
+ domain: 'ionic',
244
+ skills: ['mobile-design'],
245
+ bundles: ['frontend-product'],
246
+ },
247
+ {
248
+ domain: 'nativescript',
249
+ skills: ['mobile-design'],
250
+ bundles: ['frontend-product'],
251
+ },
252
+ {
253
+ domain: 'infra',
254
+ skills: ['terraform-specialist', 'docker-expert'],
255
+ bundles: [],
256
+ },
257
+ ],
258
+ };
259
+ }
11
260
  const LEGACY_LAYOUT_FOLDERS = {
12
261
  discovery: 'discovery',
13
262
  planning: 'pendencias',
@@ -38,13 +287,13 @@ const PT_BR_LAYOUT_FOLDERS = {
38
287
  active: 'execucao',
39
288
  archived: 'arquivados',
40
289
  };
41
- function skillSubfoldersForLayout(layout) {
290
+ export function skillSubfoldersForLayout(layout) {
42
291
  if (layout === 'pt-BR') {
43
292
  return { curated: 'skills', bundles: 'pacotes' };
44
293
  }
45
294
  return { curated: 'curated', bundles: 'bundles' };
46
295
  }
47
- function defaultFoldersForLayout(layout) {
296
+ export function defaultFoldersForLayout(layout) {
48
297
  if (layout === 'pt-BR') {
49
298
  return { ...PT_BR_LAYOUT_FOLDERS };
50
299
  }
@@ -95,10 +344,10 @@ const CANONICAL_FOLDER_OPTIONS = {
95
344
  archived: ['arquivados'],
96
345
  },
97
346
  };
98
- function isRecord(value) {
347
+ export function isRecord(value) {
99
348
  return !!value && typeof value === 'object' && !Array.isArray(value);
100
349
  }
101
- function mergeRuntimeConfig(raw) {
350
+ export function mergeRuntimeConfig(raw) {
102
351
  if (!isRecord(raw)) {
103
352
  return {
104
353
  ...DEFAULT_SDD_CONFIG,
@@ -163,7 +412,7 @@ function mergeRuntimeConfig(raw) {
163
412
  },
164
413
  };
165
414
  }
166
- function validateRuntimeConfig(config) {
415
+ export function validateRuntimeConfig(config) {
167
416
  const allowed = CANONICAL_FOLDER_OPTIONS[config.layout];
168
417
  const invalidEntries = Object.entries(config.folders).flatMap(([key, value]) => {
169
418
  const folderKey = key;
@@ -179,7 +428,7 @@ function validateRuntimeConfig(config) {
179
428
  throw new Error(`Configuracao SDD invalida em .sdd/config.yaml: folders fora do canonico para layout ${config.layout}: ${invalidEntries.join('; ')}`);
180
429
  }
181
430
  }
182
- function defaultRuntimeConfig() {
431
+ export function defaultRuntimeConfig() {
183
432
  return {
184
433
  ...DEFAULT_SDD_CONFIG,
185
434
  folders: { ...DEFAULT_SDD_CONFIG.folders },
@@ -187,7 +436,7 @@ function defaultRuntimeConfig() {
187
436
  views: { autoRender: DEFAULT_SDD_CONFIG.views.autoRender },
188
437
  };
189
438
  }
190
- async function fileExists(filePath) {
439
+ export async function fileExists(filePath) {
191
440
  try {
192
441
  await fs.access(filePath);
193
442
  return true;
@@ -199,7 +448,7 @@ async function fileExists(filePath) {
199
448
  async function ensureDir(dirPath) {
200
449
  await fs.mkdir(dirPath, { recursive: true });
201
450
  }
202
- async function firstExistingFile(paths) {
451
+ export async function firstExistingFile(paths) {
203
452
  for (const filePath of paths) {
204
453
  if (await fileExists(filePath)) {
205
454
  return filePath;
@@ -207,17 +456,27 @@ async function firstExistingFile(paths) {
207
456
  }
208
457
  return null;
209
458
  }
210
- async function readYamlObject(filePath) {
459
+ export async function readYamlObject(filePath) {
211
460
  const parsed = parseYaml(await fs.readFile(filePath, 'utf-8'));
212
461
  return isRecord(parsed) ? parsed : {};
213
462
  }
214
- function buildSddConfigDocument(existing, config) {
463
+ const LEGACY_GENERATED_BY_PREFIXES = [`${'open'}sdd`, `${'open'}spec`];
464
+ export function isLegacyGeneratedBy(value) {
465
+ if (typeof value !== 'string')
466
+ return false;
467
+ return LEGACY_GENERATED_BY_PREFIXES.some((prefix) => new RegExp(`^${prefix}\\s`, 'i').test(value));
468
+ }
469
+ export function buildSddConfigDocument(existing, config) {
215
470
  const next = { ...existing };
216
471
  delete next.sdd;
217
472
  next.version = typeof next.version === 'number' ? next.version : 1;
218
- next.state_version = typeof next.state_version === 'number' ? next.state_version : 2;
473
+ const stateVersion = typeof next.state_version === 'number' ? next.state_version : CURRENT_SDD_STATE_VERSION;
474
+ next.state_version = stateVersion;
475
+ if (stateVersion >= CURRENT_SDD_STATE_VERSION) {
476
+ next.sdd_contract = buildSddContractConfig();
477
+ }
219
478
  next.generatedBy =
220
- typeof next.generatedBy === 'string' && !next.generatedBy.startsWith('openspec ')
479
+ typeof next.generatedBy === 'string' && !isLegacyGeneratedBy(next.generatedBy)
221
480
  ? next.generatedBy
222
481
  : `${CLI_NAME} sdd init`;
223
482
  next.meta_evolution = isRecord(next.meta_evolution)
@@ -237,10 +496,10 @@ function buildSddConfigDocument(existing, config) {
237
496
  next.views = { autoRender: config.views.autoRender };
238
497
  return next;
239
498
  }
240
- async function removeSddRuntimeConfigFromOpenSpecConfig(projectRoot) {
499
+ export async function removeSddRuntimeConfigFromLegacySpecConfig(projectRoot) {
241
500
  const legacyConfigPath = await firstExistingFile([
242
- resolveOpenSpecLiveSubpath(projectRoot, 'config.yaml'),
243
- resolveOpenSpecLiveSubpath(projectRoot, 'config.yml'),
501
+ resolveLegacySpecLiveSubpath(projectRoot, 'config.yaml'),
502
+ resolveLegacySpecLiveSubpath(projectRoot, 'config.yml'),
244
503
  ]);
245
504
  if (!legacyConfigPath) {
246
505
  return;
@@ -263,8 +522,8 @@ export async function loadProjectSddConfig(projectRoot) {
263
522
  return config;
264
523
  }
265
524
  const legacyConfigPath = await firstExistingFile([
266
- resolveOpenSpecLiveSubpath(projectRoot, 'config.yaml'),
267
- resolveOpenSpecLiveSubpath(projectRoot, 'config.yml'),
525
+ resolveLegacySpecLiveSubpath(projectRoot, 'config.yaml'),
526
+ resolveLegacySpecLiveSubpath(projectRoot, 'config.yml'),
268
527
  ]);
269
528
  if (legacyConfigPath) {
270
529
  const legacyRoot = await readYamlObject(legacyConfigPath);
@@ -289,8 +548,8 @@ export async function upsertProjectSddConfig(projectRoot, overrides) {
289
548
  }
290
549
  else {
291
550
  const legacyConfigPath = await firstExistingFile([
292
- resolveOpenSpecLiveSubpath(projectRoot, 'config.yaml'),
293
- resolveOpenSpecLiveSubpath(projectRoot, 'config.yml'),
551
+ resolveLegacySpecLiveSubpath(projectRoot, 'config.yaml'),
552
+ resolveLegacySpecLiveSubpath(projectRoot, 'config.yml'),
294
553
  ]);
295
554
  if (legacyConfigPath) {
296
555
  const legacyRoot = await readYamlObject(legacyConfigPath);
@@ -310,7 +569,7 @@ export async function upsertProjectSddConfig(projectRoot, overrides) {
310
569
  }
311
570
  validateRuntimeConfig(mergedSdd);
312
571
  await fs.writeFile(configPath, stringifyYaml(buildSddConfigDocument(rootConfig, mergedSdd)), 'utf-8');
313
- await removeSddRuntimeConfigFromOpenSpecConfig(projectRoot);
572
+ await removeSddRuntimeConfigFromLegacySpecConfig(projectRoot);
314
573
  return mergedSdd;
315
574
  }
316
575
  export function resolveSddPaths(projectRoot, config) {
@@ -431,13 +690,13 @@ async function writeFileIfMissing(filePath, content) {
431
690
  await fs.mkdir(path.dirname(filePath), { recursive: true });
432
691
  await fs.writeFile(filePath, content, 'utf-8');
433
692
  }
434
- function isBuiltInSkillSourceTree(definition) {
693
+ export function isBuiltInSkillSourceTree(definition) {
435
694
  return (typeof definition === 'object' &&
436
695
  definition !== null &&
437
696
  'kind' in definition &&
438
697
  definition.kind === 'source-tree');
439
698
  }
440
- function adaptSkillContentForLayout(content, paths, config) {
699
+ export function adaptSkillContentForLayout(content, paths, config) {
441
700
  if (config.layout === 'en-US') {
442
701
  return content;
443
702
  }
@@ -450,7 +709,7 @@ function adaptSkillContentForLayout(content, paths, config) {
450
709
  .replaceAll('/attachments/', '/anexos/')
451
710
  .replaceAll('/legacy/', '/legado/');
452
711
  }
453
- async function listTreeFiles(rootDir) {
712
+ export async function listTreeFiles(rootDir) {
454
713
  async function walk(currentDir, relativePrefix) {
455
714
  const entries = await fs.readdir(currentDir, { withFileTypes: true });
456
715
  const files = [];
@@ -474,7 +733,7 @@ async function listTreeFiles(rootDir) {
474
733
  files.sort((a, b) => a.localeCompare(b));
475
734
  return files;
476
735
  }
477
- async function resolveBuiltInSourceRoot(paths, sourceRoot) {
736
+ export async function resolveBuiltInSourceRoot(paths, sourceRoot) {
478
737
  const normalized = sourceRoot.trim();
479
738
  if (!normalized) {
480
739
  return null;
@@ -495,7 +754,7 @@ async function resolveBuiltInSourceRoot(paths, sourceRoot) {
495
754
  }
496
755
  return null;
497
756
  }
498
- async function materializeBuiltInSkill(paths, config, skillId, definition) {
757
+ export async function materializeBuiltInSkill(paths, config, skillId, definition) {
499
758
  if (typeof definition === 'string') {
500
759
  const materializedContent = adaptSkillContentForLayout(definition, paths, config);
501
760
  await writeFileIfMissing(path.join(paths.skillsCuratedDir, skillId, 'SKILL.md'), materializedContent);
@@ -523,7 +782,7 @@ async function materializeBuiltInSkill(paths, config, skillId, definition) {
523
782
  await writeFileIfMissing(targetFile, adaptSkillContentForLayout(content, paths, config));
524
783
  }
525
784
  }
526
- async function ensureCuratedSkillCatalog(filePath) {
785
+ export async function ensureCuratedSkillCatalog(filePath) {
527
786
  if (!(await fileExists(filePath))) {
528
787
  await fs.writeFile(filePath, stringifyYaml(DEFAULT_CURATED_SKILL_CATALOG), 'utf-8');
529
788
  return;
@@ -573,7 +832,8 @@ async function ensureCuratedSkillCatalog(filePath) {
573
832
  export async function ensureBaseFiles(paths, config) {
574
833
  await writeYamlIfMissing(paths.configFile, {
575
834
  version: 1,
576
- state_version: 2,
835
+ state_version: CURRENT_SDD_STATE_VERSION,
836
+ sdd_contract: buildSddContractConfig(),
577
837
  generatedBy: `${CLI_NAME} sdd init`,
578
838
  meta_evolution: {
579
839
  enabled: true,
@@ -594,7 +854,7 @@ export async function ensureBaseFiles(paths, config) {
594
854
  });
595
855
  await writeYamlIfMissing(paths.stateFiles.backlog, { version: 1, items: [] });
596
856
  await writeYamlIfMissing(paths.stateFiles.techDebt, { version: 1, items: [] });
597
- await writeYamlIfMissing(paths.stateFiles.finalizeQueue, { version: 1, items: [] });
857
+ await writeYamlIfMissing(paths.stateFiles.finalizeQueue, { version: 1, items: [], history: [] });
598
858
  await ensureCuratedSkillCatalog(paths.stateFiles.skillCatalog);
599
859
  await writeYamlIfMissing(paths.stateFiles.unblockEvents, { version: 1, events: [] });
600
860
  await writeYamlIfMissing(paths.stateFiles.transitionLog, { version: 1, events: [] });
@@ -611,21 +871,7 @@ export async function ensureBaseFiles(paths, config) {
611
871
  jurisdiction_profiles: [],
612
872
  control_catalog: [],
613
873
  });
614
- await writeYamlIfMissing(paths.stateFiles.skillRouting, {
615
- version: 1,
616
- default_skills: ['architecture', 'concise-planning', 'context-window-management'],
617
- routes: [
618
- { domain: 'backend', skills: ['architecture', 'api-design-principles'], bundles: [] },
619
- { domain: 'api', skills: ['api-design-principles', 'api-clean-flask-langgraph'], bundles: ['python-agentic-backend'] },
620
- { domain: 'python', skills: ['api-clean-flask-langgraph', 'architecture'], bundles: ['python-agentic-backend'] },
621
- { domain: 'flask', skills: ['api-clean-flask-langgraph'], bundles: ['python-agentic-backend'] },
622
- { domain: 'nestjs', skills: ['devtrack-api', 'architecture'], bundles: ['architecture-backend'] },
623
- { domain: 'typeorm', skills: ['devtrack-api', 'database-design'], bundles: ['architecture-backend'] },
624
- { domain: 'devtrack', skills: ['devtrack-api'], bundles: ['architecture-backend'] },
625
- { domain: 'frontend', skills: ['frontend-design', 'react-patterns'], bundles: [] },
626
- { domain: 'infra', skills: ['terraform-specialist', 'docker-expert'], bundles: [] }
627
- ]
628
- });
874
+ await writeYamlIfMissing(paths.stateFiles.skillRouting, buildDefaultSkillRoutingState());
629
875
  if (config.frontend.enabled) {
630
876
  await writeYamlIfMissing(paths.stateFiles.frontendGaps, { version: 1, items: [] });
631
877
  await writeYamlIfMissing(paths.stateFiles.frontendMap, { version: 1, routes: [] });
@@ -642,6 +888,11 @@ export async function ensureBaseFiles(paths, config) {
642
888
  prompts: 'prompts',
643
889
  }));
644
890
  await writeFileIfMissing(path.join(paths.skillsBundlesDir, config.layout === 'en-US' ? 'curation-en-us.md' : 'curadoria-pt-br.md'), buildCuratedBundlesMarkdown());
891
+ // EPIC-0072 wave 1 (FEAT-0284) — emit a schema-validated YAML form alongside
892
+ // the Markdown view so consumers can read typed data without scraping headings.
893
+ // The .md remains the human-readable view; the .yaml is the structured contract.
894
+ const curationLayout = config.layout === 'pt-BR' ? 'pt-BR' : 'en-US';
895
+ await writeFileIfMissing(path.join(paths.skillsBundlesDir, config.layout === 'en-US' ? 'curation-en-us.yaml' : 'curadoria-pt-br.yaml'), stringifyYaml(buildCuratedBundlesCurationData(curationLayout)));
645
896
  for (const [skillId, definition] of Object.entries(BUILT_IN_SDD_SKILLS)) {
646
897
  await materializeBuiltInSkill(paths, config, skillId, definition);
647
898
  }
@@ -707,19 +958,7 @@ export async function loadStateSnapshot(paths, config) {
707
958
  skillRouting = SkillRoutingStateSchema.parse(await readYaml(paths.stateFiles.skillRouting));
708
959
  }
709
960
  catch (e) {
710
- skillRouting = {
711
- version: 1,
712
- default_skills: ['architecture', 'concise-planning', 'context-window-management'],
713
- routes: [
714
- { domain: 'backend', skills: ['architecture', 'api-design-principles'], bundles: [] },
715
- { domain: 'api', skills: ['api-design-principles', 'api-clean-flask-langgraph'], bundles: ['python-agentic-backend'] },
716
- { domain: 'python', skills: ['api-clean-flask-langgraph', 'architecture'], bundles: ['python-agentic-backend'] },
717
- { domain: 'flask', skills: ['api-clean-flask-langgraph'], bundles: ['python-agentic-backend'] },
718
- { domain: 'nestjs', skills: ['devtrack-api', 'architecture'], bundles: ['architecture-backend'] },
719
- { domain: 'typeorm', skills: ['devtrack-api', 'database-design'], bundles: ['architecture-backend'] },
720
- { domain: 'devtrack', skills: ['devtrack-api'], bundles: ['architecture-backend'] }
721
- ]
722
- };
961
+ skillRouting = buildDefaultSkillRoutingState();
723
962
  }
724
963
  let frontendGaps;
725
964
  let frontendMap;
@@ -814,6 +1053,14 @@ export function defaultNamingContractState() {
814
1053
  '.sdd/discovery/**',
815
1054
  'test/core/sdd/fixtures/**',
816
1055
  ];
1056
+ const legacyPrefix = 'open';
1057
+ const legacySpec = `${legacyPrefix}spec`;
1058
+ const legacySdd = `${legacyPrefix}sdd`;
1059
+ const legacyTitlePrefix = `${legacyPrefix[0].toUpperCase()}${legacyPrefix.slice(1)}`;
1060
+ const legacySpecTitle = `${legacyTitlePrefix}Spec`;
1061
+ const legacySddTitle = `${legacyTitlePrefix}SDD`;
1062
+ const legacySpecCamel = `${legacyPrefix}Spec`;
1063
+ const legacySddCamel = `${legacyPrefix}SDD`;
817
1064
  return {
818
1065
  version: 1,
819
1066
  product_name: 'CodeSDD',
@@ -830,13 +1077,13 @@ export function defaultNamingContractState() {
830
1077
  package_name: '@devtrack-solution/codesdd',
831
1078
  },
832
1079
  forbidden_terms: [
833
- { term: 'openspec', scope: 'all', severity: 'warning', allowlist_paths: [...sharedAllowlist] },
834
- { term: 'OpenSpec', scope: 'all', severity: 'warning', allowlist_paths: [...sharedAllowlist] },
835
- { term: 'openSpec', scope: 'all', severity: 'warning', allowlist_paths: [...sharedAllowlist] },
1080
+ { term: legacySpec, scope: 'all', severity: 'warning', allowlist_paths: [...sharedAllowlist] },
1081
+ { term: legacySpecTitle, scope: 'all', severity: 'warning', allowlist_paths: [...sharedAllowlist] },
1082
+ { term: legacySpecCamel, scope: 'all', severity: 'warning', allowlist_paths: [...sharedAllowlist] },
836
1083
  ],
837
1084
  allowlist: [
838
1085
  { path_pattern: '.sdd/archived/**', reason: 'Archived SDD artifacts retain legacy terminology', owner: 'sdd-core' },
839
- { path_pattern: '.sdd/sources/legacy/spec-corpus/**', reason: 'Legacy OpenSpec import sources', owner: 'sdd-core' },
1086
+ { path_pattern: '.sdd/sources/legacy/spec-corpus/**', reason: 'Imported legacy corpus sources', owner: 'sdd-core' },
840
1087
  { path_pattern: 'node_modules/**', reason: 'Third-party dependencies', owner: 'sdd-core' },
841
1088
  { path_pattern: 'dist/**', reason: 'Build output', owner: 'sdd-core' },
842
1089
  { path_pattern: 'coverage/**', reason: 'Test coverage artifacts', owner: 'sdd-core' },
@@ -844,7 +1091,7 @@ export function defaultNamingContractState() {
844
1091
  ],
845
1092
  rename_rules: [
846
1093
  {
847
- from: 'OpenSDD',
1094
+ from: legacySddTitle,
848
1095
  to: 'CodeSDD',
849
1096
  scope: 'all',
850
1097
  phase: 'identity-introduction',
@@ -853,7 +1100,7 @@ export function defaultNamingContractState() {
853
1100
  path_globs: ['README.md', 'docs/**', 'src/**', 'test/**', '.sdd/state/**'],
854
1101
  },
855
1102
  {
856
- from: 'opensdd',
1103
+ from: legacySdd,
857
1104
  to: 'codesdd',
858
1105
  scope: 'all',
859
1106
  phase: 'identity-introduction',
@@ -862,7 +1109,7 @@ export function defaultNamingContractState() {
862
1109
  path_globs: ['package.json', 'bin/**', 'src/**', 'test/**', 'docs/**'],
863
1110
  },
864
1111
  {
865
- from: '@devtrack-solution/codesdd',
1112
+ from: `@devtrack-solution/${legacySdd}-cli`,
866
1113
  to: '@devtrack-solution/codesdd',
867
1114
  scope: 'all',
868
1115
  phase: 'package-identity',
@@ -874,7 +1121,7 @@ export function defaultNamingContractState() {
874
1121
  zero_residue_gate: {
875
1122
  enabled: true,
876
1123
  enforcement: 'warning',
877
- terms: ['openspec', 'OpenSpec', 'openSpec', 'opensdd', 'OpenSDD', 'openSDD'],
1124
+ terms: [legacySpec, legacySpecTitle, legacySpecCamel, legacySdd, legacySddTitle, legacySddCamel],
878
1125
  allowlist_paths: [...sharedAllowlist],
879
1126
  removal_phase: 'compatibility-shutdown',
880
1127
  },
@@ -7,7 +7,7 @@ export function createSddStores(paths) {
7
7
  discoveryIndex: new YamlFileAdapter(stateFiles.discoveryIndex, DiscoveryIndexStateSchema, () => ({ version: 1, counters: { INS: 0, DEB: 0, RAD: 0, EPIC: 0, FEAT: 0, FGAP: 0, TD: 0 }, records: [] })),
8
8
  backlog: new YamlFileAdapter(stateFiles.backlog, BacklogStateSchema, () => ({ version: 1, items: [] })),
9
9
  techDebt: new YamlFileAdapter(stateFiles.techDebt, TechDebtStateSchema, () => ({ version: 1, items: [] })),
10
- finalizeQueue: new YamlFileAdapter(stateFiles.finalizeQueue, FinalizeQueueStateSchema, () => ({ version: 1, items: [] })),
10
+ finalizeQueue: new YamlFileAdapter(stateFiles.finalizeQueue, FinalizeQueueStateSchema, () => ({ version: 1, items: [], history: [] })),
11
11
  skillCatalog: new YamlFileAdapter(stateFiles.skillCatalog, SkillCatalogStateSchema, () => ({ version: 1, skills: [], bundles: [] })),
12
12
  unblockEvents: new YamlFileAdapter(stateFiles.unblockEvents, UnblockEventsStateSchema, () => ({ version: 1, events: [] })),
13
13
  transitionLog: new YamlFileAdapter(stateFiles.transitionLog, TransitionLogStateSchema, () => ({ version: 1, events: [] })),
@@ -34,7 +34,7 @@ export function createInMemorySddStores() {
34
34
  discoveryIndex: new InMemoryAdapter(DiscoveryIndexStateSchema, () => ({ version: 1, counters: { INS: 0, DEB: 0, RAD: 0, EPIC: 0, FEAT: 0, FGAP: 0, TD: 0 }, records: [] })),
35
35
  backlog: new InMemoryAdapter(BacklogStateSchema, () => ({ version: 1, items: [] })),
36
36
  techDebt: new InMemoryAdapter(TechDebtStateSchema, () => ({ version: 1, items: [] })),
37
- finalizeQueue: new InMemoryAdapter(FinalizeQueueStateSchema, () => ({ version: 1, items: [] })),
37
+ finalizeQueue: new InMemoryAdapter(FinalizeQueueStateSchema, () => ({ version: 1, items: [], history: [] })),
38
38
  skillCatalog: new InMemoryAdapter(SkillCatalogStateSchema, () => ({ version: 1, skills: [], bundles: [] })),
39
39
  unblockEvents: new InMemoryAdapter(UnblockEventsStateSchema, () => ({ version: 1, events: [] })),
40
40
  transitionLog: new InMemoryAdapter(TransitionLogStateSchema, () => ({ version: 1, events: [] })),