@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
@@ -2,6 +2,7 @@ import path from "node:path";
2
2
  import { CLI_NAME } from "../../branding.js";
3
3
  import { loadStateSnapshot } from "../state.js";
4
4
  import { bundlesForSkills, getRuntime, relProjectPath, coreDocRef, planningDocRef, resolveActiveDocRefs } from "../legacy-operations.js";
5
+ import { normalizeSddEntityRef } from "../entity-reference.js";
5
6
  import { ContextService } from "./context.service.js";
6
7
  import { NextService } from "./next.service.js";
7
8
  export class OnboardService {
@@ -12,7 +13,7 @@ export class OnboardService {
12
13
  async execute(projectRoot, target = 'system', options) {
13
14
  const { config, paths } = await getRuntime(projectRoot);
14
15
  const snapshot = await loadStateSnapshot(paths, config);
15
- const normalized = (target || 'system').trim();
16
+ const normalized = normalizeSddEntityRef(target || 'system');
16
17
  const contextCmd = new ContextService(this.stores);
17
18
  const baseReadOrder = [
18
19
  'README.md',
@@ -6,6 +6,7 @@ import { BacklogStateSchema, DiscoveryIndexStateSchema, } from '../types.js';
6
6
  import { activeDocNamesForLayout, buildBacklogItem, computeCanonicalTitle, ensureFeatureQualityContract, ensureMemoryInitialized, relProjectPath, } from '../legacy-operations.js';
7
7
  import { renderViews } from '../views.js';
8
8
  import { parseWorkspaceYamlDocument, } from '../workspace-schemas.js';
9
+ import { parseGovernanceFile } from '../governance-parser.js';
9
10
  const DISCOVERY_STATUSES = new Set([
10
11
  'NEW',
11
12
  'DEBATED',
@@ -78,6 +79,10 @@ function discoveryStatusFromMarkdown(content, type, discarded) {
78
79
  return 'READY';
79
80
  }
80
81
  function titleFromMarkdown(content, id, fileName) {
82
+ const parsed = parseGovernanceFile(fileName, content);
83
+ const frontmatterTitle = parsed.frontmatter && typeof parsed.frontmatter === 'object' && typeof parsed.frontmatter.title === 'string'
84
+ ? parsed.frontmatter.title
85
+ : '';
81
86
  const titleBlock = /^## Title\s*\n+(.+)$/im.exec(content);
82
87
  const baseTitle = /^\s*-\s*Base title:\s*(.+)$/im.exec(content);
83
88
  const heading = /^#\s+(.+)$/m.exec(content);
@@ -86,7 +91,7 @@ function titleFromMarkdown(content, id, fileName) {
86
91
  .replace(new RegExp(`^${id}-?`, 'i'), '')
87
92
  .replace(/-/g, ' ')
88
93
  .trim();
89
- const candidate = (titleBlock?.[1] || baseTitle?.[1] || heading?.[1] || slugTitle || id).trim();
94
+ const candidate = (frontmatterTitle || titleBlock?.[1] || baseTitle?.[1] || heading?.[1] || slugTitle || id).trim();
90
95
  const cleaned = candidate
91
96
  .replace(new RegExp(`^(Insight|Debate|Epic)\\s+${id}\\s*:?\\s*`, 'i'), '')
92
97
  .trim();
@@ -0,0 +1,6 @@
1
+ import { type SemanticIntentClassification, type SemanticIntentClassifierInput } from '../domain/semantic-intent-classifier.js';
2
+ export type SemanticIntentClassifierServiceResult = SemanticIntentClassification;
3
+ export declare class SemanticIntentClassifierService {
4
+ execute(input: SemanticIntentClassifierInput): SemanticIntentClassifierServiceResult;
5
+ }
6
+ //# sourceMappingURL=semantic-intent-classifier.service.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { classifySemanticIntent, } from '../domain/semantic-intent-classifier.js';
2
+ export class SemanticIntentClassifierService {
3
+ execute(input) {
4
+ return classifySemanticIntent(input);
5
+ }
6
+ }
7
+ //# sourceMappingURL=semantic-intent-classifier.service.js.map
@@ -1,4 +1,19 @@
1
1
  import { SddStores } from "../store/sdd-stores.js";
2
+ type SkillManifestDriftLayer = 'canonical' | 'user-extension';
3
+ type SkillManifestDriftStatus = 'missing' | 'modified';
4
+ export interface SkillManifestDriftAlert {
5
+ skill_id: string;
6
+ layer: SkillManifestDriftLayer;
7
+ status: SkillManifestDriftStatus;
8
+ expected_sha256?: string;
9
+ observed_sha256: string;
10
+ }
11
+ export interface SkillsSyncResult {
12
+ synced: number;
13
+ local_synced: number;
14
+ tools: string[];
15
+ alerts: SkillManifestDriftAlert[];
16
+ }
2
17
  export declare class SkillsSyncService {
3
18
  private readonly stores;
4
19
  constructor(stores: SddStores);
@@ -6,10 +21,7 @@ export declare class SkillsSyncService {
6
21
  bundles?: string[];
7
22
  all?: boolean;
8
23
  tools?: string[];
9
- }): Promise<{
10
- synced: number;
11
- local_synced: number;
12
- tools: string[];
13
- }>;
24
+ }): Promise<SkillsSyncResult>;
14
25
  }
26
+ export {};
15
27
  //# sourceMappingURL=skills-sync.service.d.ts.map
@@ -3,9 +3,31 @@ import { promises as fs } from "node:fs";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { AI_TOOLS } from "../../config.js";
5
5
  import { loadSkillCatalogState } from "../state.js";
6
+ import { DEFAULT_CURATED_SKILL_CATALOG, computeSkillManifestSha256 } from "../default-skills.js";
6
7
  import { getRuntime, buildCuratedSkillContent } from "../legacy-operations.js";
7
8
  import { SddWriteTransaction } from "../write-manifest.js";
8
9
  const PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../../');
10
+ const ZERO_HASH = '0000000000000000000000000000000000000000000000000000000000000000';
11
+ const CANONICAL_SKILL_IDS = new Set(DEFAULT_CURATED_SKILL_CATALOG.skills.map((entry) => entry.id));
12
+ function normalizeIntegrityHash(hash) {
13
+ if (!hash) {
14
+ return undefined;
15
+ }
16
+ const normalized = hash.trim().toLowerCase();
17
+ if (!/^[a-f0-9]{64}$/.test(normalized)) {
18
+ return undefined;
19
+ }
20
+ if (normalized === ZERO_HASH) {
21
+ return undefined;
22
+ }
23
+ return normalized;
24
+ }
25
+ function isCanonicalCriticalSkill(entry) {
26
+ if (entry.deterministic_pair) {
27
+ return true;
28
+ }
29
+ return entry.bundle_ids.includes('architecture-backend');
30
+ }
9
31
  function isInside(parent, child) {
10
32
  const relative = path.relative(parent, child);
11
33
  return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
@@ -78,9 +100,35 @@ export class SkillsSyncService {
78
100
  });
79
101
  await fs.mkdir(paths.skillsCuratedDir, { recursive: true });
80
102
  const contentBySkillId = new Map();
103
+ const driftAlerts = [];
104
+ const criticalCanonicalDrift = [];
81
105
  for (const entry of selected) {
82
106
  const content = await resolveCuratedSkillContent(paths, entry);
107
+ const observedHash = computeSkillManifestSha256(content);
108
+ const expectedHash = normalizeIntegrityHash(entry.integrity_hash);
109
+ if (!expectedHash || expectedHash !== observedHash) {
110
+ const alert = {
111
+ skill_id: entry.id,
112
+ layer: CANONICAL_SKILL_IDS.has(entry.id) ? 'canonical' : 'user-extension',
113
+ status: expectedHash ? 'modified' : 'missing',
114
+ expected_sha256: expectedHash,
115
+ observed_sha256: observedHash,
116
+ };
117
+ driftAlerts.push(alert);
118
+ if (alert.layer === 'canonical' && isCanonicalCriticalSkill(entry)) {
119
+ criticalCanonicalDrift.push(alert);
120
+ }
121
+ }
83
122
  contentBySkillId.set(entry.id, content);
123
+ }
124
+ if (criticalCanonicalDrift.length > 0) {
125
+ const details = criticalCanonicalDrift
126
+ .map((alert) => `- ${alert.skill_id}: ${alert.status} (expected=${alert.expected_sha256 || '<missing>'}, observed=${alert.observed_sha256})`)
127
+ .join('\n');
128
+ throw new Error(`Skill manifest drift detected in canonical layer. Sync blocked until canonical hashes are restored.\n${details}`);
129
+ }
130
+ for (const entry of selected) {
131
+ const content = contentBySkillId.get(entry.id) || await resolveCuratedSkillContent(paths, entry);
84
132
  await materializeLocalSourceSkill(paths, entry, content);
85
133
  const tx = new SddWriteTransaction();
86
134
  const localDir = path.join(paths.skillsCuratedDir, entry.id);
@@ -88,7 +136,7 @@ export class SkillsSyncService {
88
136
  await tx.commit(paths.projectRoot, paths.memoryRoot, 'skills-sync.service (local dir)');
89
137
  }
90
138
  if (selected.length === 0) {
91
- return { synced: 0, local_synced: 0, tools: [] };
139
+ return { synced: 0, local_synced: 0, tools: [], alerts: [] };
92
140
  }
93
141
  const targetTools = (options?.tools && options.tools.length > 0
94
142
  ? AI_TOOLS.filter((tool) => options.tools?.includes(tool.value))
@@ -111,7 +159,12 @@ export class SkillsSyncService {
111
159
  }
112
160
  syncedTools.push(tool.value);
113
161
  }
114
- return { synced: selected.length, local_synced: selected.length, tools: syncedTools };
162
+ return {
163
+ synced: selected.length,
164
+ local_synced: selected.length,
165
+ tools: syncedTools,
166
+ alerts: driftAlerts.filter((alert) => alert.layer === 'user-extension' || !criticalCanonicalDrift.some((critical) => critical.skill_id === alert.skill_id)),
167
+ };
115
168
  }
116
169
  }
117
170
  //# sourceMappingURL=skills-sync.service.js.map
@@ -9,6 +9,7 @@ import { slugify, findDiscoveryRecord, ensureFeatureQualityContract, bundlesForS
9
9
  import { SddWriteTransaction } from "../write-manifest.js";
10
10
  import { withStateLock } from "../state-lock.js";
11
11
  import { featureDeclaresMandatoryAdrImpact } from "../adr-policy.js";
12
+ import { normalizeFeatRef } from "../entity-reference.js";
12
13
  export class StartService {
13
14
  stores;
14
15
  constructor(stores) {
@@ -25,8 +26,9 @@ export class StartService {
25
26
  const catalog = await loadSkillCatalogState(paths);
26
27
  const now = nowIso();
27
28
  let feature;
28
- if (/^FEAT-\d{3,}$/.test(value)) {
29
- feature = resolveFeat(snapshot.backlog.items, value);
29
+ const normalizedFeatureRef = normalizeFeatRef(value);
30
+ if (normalizedFeatureRef || /^FEAT-\d{3,}$/.test(value)) {
31
+ feature = resolveFeat(snapshot.backlog.items, normalizedFeatureRef || value);
30
32
  }
31
33
  else if (/^(?:RAD|EPIC)-\d{3,}$/.test(value)) {
32
34
  const existing = snapshot.backlog.items.find((item) => (item.origin_type === 'radar' || item.origin_type === 'epic') && item.origin_ref === value);
@@ -90,8 +92,8 @@ export class StartService {
90
92
  if (!feature.change_name) {
91
93
  const base = slugify(`${feature.id}-${feature.title}`).slice(0, 50).replace(/-+$/g, '') ||
92
94
  feature.id.toLowerCase();
93
- // OpenSDD-native execution keeps this as a compatibility identifier only.
94
- // It must not materialize legacy OpenSpec change directories.
95
+ // CodeSDD-native execution keeps this as a compatibility identifier only.
96
+ // It must not materialize legacy CodeSDD change directories.
95
97
  feature.change_name = base;
96
98
  }
97
99
  await runLifecycleHooks('before-start', {
@@ -0,0 +1,66 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Schema for the curated skill-bundles document emitted as a Markdown view
4
+ * (`curation-en-us.md` / `curadoria-pt-br.md`) AND as canonical YAML
5
+ * (`curation-en-us.yaml` / `curadoria-pt-br.yaml`).
6
+ *
7
+ * EPIC-0072 wave 1 (FEAT-0284) introduces this YAML form as the precursor
8
+ * that validates the toolchain choice (`yaml` + `zod` without `gray-matter`)
9
+ * before the rest of the governance plane migrates to frontmatter + body.
10
+ *
11
+ * The Markdown form remains generated for human readability and is treated
12
+ * as a derived view; the YAML form is the structured contract.
13
+ */
14
+ export declare const skillBundleEntrySchema: z.ZodObject<{
15
+ id: z.ZodString;
16
+ title: z.ZodString;
17
+ skill_ids: z.ZodArray<z.ZodString>;
18
+ }, z.core.$strip>;
19
+ export declare const highlightedSkillSchema: z.ZodObject<{
20
+ skill_id: z.ZodString;
21
+ bundle_id: z.ZodString;
22
+ canonical_path: z.ZodString;
23
+ notes: z.ZodDefault<z.ZodArray<z.ZodString>>;
24
+ }, z.core.$strip>;
25
+ export declare const skillBundlesCurationSchema: z.ZodObject<{
26
+ schema_version: z.ZodLiteral<1>;
27
+ layout: z.ZodEnum<{
28
+ "pt-BR": "pt-BR";
29
+ "en-US": "en-US";
30
+ }>;
31
+ generated_from: z.ZodLiteral<"CURATED_BUNDLES">;
32
+ objective: z.ZodArray<z.ZodString>;
33
+ bundles: z.ZodArray<z.ZodObject<{
34
+ id: z.ZodString;
35
+ title: z.ZodString;
36
+ skill_ids: z.ZodArray<z.ZodString>;
37
+ }, z.core.$strip>>;
38
+ highlighted: z.ZodDefault<z.ZodArray<z.ZodObject<{
39
+ skill_id: z.ZodString;
40
+ bundle_id: z.ZodString;
41
+ canonical_path: z.ZodString;
42
+ notes: z.ZodDefault<z.ZodArray<z.ZodString>>;
43
+ }, z.core.$strip>>>;
44
+ canonical_source: z.ZodString;
45
+ operational_rule: z.ZodArray<z.ZodString>;
46
+ }, z.core.$strip>;
47
+ export type SkillBundlesCuration = z.infer<typeof skillBundlesCurationSchema>;
48
+ export type SkillBundleEntry = z.infer<typeof skillBundleEntrySchema>;
49
+ export type HighlightedSkill = z.infer<typeof highlightedSkillSchema>;
50
+ /**
51
+ * Parses an arbitrary value (typically loaded from YAML) into a typed
52
+ * curation document. Throws a Zod error on schema violation; callers should
53
+ * surface the error with path-aware context.
54
+ */
55
+ export declare function parseSkillBundlesCuration(value: unknown): SkillBundlesCuration;
56
+ /**
57
+ * Non-throwing variant for callers that prefer to handle errors explicitly.
58
+ */
59
+ export declare function safeParseSkillBundlesCuration(value: unknown): {
60
+ ok: true;
61
+ data: SkillBundlesCuration;
62
+ } | {
63
+ ok: false;
64
+ error: z.ZodError<SkillBundlesCuration>;
65
+ };
66
+ //# sourceMappingURL=skill-bundles-curation-schema.d.ts.map
@@ -0,0 +1,52 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Schema for the curated skill-bundles document emitted as a Markdown view
4
+ * (`curation-en-us.md` / `curadoria-pt-br.md`) AND as canonical YAML
5
+ * (`curation-en-us.yaml` / `curadoria-pt-br.yaml`).
6
+ *
7
+ * EPIC-0072 wave 1 (FEAT-0284) introduces this YAML form as the precursor
8
+ * that validates the toolchain choice (`yaml` + `zod` without `gray-matter`)
9
+ * before the rest of the governance plane migrates to frontmatter + body.
10
+ *
11
+ * The Markdown form remains generated for human readability and is treated
12
+ * as a derived view; the YAML form is the structured contract.
13
+ */
14
+ export const skillBundleEntrySchema = z.object({
15
+ id: z.string().min(1),
16
+ title: z.string().min(1),
17
+ skill_ids: z.array(z.string().min(1)).min(1),
18
+ });
19
+ export const highlightedSkillSchema = z.object({
20
+ skill_id: z.string().min(1),
21
+ bundle_id: z.string().min(1),
22
+ canonical_path: z.string().min(1),
23
+ notes: z.array(z.string().min(1)).default([]),
24
+ });
25
+ export const skillBundlesCurationSchema = z.object({
26
+ schema_version: z.literal(1),
27
+ layout: z.enum(['en-US', 'pt-BR']),
28
+ generated_from: z.literal('CURATED_BUNDLES'),
29
+ objective: z.array(z.string().min(1)).min(1),
30
+ bundles: z.array(skillBundleEntrySchema).min(1),
31
+ highlighted: z.array(highlightedSkillSchema).default([]),
32
+ canonical_source: z.string().min(1),
33
+ operational_rule: z.array(z.string().min(1)).min(1),
34
+ });
35
+ /**
36
+ * Parses an arbitrary value (typically loaded from YAML) into a typed
37
+ * curation document. Throws a Zod error on schema violation; callers should
38
+ * surface the error with path-aware context.
39
+ */
40
+ export function parseSkillBundlesCuration(value) {
41
+ return skillBundlesCurationSchema.parse(value);
42
+ }
43
+ /**
44
+ * Non-throwing variant for callers that prefer to handle errors explicitly.
45
+ */
46
+ export function safeParseSkillBundlesCuration(value) {
47
+ const result = skillBundlesCurationSchema.safeParse(value);
48
+ if (result.success)
49
+ return { ok: true, data: result.data };
50
+ return { ok: false, error: result.error };
51
+ }
52
+ //# sourceMappingURL=skill-bundles-curation-schema.js.map
@@ -0,0 +1,19 @@
1
+ import type { SkillCatalogEntry } from './types.js';
2
+ import type { WorkspacePolicyRequirement } from './skill-policy-pool.js';
3
+ export interface SkillEvidenceEntry {
4
+ skill_id: string;
5
+ note: string;
6
+ source: 'manual' | 'tooling' | 'quality_artifact';
7
+ }
8
+ export interface SkillProvenanceInfo {
9
+ skill_id: string;
10
+ source_repo: string | null;
11
+ source_path: string | null;
12
+ integrity_hash: string;
13
+ synced_at: string;
14
+ }
15
+ export declare function buildSkillProvenanceRecord(skillId: string, catalog: SkillCatalogEntry[], syncedAt?: string): SkillProvenanceInfo | null;
16
+ export declare function buildSkillEvidenceEntry(skillId: string, note: string, source?: 'manual' | 'tooling' | 'quality_artifact'): SkillEvidenceEntry;
17
+ export declare function buildProvenanceEvidenceFromCatalog(skillIds: string[], catalog: SkillCatalogEntry[]): SkillEvidenceEntry[];
18
+ export declare function buildAppliedPolicyEvidence(policyRequirements: WorkspacePolicyRequirement[], policiesApplied?: Record<string, string>): SkillEvidenceEntry[];
19
+ //# sourceMappingURL=skill-evidence.d.ts.map
@@ -0,0 +1,38 @@
1
+ export function buildSkillProvenanceRecord(skillId, catalog, syncedAt) {
2
+ const entry = catalog.find((s) => s.id === skillId);
3
+ if (!entry)
4
+ return null;
5
+ return {
6
+ skill_id: entry.id,
7
+ source_repo: entry.source_repo ?? null,
8
+ source_path: entry.source_path ?? null,
9
+ integrity_hash: entry.integrity_hash,
10
+ synced_at: syncedAt ?? new Date().toISOString(),
11
+ };
12
+ }
13
+ export function buildSkillEvidenceEntry(skillId, note, source) {
14
+ const noteText = note.length >= 10 ? note : `${note} - Evidence recorded during FEAT execution.`;
15
+ return {
16
+ skill_id: skillId,
17
+ note: noteText,
18
+ source: source ?? 'tooling',
19
+ };
20
+ }
21
+ export function buildProvenanceEvidenceFromCatalog(skillIds, catalog) {
22
+ const uniqueIds = Array.from(new Set(skillIds.map((id) => id.trim()).filter(Boolean)));
23
+ return uniqueIds
24
+ .map((skillId) => {
25
+ const record = buildSkillProvenanceRecord(skillId, catalog);
26
+ if (!record) {
27
+ return buildSkillEvidenceEntry(skillId, `Skill "${skillId}" not found in catalog. Provenance could not be recorded.`, 'manual');
28
+ }
29
+ return buildSkillEvidenceEntry(skillId, `Skill provenance: source=${record.source_repo ?? 'unknown'}, path=${record.source_path ?? 'unknown'}, hash=${record.integrity_hash}, synced_at=${record.synced_at}`, 'tooling');
30
+ });
31
+ }
32
+ export function buildAppliedPolicyEvidence(policyRequirements, policiesApplied) {
33
+ return policyRequirements.map((req) => {
34
+ const appliedNote = policiesApplied?.[req.skill_id] ?? 'All required policy rules applied and validated.';
35
+ return buildSkillEvidenceEntry(req.skill_id, `Applied policy: pool=${req.policy_pool_ref}, contract=${req.source_contract_ref}, enforcement=${req.enforcement}. ${appliedNote}`, 'tooling');
36
+ });
37
+ }
38
+ //# sourceMappingURL=skill-evidence.js.map
@@ -0,0 +1,46 @@
1
+ import { type PluginPolicyPack } from './plugin-policy-pack.js';
2
+ export interface SkillPolicyEntry {
3
+ ruleId: string;
4
+ skillId: string;
5
+ severity: 'P0' | 'P1' | 'P2';
6
+ title: string;
7
+ appliesTo: string[];
8
+ policyPackId: string;
9
+ detect: string[];
10
+ requiredResponse: string[];
11
+ }
12
+ export interface SkillPolicyPool {
13
+ version: number;
14
+ pools: PluginPolicyPack[];
15
+ entries: SkillPolicyEntry[];
16
+ metadata: {
17
+ derivedFrom: string[];
18
+ generatedAt: string;
19
+ sourceSkillIds: string[];
20
+ };
21
+ }
22
+ export interface WorkspacePolicyRequirement {
23
+ skill_id: string;
24
+ policy_pool_ref: string;
25
+ source_contract_ref: string;
26
+ enforcement: 'blocking' | 'advisory';
27
+ required_rule_refs: string[];
28
+ required_evidence: string[];
29
+ }
30
+ export interface WorkspacePolicyInjection {
31
+ version: 1;
32
+ generated_from: 'recommended_skills';
33
+ required_policies: WorkspacePolicyRequirement[];
34
+ }
35
+ export declare function buildWorkspacePolicyInjection(skillIds: string[]): WorkspacePolicyInjection;
36
+ export declare function aiFillDefaultPolicyPack(skillId: string): PluginPolicyPack;
37
+ export declare function aiFillDefaultPolicyEntry(skillId: string, packId: string): SkillPolicyEntry;
38
+ export declare function derivePolicyPackFromContractPack(contractPackPath: string, skillId: string): Promise<{
39
+ packs: PluginPolicyPack[];
40
+ entries: SkillPolicyEntry[];
41
+ }>;
42
+ export declare function derivePolicyPoolFromSkill(skillId: string, options?: {
43
+ projectRoot?: string;
44
+ contractPackRelativePath?: string;
45
+ }): Promise<SkillPolicyPool>;
46
+ //# sourceMappingURL=skill-policy-pool.d.ts.map
@@ -0,0 +1,185 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { parse } from 'yaml';
4
+ import { pluginPolicyPackSchema } from './plugin-policy-pack.js';
5
+ const DEVTRACK_API_BLOCKING_RULES = [
6
+ 'DTAPI-P0-PROFILE-001',
7
+ 'DTAPI-P0-PREVIEW-001',
8
+ 'DTAPI-P0-PATH-001',
9
+ 'DTAPI-P0-TYPEORM-001',
10
+ 'DTAPI-P0-COMPOSITION-001',
11
+ 'DTAPI-P0-MODULES-001',
12
+ 'DTAPI-P0-PORTS-001',
13
+ ];
14
+ export function buildWorkspacePolicyInjection(skillIds) {
15
+ const uniqueSkillIds = Array.from(new Set(skillIds.map((skillId) => skillId.trim()).filter(Boolean)));
16
+ return {
17
+ version: 1,
18
+ generated_from: 'recommended_skills',
19
+ required_policies: uniqueSkillIds.map((skillId) => buildWorkspacePolicyRequirement(skillId)),
20
+ };
21
+ }
22
+ function buildWorkspacePolicyRequirement(skillId) {
23
+ if (skillId === 'devtrack-api') {
24
+ return {
25
+ skill_id: skillId,
26
+ policy_pool_ref: 'skill-policy-pool:devtrack-api',
27
+ source_contract_ref: '.sdd/skills/curated/devtrack-api/references/contract-pack.yaml',
28
+ enforcement: 'blocking',
29
+ required_rule_refs: DEVTRACK_API_BLOCKING_RULES,
30
+ required_evidence: [
31
+ 'selected derivation profile recorded in plan',
32
+ 'package-structure preview approved or exception documented',
33
+ 'devtrack-api architecture validation evidence recorded in quality',
34
+ 'skill_evidence entry recorded for devtrack-api before finalize',
35
+ ],
36
+ };
37
+ }
38
+ return {
39
+ skill_id: skillId,
40
+ policy_pool_ref: `skill-policy-pool:${skillId}`,
41
+ source_contract_ref: `.sdd/skills/curated/${skillId}/references/contract-pack.yaml`,
42
+ enforcement: 'advisory',
43
+ required_rule_refs: [`${skillId}-DEFAULT-001`],
44
+ required_evidence: [
45
+ `skill_evidence entry recorded for ${skillId} before finalize`,
46
+ `policy conformance checked for ${skillId} before execution relies on the skill`,
47
+ ],
48
+ };
49
+ }
50
+ export function aiFillDefaultPolicyPack(skillId) {
51
+ return pluginPolicyPackSchema.parse({
52
+ id: `${skillId}-default`,
53
+ version: '1.0.0',
54
+ description: `AI-filled default policy pack derived from skill "${skillId}". No contract pack was provided, so safe defaults are applied.`,
55
+ applies_to: {
56
+ trust_tiers: ['local-dev', 'experimental', 'enterprise-approved'],
57
+ },
58
+ requirements: {
59
+ max_risk_tier: 'medium',
60
+ supply_chain: {
61
+ checksum: true,
62
+ signature_or_provenance: false,
63
+ sbom: false,
64
+ sbom_formats: [],
65
+ },
66
+ validation: {
67
+ min_coverage: 80,
68
+ security_checks: ['dependency-audit'],
69
+ dependency_checks: [],
70
+ },
71
+ execution: {
72
+ network: 'restricted',
73
+ process_spawn: 'forbidden',
74
+ },
75
+ },
76
+ });
77
+ }
78
+ export function aiFillDefaultPolicyEntry(skillId, packId) {
79
+ return {
80
+ ruleId: `${skillId}-DEFAULT-001`,
81
+ skillId,
82
+ severity: 'P2',
83
+ title: `Default policy for ${skillId}: verify skill content and intent before use.`,
84
+ appliesTo: ['FEAT', 'source', 'quality'],
85
+ policyPackId: packId,
86
+ detect: ['skill is referenced but not validated against project-local policy pool'],
87
+ requiredResponse: [
88
+ `record skill-policy-pool evidence for ${skillId}`,
89
+ 'verify skill conformance before reliant execution',
90
+ ],
91
+ };
92
+ }
93
+ export async function derivePolicyPackFromContractPack(contractPackPath, skillId) {
94
+ const raw = await fs.readFile(contractPackPath, 'utf-8');
95
+ const contractPack = parse(raw);
96
+ const packs = [];
97
+ const entries = [];
98
+ const contractId = contractPack.contract_id ?? `${skillId}-contract-pack`;
99
+ const profiles = contractPack.derivation_profiles ?? {};
100
+ const rules = contractPack.rules ?? [];
101
+ for (const [profileName, profile] of Object.entries(profiles)) {
102
+ const packId = `${skillId}-${profileName}`;
103
+ const isDefault = profile.default !== false;
104
+ const packSeverityMap = {
105
+ block_on_p0: 'high',
106
+ block_on_p0_p1: 'high',
107
+ warn: 'medium',
108
+ };
109
+ const enforcementLevel = profile.enforcement?.path_conformance ?? 'warn';
110
+ const maxRiskTier = packSeverityMap[enforcementLevel] ?? 'medium';
111
+ const isBlocking = profile.enforcement?.finalize_blocking ?? false;
112
+ const pack = pluginPolicyPackSchema.parse({
113
+ id: packId,
114
+ version: '1.0.0',
115
+ description: `Derived policy pack for "${profileName}" profile from contract pack "${contractId}" (skill: ${skillId}). ${profile.purpose ?? ''}`,
116
+ applies_to: {
117
+ trust_tiers: isBlocking ? ['enterprise-approved'] : ['local-dev', 'experimental', 'enterprise-approved'],
118
+ },
119
+ requirements: {
120
+ max_risk_tier: maxRiskTier,
121
+ supply_chain: {
122
+ checksum: isBlocking,
123
+ signature_or_provenance: isBlocking,
124
+ sbom: isDefault,
125
+ sbom_formats: isBlocking ? ['cyclonedx'] : [],
126
+ },
127
+ validation: {
128
+ min_coverage: isBlocking ? 95 : 80,
129
+ security_checks: isBlocking
130
+ ? ['dependency-audit', 'no-secret-fixtures']
131
+ : ['dependency-audit'],
132
+ dependency_checks: isBlocking ? ['lockfile-review'] : [],
133
+ },
134
+ execution: {
135
+ network: isBlocking ? 'disabled' : 'restricted',
136
+ process_spawn: isBlocking ? 'forbidden' : 'declared',
137
+ },
138
+ },
139
+ });
140
+ packs.push(pack);
141
+ for (const rule of rules) {
142
+ const sev = rule.severity === 'P0' ? 'P0' : rule.severity === 'P1' ? 'P1' : 'P2';
143
+ entries.push({
144
+ ruleId: rule.id,
145
+ skillId,
146
+ severity: sev,
147
+ title: rule.title,
148
+ appliesTo: rule.applies_to ?? [],
149
+ policyPackId: packId,
150
+ detect: rule.detect ?? [],
151
+ requiredResponse: rule.required_response ?? [],
152
+ });
153
+ }
154
+ }
155
+ return { packs, entries };
156
+ }
157
+ export async function derivePolicyPoolFromSkill(skillId, options = {}) {
158
+ const contractPackPath = options.contractPackRelativePath ??
159
+ `.sdd/skills/curated/${skillId}/references/contract-pack.yaml`;
160
+ const resolvedPath = options.projectRoot
161
+ ? path.resolve(options.projectRoot, contractPackPath)
162
+ : contractPackPath;
163
+ let packs;
164
+ let entries;
165
+ try {
166
+ const result = await derivePolicyPackFromContractPack(resolvedPath, skillId);
167
+ packs = result.packs;
168
+ entries = result.entries;
169
+ }
170
+ catch {
171
+ packs = [aiFillDefaultPolicyPack(skillId)];
172
+ entries = [aiFillDefaultPolicyEntry(skillId, packs[0].id)];
173
+ }
174
+ return {
175
+ version: 1,
176
+ pools: packs,
177
+ entries,
178
+ metadata: {
179
+ derivedFrom: [contractPackPath],
180
+ generatedAt: new Date().toISOString(),
181
+ sourceSkillIds: [skillId],
182
+ },
183
+ };
184
+ }
185
+ //# sourceMappingURL=skill-policy-pool.js.map