@devtrack-solution/codesdd 1.2.2 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/.sdd/skills/curated/api-clean-flask-langgraph/SKILL.md +17 -17
  2. package/.sdd/skills/curated/devtrack-api/SKILL.md +160 -28
  3. package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +1 -1
  4. package/.sdd/skills/curated/devtrack-api/references/architecture-governance.md +8 -7
  5. package/.sdd/skills/curated/devtrack-api/references/consumer-sync-policy.md +93 -0
  6. package/.sdd/skills/curated/devtrack-api/references/contract-pack.yaml +317 -0
  7. package/.sdd/skills/curated/devtrack-api/references/field-validation-protocol.md +95 -0
  8. package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +295 -0
  9. package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +4 -4
  10. package/.sdd/skills/curated/devtrack-api/references/imports-lint.md +4 -0
  11. package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +2 -2
  12. package/LICENSE +1 -1
  13. package/README.md +243 -51
  14. package/bin/codesdd.js +3 -2
  15. package/dist/cli/index.d.ts +2 -2
  16. package/dist/cli/index.js +11 -558
  17. package/dist/cli/program.d.ts +14 -0
  18. package/dist/cli/program.js +645 -0
  19. package/dist/commands/change.js +5 -5
  20. package/dist/commands/completion.d.ts +1 -1
  21. package/dist/commands/completion.js +9 -2
  22. package/dist/commands/config.js +159 -20
  23. package/dist/commands/feedback.js +1 -1
  24. package/dist/commands/schema.d.ts +63 -0
  25. package/dist/commands/schema.js +12 -12
  26. package/dist/commands/sdd/backlog.d.ts +3 -0
  27. package/dist/commands/sdd/backlog.js +54 -0
  28. package/dist/commands/sdd/execution.js +147 -16
  29. package/dist/commands/sdd/plugin.d.ts +3 -0
  30. package/dist/commands/sdd/plugin.js +153 -0
  31. package/dist/commands/sdd/shared.js +2 -23
  32. package/dist/commands/sdd/skills.js +7 -0
  33. package/dist/commands/sdd.js +69 -12
  34. package/dist/commands/spec.js +9 -9
  35. package/dist/commands/validate.js +6 -6
  36. package/dist/commands/workflow/instructions.js +6 -6
  37. package/dist/commands/workflow/new-change.js +3 -3
  38. package/dist/commands/workflow/shared.d.ts +1 -1
  39. package/dist/commands/workflow/shared.js +4 -4
  40. package/dist/core/archive.js +15 -5
  41. package/dist/core/artifact-graph/instruction-loader.d.ts +1 -1
  42. package/dist/core/artifact-graph/instruction-loader.js +3 -3
  43. package/dist/core/artifact-graph/resolver.d.ts +4 -4
  44. package/dist/core/artifact-graph/resolver.js +6 -6
  45. package/dist/core/branding.js +3 -3
  46. package/dist/core/cli/command-matrix.js +10 -1
  47. package/dist/core/cli-command-quality.d.ts +27 -0
  48. package/dist/core/cli-command-quality.js +171 -0
  49. package/dist/core/command-generation/adapters/costrict.d.ts +1 -1
  50. package/dist/core/command-generation/adapters/costrict.js +2 -2
  51. package/dist/core/command-generation/types.d.ts +1 -1
  52. package/dist/core/completions/command-registry.d.ts +1 -1
  53. package/dist/core/completions/command-registry.js +155 -12
  54. package/dist/core/completions/completion-provider.d.ts +14 -1
  55. package/dist/core/completions/completion-provider.js +29 -1
  56. package/dist/core/completions/generators/bash-generator.d.ts +1 -1
  57. package/dist/core/completions/generators/bash-generator.js +20 -12
  58. package/dist/core/completions/generators/fish-generator.d.ts +9 -1
  59. package/dist/core/completions/generators/fish-generator.js +39 -25
  60. package/dist/core/completions/generators/powershell-generator.d.ts +1 -1
  61. package/dist/core/completions/generators/powershell-generator.js +21 -11
  62. package/dist/core/completions/generators/zsh-generator.d.ts +3 -6
  63. package/dist/core/completions/generators/zsh-generator.js +21 -42
  64. package/dist/core/completions/installers/bash-installer.js +6 -6
  65. package/dist/core/completions/installers/fish-installer.js +1 -1
  66. package/dist/core/completions/installers/powershell-installer.js +14 -14
  67. package/dist/core/completions/installers/zsh-installer.d.ts +7 -1
  68. package/dist/core/completions/installers/zsh-installer.js +36 -8
  69. package/dist/core/completions/templates/bash-templates.d.ts +1 -1
  70. package/dist/core/completions/templates/bash-templates.js +12 -6
  71. package/dist/core/completions/templates/fish-templates.d.ts +2 -2
  72. package/dist/core/completions/templates/fish-templates.js +20 -9
  73. package/dist/core/completions/templates/powershell-templates.d.ts +1 -1
  74. package/dist/core/completions/templates/powershell-templates.js +13 -4
  75. package/dist/core/completions/templates/zsh-templates.d.ts +1 -1
  76. package/dist/core/completions/templates/zsh-templates.js +18 -9
  77. package/dist/core/config-schema.d.ts +3 -1
  78. package/dist/core/config-schema.js +26 -1
  79. package/dist/core/config.d.ts +3 -3
  80. package/dist/core/config.js +4 -4
  81. package/dist/core/global-config.d.ts +41 -12
  82. package/dist/core/global-config.js +344 -27
  83. package/dist/core/index.d.ts +1 -1
  84. package/dist/core/index.js +2 -2
  85. package/dist/core/init.d.ts +6 -1
  86. package/dist/core/init.js +99 -77
  87. package/dist/core/legacy-cleanup.d.ts +17 -17
  88. package/dist/core/legacy-cleanup.js +96 -79
  89. package/dist/core/list.js +18 -4
  90. package/dist/core/migration.d.ts +3 -1
  91. package/dist/core/migration.js +7 -8
  92. package/dist/core/parsers/change-parser.js +1 -1
  93. package/dist/core/parsers/markdown-parser.js +2 -2
  94. package/dist/core/profile-sync-drift.d.ts +1 -1
  95. package/dist/core/profile-sync-drift.js +13 -13
  96. package/dist/core/project-config.d.ts +4 -4
  97. package/dist/core/project-config.js +11 -11
  98. package/dist/core/schemas/change.schema.d.ts +1 -1
  99. package/dist/core/schemas/change.schema.js +1 -1
  100. package/dist/core/schemas/spec.schema.d.ts +1 -1
  101. package/dist/core/schemas/spec.schema.js +1 -1
  102. package/dist/core/sdd/adr.js +23 -1
  103. package/dist/core/sdd/agent-binding.d.ts +346 -0
  104. package/dist/core/sdd/agent-binding.js +343 -0
  105. package/dist/core/sdd/backlog-cli.d.ts +16 -0
  106. package/dist/core/sdd/backlog-cli.js +146 -0
  107. package/dist/core/sdd/backlog-conflict-policy.d.ts +58 -0
  108. package/dist/core/sdd/backlog-conflict-policy.js +230 -0
  109. package/dist/core/sdd/backlog-projection.d.ts +8 -0
  110. package/dist/core/sdd/backlog-projection.js +89 -0
  111. package/dist/core/sdd/backlog-provider-contract.d.ts +252 -0
  112. package/dist/core/sdd/backlog-provider-contract.js +158 -0
  113. package/dist/core/sdd/bootstrap.js +2 -2
  114. package/dist/core/sdd/check.d.ts +42 -0
  115. package/dist/core/sdd/check.js +22 -22
  116. package/dist/core/sdd/contract.d.ts +13 -0
  117. package/dist/core/sdd/contract.js +36 -0
  118. package/dist/core/sdd/coordination/coordination-adapters.d.ts +38 -0
  119. package/dist/core/sdd/coordination/coordination-adapters.js +139 -1
  120. package/dist/core/sdd/deepagent-contracts.d.ts +276 -0
  121. package/dist/core/sdd/deepagent-contracts.js +173 -0
  122. package/dist/core/sdd/deepagents/adr-governor.d.ts +2 -0
  123. package/dist/core/sdd/deepagents/adr-governor.js +30 -0
  124. package/dist/core/sdd/deepagents/backend.d.ts +63 -0
  125. package/dist/core/sdd/deepagents/backend.js +174 -0
  126. package/dist/core/sdd/deepagents/codesdd-tools.d.ts +39 -0
  127. package/dist/core/sdd/deepagents/codesdd-tools.js +83 -0
  128. package/dist/core/sdd/deepagents/evidence-mapper.d.ts +86 -0
  129. package/dist/core/sdd/deepagents/evidence-mapper.js +178 -0
  130. package/dist/core/sdd/deepagents/model-provider.d.ts +53 -0
  131. package/dist/core/sdd/deepagents/model-provider.js +379 -0
  132. package/dist/core/sdd/deepagents/policy-enforcement.d.ts +30 -0
  133. package/dist/core/sdd/deepagents/policy-enforcement.js +90 -0
  134. package/dist/core/sdd/deepagents/policy.d.ts +75 -0
  135. package/dist/core/sdd/deepagents/policy.js +358 -0
  136. package/dist/core/sdd/deepagents/quality-witness.d.ts +3 -0
  137. package/dist/core/sdd/deepagents/quality-witness.js +77 -0
  138. package/dist/core/sdd/deepagents/reversa-subagents.d.ts +75 -0
  139. package/dist/core/sdd/deepagents/reversa-subagents.js +182 -0
  140. package/dist/core/sdd/deepagents/runtime-factory.d.ts +90 -0
  141. package/dist/core/sdd/deepagents/runtime-factory.js +231 -0
  142. package/dist/core/sdd/deepagents/runtime-loader.d.ts +16 -0
  143. package/dist/core/sdd/deepagents/runtime-loader.js +65 -0
  144. package/dist/core/sdd/default-bootstrap-files.d.ts +2 -2
  145. package/dist/core/sdd/default-bootstrap-files.js +36 -2
  146. package/dist/core/sdd/default-skills.d.ts +30 -0
  147. package/dist/core/sdd/default-skills.js +181 -5
  148. package/dist/core/sdd/devtrack-api-appliance.d.ts +84 -0
  149. package/dist/core/sdd/devtrack-api-appliance.js +257 -0
  150. package/dist/core/sdd/devtrack-api-architecture.d.ts +31 -0
  151. package/dist/core/sdd/devtrack-api-architecture.js +608 -0
  152. package/dist/core/sdd/devtrack-api-import-boundary.d.ts +19 -0
  153. package/dist/core/sdd/devtrack-api-import-boundary.js +32 -0
  154. package/dist/core/sdd/diagnose.d.ts +59 -0
  155. package/dist/core/sdd/diagnose.js +37 -37
  156. package/dist/core/sdd/docs-sync.js +33 -5
  157. package/dist/core/sdd/domain/post-active-validation.d.ts +7 -0
  158. package/dist/core/sdd/domain/post-active-validation.js +61 -0
  159. package/dist/core/sdd/domain/transition-engine.js +1 -0
  160. package/dist/core/sdd/entity-reference.d.ts +5 -0
  161. package/dist/core/sdd/entity-reference.js +22 -0
  162. package/dist/core/sdd/governance-backfill.d.ts +31 -0
  163. package/dist/core/sdd/governance-backfill.js +359 -0
  164. package/dist/core/sdd/governance-parser.d.ts +21 -0
  165. package/dist/core/sdd/governance-parser.js +91 -0
  166. package/dist/core/sdd/governance-schemas.d.ts +245 -0
  167. package/dist/core/sdd/governance-schemas.js +143 -0
  168. package/dist/core/sdd/{import-openspec.d.ts → import-legacy-spec.d.ts} +7 -7
  169. package/dist/core/sdd/{import-openspec.js → import-legacy-spec.js} +21 -29
  170. package/dist/core/sdd/init.d.ts +3 -0
  171. package/dist/core/sdd/init.js +6 -3
  172. package/dist/core/sdd/json-schema.js +100 -6
  173. package/dist/core/sdd/knowledge-graph.d.ts +45 -0
  174. package/dist/core/sdd/knowledge-graph.js +288 -0
  175. package/dist/core/sdd/legacy-operations.js +431 -43
  176. package/dist/core/sdd/lenses.d.ts +1 -0
  177. package/dist/core/sdd/lenses.js +29 -1
  178. package/dist/core/sdd/migrate-workspace.js +56 -2
  179. package/dist/core/sdd/migrate.d.ts +1 -1
  180. package/dist/core/sdd/migrate.js +36 -2
  181. package/dist/core/sdd/package-structure-gate.d.ts +83 -0
  182. package/dist/core/sdd/package-structure-gate.js +362 -0
  183. package/dist/core/sdd/parallel-feat-automation.d.ts +152 -0
  184. package/dist/core/sdd/parallel-feat-automation.js +212 -0
  185. package/dist/core/sdd/plugin-broker.d.ts +558 -0
  186. package/dist/core/sdd/plugin-broker.js +482 -0
  187. package/dist/core/sdd/plugin-certification.d.ts +79 -0
  188. package/dist/core/sdd/plugin-certification.js +453 -0
  189. package/dist/core/sdd/plugin-cli.d.ts +109 -0
  190. package/dist/core/sdd/plugin-cli.js +198 -0
  191. package/dist/core/sdd/plugin-evidence.d.ts +275 -0
  192. package/dist/core/sdd/plugin-evidence.js +307 -0
  193. package/dist/core/sdd/plugin-manifest.d.ts +164 -0
  194. package/dist/core/sdd/plugin-manifest.js +215 -0
  195. package/dist/core/sdd/plugin-policy-pack.d.ts +88 -0
  196. package/dist/core/sdd/plugin-policy-pack.js +236 -0
  197. package/dist/core/sdd/plugin-policy.d.ts +68 -0
  198. package/dist/core/sdd/plugin-policy.js +212 -0
  199. package/dist/core/sdd/plugin-registry.d.ts +311 -0
  200. package/dist/core/sdd/plugin-registry.js +138 -0
  201. package/dist/core/sdd/plugin-skill-binding.d.ts +151 -0
  202. package/dist/core/sdd/plugin-skill-binding.js +339 -0
  203. package/dist/core/sdd/quality-artifact-manifest-validator.d.ts +28 -0
  204. package/dist/core/sdd/quality-artifact-manifest-validator.js +167 -0
  205. package/dist/core/sdd/quality-evidence-renderer.d.ts +65 -0
  206. package/dist/core/sdd/quality-evidence-renderer.js +218 -0
  207. package/dist/core/sdd/quality-scenario-runner.d.ts +42 -0
  208. package/dist/core/sdd/quality-scenario-runner.js +613 -0
  209. package/dist/core/sdd/quality-validation.d.ts +547 -0
  210. package/dist/core/sdd/quality-validation.js +239 -0
  211. package/dist/core/sdd/resolve-project-root.d.ts +2 -2
  212. package/dist/core/sdd/resolve-project-root.js +11 -5
  213. package/dist/core/sdd/sanitize.d.ts +30 -1
  214. package/dist/core/sdd/sanitize.js +23 -23
  215. package/dist/core/sdd/services/agent-run.service.d.ts +65 -0
  216. package/dist/core/sdd/services/agent-run.service.js +189 -0
  217. package/dist/core/sdd/services/breakdown.service.js +2 -1
  218. package/dist/core/sdd/services/context.service.js +18 -16
  219. package/dist/core/sdd/services/debate.service.js +15 -2
  220. package/dist/core/sdd/services/feature-lint.service.d.ts +22 -0
  221. package/dist/core/sdd/services/feature-lint.service.js +105 -5
  222. package/dist/core/sdd/services/finalize.service.d.ts +80 -0
  223. package/dist/core/sdd/services/finalize.service.js +323 -24
  224. package/dist/core/sdd/services/frontend-gap.service.js +22 -7
  225. package/dist/core/sdd/services/governance-control-plane-runtime-adapters.d.ts +17 -0
  226. package/dist/core/sdd/services/governance-control-plane-runtime-adapters.js +38 -0
  227. package/dist/core/sdd/services/governance-control-plane.service.d.ts +66 -0
  228. package/dist/core/sdd/services/governance-control-plane.service.js +134 -0
  229. package/dist/core/sdd/services/ingest-deposito.service.js +1 -1
  230. package/dist/core/sdd/services/legacy-capability.service.d.ts +10 -7
  231. package/dist/core/sdd/services/legacy-capability.service.js +38 -21
  232. package/dist/core/sdd/services/mcp-runtime.service.d.ts +123 -8
  233. package/dist/core/sdd/services/mcp-runtime.service.js +1085 -33
  234. package/dist/core/sdd/services/onboard.service.js +2 -1
  235. package/dist/core/sdd/services/rebuild.service.js +6 -1
  236. package/dist/core/sdd/services/skills-sync.service.d.ts +17 -5
  237. package/dist/core/sdd/services/skills-sync.service.js +55 -2
  238. package/dist/core/sdd/services/start.service.js +6 -4
  239. package/dist/core/sdd/skill-bundles-curation-schema.d.ts +66 -0
  240. package/dist/core/sdd/skill-bundles-curation-schema.js +52 -0
  241. package/dist/core/sdd/skill-evidence.d.ts +19 -0
  242. package/dist/core/sdd/skill-evidence.js +38 -0
  243. package/dist/core/sdd/skill-policy-pool.d.ts +46 -0
  244. package/dist/core/sdd/skill-policy-pool.js +185 -0
  245. package/dist/core/sdd/state.d.ts +22 -0
  246. package/dist/core/sdd/state.js +66 -41
  247. package/dist/core/sdd/structural-health.d.ts +42 -42
  248. package/dist/core/sdd/types.d.ts +33 -7
  249. package/dist/core/sdd/types.js +17 -0
  250. package/dist/core/sdd/upgrade-to-codesdd.d.ts +45 -0
  251. package/dist/core/sdd/upgrade-to-codesdd.js +179 -0
  252. package/dist/core/sdd/workspace-schemas.d.ts +285 -14
  253. package/dist/core/sdd/workspace-schemas.js +148 -0
  254. package/dist/core/sdd/write-manifest.js +22 -4
  255. package/dist/core/shared/skill-generation.d.ts +1 -1
  256. package/dist/core/shared/skill-generation.js +15 -15
  257. package/dist/core/shared/tool-detection.d.ts +3 -3
  258. package/dist/core/shared/tool-detection.js +14 -14
  259. package/dist/core/specs-apply.js +6 -6
  260. package/dist/core/templates/index.d.ts +1 -1
  261. package/dist/core/templates/index.js +1 -1
  262. package/dist/core/templates/workflows/apply-change.js +14 -14
  263. package/dist/core/templates/workflows/archive-change.js +32 -32
  264. package/dist/core/templates/workflows/bulk-archive-change.js +25 -25
  265. package/dist/core/templates/workflows/continue-change.js +12 -12
  266. package/dist/core/templates/workflows/explore.js +29 -29
  267. package/dist/core/templates/workflows/feedback.js +6 -6
  268. package/dist/core/templates/workflows/ff-change.js +24 -24
  269. package/dist/core/templates/workflows/new-change.js +20 -20
  270. package/dist/core/templates/workflows/onboard.js +33 -33
  271. package/dist/core/templates/workflows/propose.js +23 -23
  272. package/dist/core/templates/workflows/sdd.js +8 -8
  273. package/dist/core/templates/workflows/sync-specs.js +19 -19
  274. package/dist/core/templates/workflows/verify-change.js +17 -17
  275. package/dist/core/update.d.ts +2 -2
  276. package/dist/core/update.js +16 -15
  277. package/dist/core/validation/constants.d.ts +1 -1
  278. package/dist/core/validation/constants.js +1 -1
  279. package/dist/core/view.js +11 -11
  280. package/dist/telemetry/config.d.ts +2 -1
  281. package/dist/telemetry/config.js +17 -8
  282. package/dist/telemetry/index.d.ts +10 -2
  283. package/dist/telemetry/index.js +40 -7
  284. package/dist/ui/ascii-patterns.d.ts +2 -2
  285. package/dist/ui/ascii-patterns.js +2 -2
  286. package/dist/ui/welcome-screen.js +2 -2
  287. package/dist/utils/change-metadata.d.ts +4 -4
  288. package/dist/utils/change-metadata.js +6 -6
  289. package/dist/utils/change-utils.d.ts +3 -3
  290. package/dist/utils/change-utils.js +5 -5
  291. package/dist/utils/file-system.js +1 -1
  292. package/dist/utils/interactive.js +1 -1
  293. package/dist/utils/item-discovery.js +4 -4
  294. package/dist/utils/legacy-spec-compat.d.ts +2 -0
  295. package/dist/utils/legacy-spec-compat.js +2 -0
  296. package/dist/utils/shell-detection.d.ts +1 -0
  297. package/dist/utils/shell-detection.js +16 -0
  298. package/package.json +27 -17
  299. package/schemas/sdd/1-spec.schema.json +1 -1
  300. package/schemas/sdd/2-plan.schema.json +73 -1
  301. package/schemas/sdd/3-tasks.schema.json +73 -1
  302. package/schemas/sdd/4-changelog.schema.json +1 -1
  303. package/schemas/sdd/5-quality.schema.json +442 -2
  304. package/schemas/sdd/adr.schema.json +148 -0
  305. package/schemas/sdd/agent-binding-adapter.schema.json +210 -0
  306. package/schemas/sdd/agent-binding-resolution.schema.json +338 -0
  307. package/schemas/sdd/backlog-projection-plan.schema.json +180 -0
  308. package/schemas/sdd/backlog-provider-contract.schema.json +260 -0
  309. package/schemas/sdd/codesdd-plugin.schema.json +474 -0
  310. package/schemas/sdd/debate.schema.json +244 -0
  311. package/schemas/sdd/deepagent-decision-evidence.schema.json +58 -0
  312. package/schemas/sdd/deepagent-env-contract.schema.json +143 -0
  313. package/schemas/sdd/deepagent-quality-evidence.schema.json +108 -0
  314. package/schemas/sdd/deepagent-run-evidence.schema.json +192 -0
  315. package/schemas/sdd/deepagent-run-plan.schema.json +197 -0
  316. package/schemas/sdd/deepagent-run-request.schema.json +321 -0
  317. package/schemas/sdd/deepagent-subagent-evidence.schema.json +110 -0
  318. package/schemas/sdd/deepagent-tool-call-evidence.schema.json +78 -0
  319. package/schemas/sdd/discarded.schema.json +127 -0
  320. package/schemas/sdd/epic.schema.json +147 -0
  321. package/schemas/sdd/insight.schema.json +136 -0
  322. package/schemas/sdd/parallel-feat-automation-plan.schema.json +215 -0
  323. package/schemas/sdd/parallel-feat-automation-request.schema.json +109 -0
  324. package/schemas/sdd/plugin-artifact-manifest.schema.json +150 -0
  325. package/schemas/sdd/plugin-compliance-index.schema.json +136 -0
  326. package/schemas/sdd/plugin-dry-run-plan.schema.json +260 -0
  327. package/schemas/sdd/plugin-evidence-manifest.schema.json +569 -0
  328. package/schemas/sdd/plugin-policy-evaluation.schema.json +92 -0
  329. package/schemas/sdd/plugin-policy-pack-evaluation.schema.json +94 -0
  330. package/schemas/sdd/plugin-policy-pack.schema.json +196 -0
  331. package/schemas/sdd/plugin-registry.schema.json +558 -0
  332. package/schemas/sdd/plugin-rollback-manifest.schema.json +87 -0
  333. package/schemas/sdd/plugin-runtime-invocation-plan.schema.json +845 -0
  334. package/schemas/sdd/plugin-skill-binding-resolution.schema.json +305 -0
  335. package/schemas/sdd/plugin-skill-binding.schema.json +88 -0
  336. package/schemas/sdd/plugin-validation-manifest.schema.json +123 -0
  337. package/schemas/sdd/quality-architecture-schema.schema.json +216 -0
  338. package/schemas/sdd/quality-evidence-bundle.schema.json +1228 -0
  339. package/schemas/sdd/quality-run.schema.json +197 -0
  340. package/schemas/sdd/quality-scenario.schema.json +252 -0
  341. package/schemas/sdd/workspace-catalog.schema.json +9841 -22
  342. package/schemas/spec-driven/schema.yaml +4 -4
  343. package/schemas/spec-driven/templates/proposal.md +1 -1
  344. package/dist/utils/openspec-compat.d.ts +0 -2
  345. package/dist/utils/openspec-compat.js +0 -2
@@ -2,6 +2,7 @@ export interface StructuralLens {
2
2
  artifact_type: string;
3
3
  name: string;
4
4
  required_sections: string[];
5
+ frontmatter_optional_sections?: string[];
5
6
  forbidden_phrases?: string[];
6
7
  section_rules?: Record<string, {
7
8
  min_lines?: number;
@@ -1,8 +1,11 @@
1
+ import { parseGovernanceFile } from './governance-parser.js';
2
+ import { adrFrontmatterSchema, debateFrontmatterSchema, epicFrontmatterSchema, insightFrontmatterSchema, } from './governance-schemas.js';
1
3
  export const LENSES = {
2
4
  insight: {
3
5
  artifact_type: 'INS',
4
6
  name: 'Insight Lens',
5
7
  required_sections: ['## Title', '## Description'],
8
+ frontmatter_optional_sections: ['## Title'],
6
9
  section_rules: {
7
10
  '## Description': { min_length: 100 },
8
11
  },
@@ -23,12 +26,14 @@ export const LENSES = {
23
26
  '## 8) Quality Contract (Required)',
24
27
  '## 9) Output',
25
28
  ],
29
+ frontmatter_optional_sections: ['- Choice (A/B/C):'],
26
30
  forbidden_phrases: ['(fill in', 'Describe the result'],
27
31
  },
28
32
  epic: {
29
33
  artifact_type: 'EPIC',
30
34
  name: 'Epic Lens',
31
35
  required_sections: ['## Origin', '## Approved Summary', '## Status'],
36
+ frontmatter_optional_sections: ['## Origin', '## Status'],
32
37
  forbidden_phrases: ['(fill in approved summary)'],
33
38
  },
34
39
  adr: {
@@ -61,8 +66,31 @@ function extractFromLines(lines, startIndex) {
61
66
  return contentLines.join('\n').trim();
62
67
  }
63
68
  export function validateDocumentAgainstLens(content, lens) {
64
- const missing = lens.required_sections.filter((section) => !content.includes(section));
69
+ const hasFrontmatter = /^---\r?\n[\s\S]*?\r?\n---\r?\n/.test(content);
70
+ const effectiveSections = hasFrontmatter && lens.frontmatter_optional_sections
71
+ ? lens.required_sections.filter((section) => !lens.frontmatter_optional_sections?.includes(section))
72
+ : lens.required_sections;
73
+ const missing = effectiveSections.filter((section) => !content.includes(section));
65
74
  const violations = [...missing];
75
+ if (hasFrontmatter) {
76
+ try {
77
+ if (lens.artifact_type === 'INS') {
78
+ parseGovernanceFile('lens-inline-content', content, insightFrontmatterSchema);
79
+ }
80
+ else if (lens.artifact_type === 'DEB') {
81
+ parseGovernanceFile('lens-inline-content', content, debateFrontmatterSchema);
82
+ }
83
+ else if (lens.artifact_type === 'EPIC') {
84
+ parseGovernanceFile('lens-inline-content', content, epicFrontmatterSchema);
85
+ }
86
+ else if (lens.artifact_type === 'ADR') {
87
+ parseGovernanceFile('lens-inline-content', content, adrFrontmatterSchema);
88
+ }
89
+ }
90
+ catch (error) {
91
+ violations.push(error instanceof Error ? error.message : String(error));
92
+ }
93
+ }
66
94
  if (lens.forbidden_phrases) {
67
95
  for (const phrase of lens.forbidden_phrases) {
68
96
  if (content.includes(phrase)) {
@@ -2,6 +2,7 @@ import path from 'node:path';
2
2
  import { existsSync, promises as fs } from 'node:fs';
3
3
  import { stringify as stringifyYaml } from 'yaml';
4
4
  import { loadProjectSddConfig, resolveSddPaths } from './state.js';
5
+ import { normalizeFeatRef } from './entity-reference.js';
5
6
  import { workspaceChangelogSchema, workspacePlanSchema, workspaceQualitySchema, workspaceSpecSchema, workspaceTasksSchema, } from './workspace-schemas.js';
6
7
  const MIGRATION_MARKER = '# MIGRATION: field required but source had no content';
7
8
  const CANONICAL_DOCS = [
@@ -18,9 +19,10 @@ const CANONICAL_DOCS = [
18
19
  export async function findMarkdownWorkspaceFiles(projectRoot, feat) {
19
20
  const config = await loadProjectSddConfig(projectRoot);
20
21
  const paths = resolveSddPaths(projectRoot, config);
22
+ const featFilter = feat ? normalizeFeatRef(feat) ?? feat.trim() : undefined;
21
23
  const files = [];
22
24
  for (const root of [paths.plannedDir, paths.activeDir, paths.archivedDir]) {
23
- for (const workspace of await listFeatureWorkspaces(root, feat)) {
25
+ for (const workspace of await listFeatureWorkspaces(root, featFilter)) {
24
26
  const entries = await fs.readdir(workspace.path, { withFileTypes: true }).catch(() => []);
25
27
  for (const entry of entries) {
26
28
  if (!entry.isFile() || path.extname(entry.name) !== '.md')
@@ -38,13 +40,14 @@ export class MigrateWorkspaceCommand {
38
40
  const config = await loadProjectSddConfig(projectRoot);
39
41
  const paths = resolveSddPaths(projectRoot, config);
40
42
  const dryRun = Boolean(options?.dryRun);
43
+ const featFilter = options?.feat ? normalizeFeatRef(options.feat) ?? options.feat.trim() : undefined;
41
44
  const features = [];
42
45
  for (const [rootName, rootPath] of [
43
46
  ['planned', paths.plannedDir],
44
47
  ['active', paths.activeDir],
45
48
  ['archived', paths.archivedDir],
46
49
  ]) {
47
- for (const workspace of await listFeatureWorkspaces(rootPath, options?.feat)) {
50
+ for (const workspace of await listFeatureWorkspaces(rootPath, featFilter)) {
48
51
  const fileResults = [];
49
52
  const entries = await fs.readdir(workspace.path, { withFileTypes: true }).catch(() => []);
50
53
  for (const entry of entries) {
@@ -272,6 +275,7 @@ function migrateQuality(featureId, parsed) {
272
275
  })),
273
276
  skill_evidence: {
274
277
  required_skill_ids: [],
278
+ policy_requirements: [],
275
279
  evidence: [],
276
280
  verification_rule: 'No skill evidence required for migrated legacy workspaces.',
277
281
  },
@@ -282,6 +286,15 @@ function migrateQuality(featureId, parsed) {
282
286
  evidence: evidence.join('; ') || `${MIGRATION_MARKER}: quality evidence`,
283
287
  },
284
288
  ],
289
+ requirement_validation_evidence_risk_matrix: [
290
+ {
291
+ requirement_ref: `${featureId}-MIG-R1`,
292
+ validation_refs: ['Migrated validation'],
293
+ evidence_refs: evidence.length > 0 ? evidence : [`${MIGRATION_MARKER}: quality evidence`],
294
+ residual_risk: 'Residual risk migrated from legacy workspace and requires follow-up review.',
295
+ risk_status: 'open',
296
+ },
297
+ ],
285
298
  exceptions: [],
286
299
  remediation_policy: { on_coverage_miss: 'block', max_rounds: 3 },
287
300
  traceability: {
@@ -291,6 +304,47 @@ function migrateQuality(featureId, parsed) {
291
304
  },
292
305
  requirements: [],
293
306
  },
307
+ q95_ledger: {
308
+ threshold: 95,
309
+ score: 0,
310
+ status: 'pending',
311
+ computed_at: '',
312
+ weights: {
313
+ coverage: 30,
314
+ traceability: 20,
315
+ integrity: 20,
316
+ naming: 10,
317
+ token: 20,
318
+ },
319
+ axes: {
320
+ coverage: {
321
+ raw_score: 0,
322
+ weighted_score: 0,
323
+ rationale: 'Computed during finalize.',
324
+ },
325
+ traceability: {
326
+ raw_score: 0,
327
+ weighted_score: 0,
328
+ rationale: 'Computed during finalize.',
329
+ },
330
+ integrity: {
331
+ raw_score: 0,
332
+ weighted_score: 0,
333
+ rationale: 'Computed during finalize.',
334
+ },
335
+ naming: {
336
+ raw_score: 0,
337
+ weighted_score: 0,
338
+ rationale: 'Computed during finalize.',
339
+ },
340
+ token: {
341
+ raw_score: 0,
342
+ weighted_score: 0,
343
+ rationale: 'Computed during finalize.',
344
+ },
345
+ },
346
+ next_best_action: 'Record missing evidence to raise the lowest weighted axis.',
347
+ },
294
348
  };
295
349
  return withValidation('5-quality.yaml', doc, missing, workspaceQualitySchema);
296
350
  }
@@ -1,4 +1,4 @@
1
- export declare const CURRENT_SDD_STATE_VERSION = 2;
1
+ export { CURRENT_SDD_STATE_VERSION } from './contract.js';
2
2
  export interface SddMigrationAssessment {
3
3
  currentVersion: number;
4
4
  targetVersion: number;
@@ -2,10 +2,11 @@ import path from 'node:path';
2
2
  import { promises as fs } from 'node:fs';
3
3
  import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
4
4
  import { CLI_NAME, } from '../branding.js';
5
+ import { CURRENT_SDD_STATE_VERSION, buildSddContractConfig, sddContractMismatchReasons, } from './contract.js';
5
6
  import { findMarkdownWorkspaceFiles, MigrateWorkspaceCommand } from './migrate-workspace.js';
6
7
  import { loadProjectSddConfig, loadStateSnapshot, resolveSddPaths, saveBacklogState, saveDiscoveryIndexState, saveFinalizeQueueState, saveFrontendDecisionsState, saveFrontendGapsState, saveFrontendMapState, saveIntegrationContractsState, saveRepoMapState, saveServiceCatalogState, saveSourceIndexState, saveTechDebtState, saveTechStackState, saveUnblockEventsState, } from './state.js';
7
8
  import { runLifecycleHooks } from './domain/lifecycle-hooks.js';
8
- export const CURRENT_SDD_STATE_VERSION = 2;
9
+ export { CURRENT_SDD_STATE_VERSION } from './contract.js';
9
10
  const ID_PREFIXES = new Set(['INS', 'DEB', 'RAD', 'EPIC', 'FEAT', 'FGAP', 'TD', 'SRC']);
10
11
  const REFERENCE_LIKE_VALUE = /\b(?:INS|DEB|RAD|EPIC|FEAT|FGAP|TD|SRC)-\d+\b/;
11
12
  const MIGRATABLE_FILE_EXTENSIONS = new Set(['.md', '.yaml', '.yml', '.txt']);
@@ -83,6 +84,21 @@ async function readStateConfigVersion(configPath) {
83
84
  return 1;
84
85
  }
85
86
  }
87
+ async function readStateConfig(configPath) {
88
+ try {
89
+ const parsed = parseYaml(await fs.readFile(configPath, 'utf-8'));
90
+ return parsed && typeof parsed === 'object' ? parsed : {};
91
+ }
92
+ catch {
93
+ return {};
94
+ }
95
+ }
96
+ const LEGACY_GENERATED_BY_PREFIXES = [`${'open'}sdd`, `${'open'}spec`];
97
+ function isLegacyGeneratedBy(value) {
98
+ if (typeof value !== 'string')
99
+ return false;
100
+ return LEGACY_GENERATED_BY_PREFIXES.some((prefix) => new RegExp(`^${prefix}\\s`, 'i').test(value));
101
+ }
86
102
  async function writeStateConfigVersion(configPath) {
87
103
  let payload = {};
88
104
  try {
@@ -95,8 +111,12 @@ async function writeStateConfigVersion(configPath) {
95
111
  payload = {};
96
112
  }
97
113
  payload.version = 1;
98
- payload.generatedBy = payload.generatedBy || `${CLI_NAME} sdd init`;
114
+ payload.generatedBy =
115
+ typeof payload.generatedBy === 'string' && !isLegacyGeneratedBy(payload.generatedBy)
116
+ ? payload.generatedBy
117
+ : `${CLI_NAME} sdd migrate`;
99
118
  payload.state_version = CURRENT_SDD_STATE_VERSION;
119
+ payload.sdd_contract = buildSddContractConfig();
100
120
  payload.last_migrated_at = new Date().toISOString();
101
121
  await fs.writeFile(configPath, stringifyYaml(payload), 'utf-8');
102
122
  }
@@ -199,6 +219,7 @@ export async function assessSddMigration(projectRoot) {
199
219
  const paths = resolveSddPaths(projectRoot, config);
200
220
  const snapshot = await loadStateSnapshot(paths, config);
201
221
  const currentVersion = await readStateConfigVersion(paths.configFile);
222
+ const rawConfig = await readStateConfig(paths.configFile);
202
223
  const conversions = new Map();
203
224
  collectReferenceConversions(snapshot.discoveryIndex, conversions);
204
225
  collectReferenceConversions(snapshot.backlog, conversions);
@@ -223,6 +244,16 @@ export async function assessSddMigration(projectRoot) {
223
244
  if (currentVersion < CURRENT_SDD_STATE_VERSION) {
224
245
  reasons.push(`state_version=${currentVersion} esta abaixo da versao requerida ${CURRENT_SDD_STATE_VERSION}`);
225
246
  }
247
+ if (currentVersion > CURRENT_SDD_STATE_VERSION) {
248
+ reasons.push(`state_version=${currentVersion} esta acima da versao suportada ${CURRENT_SDD_STATE_VERSION}`);
249
+ }
250
+ const contractReasons = sddContractMismatchReasons(rawConfig.sdd_contract);
251
+ if (contractReasons.length > 0) {
252
+ reasons.push(`sdd_contract desalinhado: ${contractReasons.join(', ')}`);
253
+ }
254
+ if (isLegacyGeneratedBy(rawConfig.generatedBy)) {
255
+ reasons.push('generatedBy ainda usa identidade legacy pre-CodeSDD');
256
+ }
226
257
  if (legacyRecords.length > 0) {
227
258
  reasons.push(`registros legacy detectados: ${legacyRecords.join(', ')}`);
228
259
  }
@@ -260,6 +291,9 @@ export class SddMigrateCommand {
260
291
  messages.push(`Estado SDD ja esta na versao ${assessment.targetVersion}. Nenhuma migracao necessaria.`);
261
292
  return { converted: 0, messages, assessment };
262
293
  }
294
+ if (assessment.currentVersion > assessment.targetVersion) {
295
+ throw new Error(`Estado SDD state_version=${assessment.currentVersion} esta acima da versao suportada ${assessment.targetVersion}. Atualize o CodeSDD antes de executar migracao ou comandos SDD.`);
296
+ }
263
297
  if (options?.radToEpic === false) {
264
298
  throw new Error('Migracao SDD mandatória nao pode ser desabilitada.');
265
299
  }
@@ -0,0 +1,83 @@
1
+ import { z } from 'zod';
2
+ export declare const DerivationProfileSchema: z.ZodEnum<{
3
+ prototype: "prototype";
4
+ "foundation-compatible": "foundation-compatible";
5
+ "enterprise-strict": "enterprise-strict";
6
+ }>;
7
+ export declare const PreviewGateStatusSchema: z.ZodEnum<{
8
+ pending: "pending";
9
+ approved: "approved";
10
+ corrected: "corrected";
11
+ rejected: "rejected";
12
+ }>;
13
+ export declare const PackageStructureNodeKindSchema: z.ZodEnum<{
14
+ file: "file";
15
+ dir: "dir";
16
+ }>;
17
+ export declare const PackageStructureNodeSchema: z.ZodSchema<PackageStructureNode>;
18
+ export declare const PackageStructurePreviewSchema: z.ZodObject<{
19
+ schema_version: z.ZodLiteral<1>;
20
+ generated_at: z.ZodString;
21
+ project_name: z.ZodString;
22
+ profile: z.ZodEnum<{
23
+ prototype: "prototype";
24
+ "foundation-compatible": "foundation-compatible";
25
+ "enterprise-strict": "enterprise-strict";
26
+ }>;
27
+ contexts: z.ZodArray<z.ZodString>;
28
+ subsystems: z.ZodArray<z.ZodString>;
29
+ transports: z.ZodArray<z.ZodString>;
30
+ tree: z.ZodType<PackageStructureNode, unknown, z.core.$ZodTypeInternals<PackageStructureNode, unknown>>;
31
+ }, z.core.$strip>;
32
+ export declare const HumanValidationGateSchema: z.ZodObject<{
33
+ gate_id: z.ZodString;
34
+ rule_ref: z.ZodLiteral<"DTAPI-P0-PREVIEW-001">;
35
+ status: z.ZodEnum<{
36
+ pending: "pending";
37
+ approved: "approved";
38
+ corrected: "corrected";
39
+ rejected: "rejected";
40
+ }>;
41
+ preview_ref: z.ZodString;
42
+ approved_at: z.ZodOptional<z.ZodString>;
43
+ approved_by: z.ZodOptional<z.ZodString>;
44
+ correction_notes: z.ZodOptional<z.ZodString>;
45
+ exception_refs: z.ZodDefault<z.ZodArray<z.ZodString>>;
46
+ }, z.core.$strip>;
47
+ export interface HumanValidationGateData {
48
+ selected_profile: z.infer<typeof DerivationProfileSchema>;
49
+ package_preview: z.infer<typeof PackageStructurePreviewSchema>;
50
+ human_validation_gate: z.infer<typeof HumanValidationGateSchema>;
51
+ exception_list: Array<{
52
+ adr_ref: string;
53
+ reason: string;
54
+ severity: string;
55
+ }>;
56
+ policy_pool_seed: string[];
57
+ }
58
+ export interface DebGateInput {
59
+ project_name: string;
60
+ profile?: z.infer<typeof DerivationProfileSchema>;
61
+ contexts?: string[];
62
+ subsystems?: string[];
63
+ transports?: string[];
64
+ generated_at?: string;
65
+ }
66
+ export declare function generatePackageStructurePreview(input: DebGateInput): z.infer<typeof PackageStructurePreviewSchema>;
67
+ export declare function formatPreviewAsTree(node: z.infer<typeof PackageStructureNodeSchema>, prefix?: string): string;
68
+ export declare function buildHumanValidationGate(preview: z.infer<typeof PackageStructurePreviewSchema>): z.infer<typeof HumanValidationGateSchema>;
69
+ export declare function generateDevtrackApiDebGate(input: DebGateInput): HumanValidationGateData;
70
+ export declare function isGatePending(gate: z.infer<typeof HumanValidationGateSchema>): boolean;
71
+ export declare function isGateApproved(gate: z.infer<typeof HumanValidationGateSchema>): boolean;
72
+ export type DerivationProfile = z.infer<typeof DerivationProfileSchema>;
73
+ export type PreviewGateStatus = z.infer<typeof PreviewGateStatusSchema>;
74
+ export type PackageStructureNodeKind = z.infer<typeof PackageStructureNodeKindSchema>;
75
+ export type PackageStructureNode = {
76
+ name: string;
77
+ kind: PackageStructureNodeKind;
78
+ description?: string;
79
+ children?: PackageStructureNode[];
80
+ };
81
+ export type PackageStructurePreview = z.infer<typeof PackageStructurePreviewSchema>;
82
+ export type HumanValidationGate = z.infer<typeof HumanValidationGateSchema>;
83
+ //# sourceMappingURL=package-structure-gate.d.ts.map