@devtrack-solution/codesdd 1.2.2

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 (433) hide show
  1. package/.sdd/skills/curated/api-clean-flask-langgraph/SKILL.md +2751 -0
  2. package/.sdd/skills/curated/devtrack-api/SKILL.md +137 -0
  3. package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +4 -0
  4. package/.sdd/skills/curated/devtrack-api/references/application-presentation.md +381 -0
  5. package/.sdd/skills/curated/devtrack-api/references/architecture-governance.md +219 -0
  6. package/.sdd/skills/curated/devtrack-api/references/domain-modeling.md +359 -0
  7. package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +127 -0
  8. package/.sdd/skills/curated/devtrack-api/references/imports-lint.md +207 -0
  9. package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +167 -0
  10. package/.sdd/skills/curated/devtrack-api/references/typeorm-infrastructure.md +334 -0
  11. package/LICENSE +21 -0
  12. package/README.md +842 -0
  13. package/bin/codesdd.js +10 -0
  14. package/dist/cli/index.d.ts +3 -0
  15. package/dist/cli/index.js +560 -0
  16. package/dist/commands/change.d.ts +35 -0
  17. package/dist/commands/change.js +296 -0
  18. package/dist/commands/completion.d.ts +72 -0
  19. package/dist/commands/completion.js +258 -0
  20. package/dist/commands/config.d.ts +36 -0
  21. package/dist/commands/config.js +552 -0
  22. package/dist/commands/feedback.d.ts +9 -0
  23. package/dist/commands/feedback.js +184 -0
  24. package/dist/commands/schema.d.ts +6 -0
  25. package/dist/commands/schema.js +870 -0
  26. package/dist/commands/sdd/execution.d.ts +3 -0
  27. package/dist/commands/sdd/execution.js +409 -0
  28. package/dist/commands/sdd/shared.d.ts +9 -0
  29. package/dist/commands/sdd/shared.js +84 -0
  30. package/dist/commands/sdd/skills.d.ts +3 -0
  31. package/dist/commands/sdd/skills.js +154 -0
  32. package/dist/commands/sdd.d.ts +3 -0
  33. package/dist/commands/sdd.js +769 -0
  34. package/dist/commands/show.d.ts +14 -0
  35. package/dist/commands/show.js +133 -0
  36. package/dist/commands/spec.d.ts +15 -0
  37. package/dist/commands/spec.js +228 -0
  38. package/dist/commands/validate.d.ts +24 -0
  39. package/dist/commands/validate.js +295 -0
  40. package/dist/commands/workflow/index.d.ts +17 -0
  41. package/dist/commands/workflow/index.js +12 -0
  42. package/dist/commands/workflow/instructions.d.ts +29 -0
  43. package/dist/commands/workflow/instructions.js +383 -0
  44. package/dist/commands/workflow/new-change.d.ts +11 -0
  45. package/dist/commands/workflow/new-change.js +45 -0
  46. package/dist/commands/workflow/schemas.d.ts +10 -0
  47. package/dist/commands/workflow/schemas.js +34 -0
  48. package/dist/commands/workflow/shared.d.ts +57 -0
  49. package/dist/commands/workflow/shared.js +117 -0
  50. package/dist/commands/workflow/status.d.ts +14 -0
  51. package/dist/commands/workflow/status.js +76 -0
  52. package/dist/commands/workflow/templates.d.ts +16 -0
  53. package/dist/commands/workflow/templates.js +68 -0
  54. package/dist/core/archive.d.ts +16 -0
  55. package/dist/core/archive.js +487 -0
  56. package/dist/core/artifact-graph/graph.d.ts +56 -0
  57. package/dist/core/artifact-graph/graph.js +141 -0
  58. package/dist/core/artifact-graph/index.d.ts +7 -0
  59. package/dist/core/artifact-graph/index.js +13 -0
  60. package/dist/core/artifact-graph/instruction-loader.d.ts +143 -0
  61. package/dist/core/artifact-graph/instruction-loader.js +215 -0
  62. package/dist/core/artifact-graph/resolver.d.ts +81 -0
  63. package/dist/core/artifact-graph/resolver.js +258 -0
  64. package/dist/core/artifact-graph/schema.d.ts +13 -0
  65. package/dist/core/artifact-graph/schema.js +108 -0
  66. package/dist/core/artifact-graph/state.d.ts +12 -0
  67. package/dist/core/artifact-graph/state.js +54 -0
  68. package/dist/core/artifact-graph/types.d.ts +45 -0
  69. package/dist/core/artifact-graph/types.js +43 -0
  70. package/dist/core/available-tools.d.ts +16 -0
  71. package/dist/core/available-tools.js +30 -0
  72. package/dist/core/branding.d.ts +8 -0
  73. package/dist/core/branding.js +12 -0
  74. package/dist/core/cli/command-matrix.d.ts +23 -0
  75. package/dist/core/cli/command-matrix.js +123 -0
  76. package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
  77. package/dist/core/command-generation/adapters/amazon-q.js +26 -0
  78. package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
  79. package/dist/core/command-generation/adapters/antigravity.js +26 -0
  80. package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
  81. package/dist/core/command-generation/adapters/auggie.js +27 -0
  82. package/dist/core/command-generation/adapters/claude.d.ts +13 -0
  83. package/dist/core/command-generation/adapters/claude.js +50 -0
  84. package/dist/core/command-generation/adapters/cline.d.ts +14 -0
  85. package/dist/core/command-generation/adapters/cline.js +27 -0
  86. package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
  87. package/dist/core/command-generation/adapters/codebuddy.js +28 -0
  88. package/dist/core/command-generation/adapters/codex.d.ts +16 -0
  89. package/dist/core/command-generation/adapters/codex.js +39 -0
  90. package/dist/core/command-generation/adapters/continue.d.ts +13 -0
  91. package/dist/core/command-generation/adapters/continue.js +28 -0
  92. package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
  93. package/dist/core/command-generation/adapters/costrict.js +27 -0
  94. package/dist/core/command-generation/adapters/crush.d.ts +13 -0
  95. package/dist/core/command-generation/adapters/crush.js +30 -0
  96. package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
  97. package/dist/core/command-generation/adapters/cursor.js +44 -0
  98. package/dist/core/command-generation/adapters/factory.d.ts +13 -0
  99. package/dist/core/command-generation/adapters/factory.js +27 -0
  100. package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
  101. package/dist/core/command-generation/adapters/gemini.js +26 -0
  102. package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
  103. package/dist/core/command-generation/adapters/github-copilot.js +26 -0
  104. package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
  105. package/dist/core/command-generation/adapters/iflow.js +29 -0
  106. package/dist/core/command-generation/adapters/index.d.ts +29 -0
  107. package/dist/core/command-generation/adapters/index.js +29 -0
  108. package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
  109. package/dist/core/command-generation/adapters/kilocode.js +23 -0
  110. package/dist/core/command-generation/adapters/kiro.d.ts +13 -0
  111. package/dist/core/command-generation/adapters/kiro.js +26 -0
  112. package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
  113. package/dist/core/command-generation/adapters/opencode.js +29 -0
  114. package/dist/core/command-generation/adapters/pi.d.ts +14 -0
  115. package/dist/core/command-generation/adapters/pi.js +41 -0
  116. package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
  117. package/dist/core/command-generation/adapters/qoder.js +30 -0
  118. package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
  119. package/dist/core/command-generation/adapters/qwen.js +26 -0
  120. package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
  121. package/dist/core/command-generation/adapters/roocode.js +27 -0
  122. package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
  123. package/dist/core/command-generation/adapters/windsurf.js +51 -0
  124. package/dist/core/command-generation/generator.d.ts +21 -0
  125. package/dist/core/command-generation/generator.js +27 -0
  126. package/dist/core/command-generation/index.d.ts +22 -0
  127. package/dist/core/command-generation/index.js +24 -0
  128. package/dist/core/command-generation/registry.d.ts +36 -0
  129. package/dist/core/command-generation/registry.js +92 -0
  130. package/dist/core/command-generation/types.d.ts +56 -0
  131. package/dist/core/command-generation/types.js +8 -0
  132. package/dist/core/completions/command-registry.d.ts +7 -0
  133. package/dist/core/completions/command-registry.js +461 -0
  134. package/dist/core/completions/completion-provider.d.ts +60 -0
  135. package/dist/core/completions/completion-provider.js +102 -0
  136. package/dist/core/completions/factory.d.ts +64 -0
  137. package/dist/core/completions/factory.js +75 -0
  138. package/dist/core/completions/generators/bash-generator.d.ts +32 -0
  139. package/dist/core/completions/generators/bash-generator.js +174 -0
  140. package/dist/core/completions/generators/fish-generator.d.ts +32 -0
  141. package/dist/core/completions/generators/fish-generator.js +157 -0
  142. package/dist/core/completions/generators/powershell-generator.d.ts +33 -0
  143. package/dist/core/completions/generators/powershell-generator.js +207 -0
  144. package/dist/core/completions/generators/zsh-generator.d.ts +44 -0
  145. package/dist/core/completions/generators/zsh-generator.js +250 -0
  146. package/dist/core/completions/installers/bash-installer.d.ts +87 -0
  147. package/dist/core/completions/installers/bash-installer.js +318 -0
  148. package/dist/core/completions/installers/fish-installer.d.ts +43 -0
  149. package/dist/core/completions/installers/fish-installer.js +143 -0
  150. package/dist/core/completions/installers/powershell-installer.d.ts +88 -0
  151. package/dist/core/completions/installers/powershell-installer.js +327 -0
  152. package/dist/core/completions/installers/zsh-installer.d.ts +125 -0
  153. package/dist/core/completions/installers/zsh-installer.js +452 -0
  154. package/dist/core/completions/templates/bash-templates.d.ts +6 -0
  155. package/dist/core/completions/templates/bash-templates.js +24 -0
  156. package/dist/core/completions/templates/fish-templates.d.ts +7 -0
  157. package/dist/core/completions/templates/fish-templates.js +39 -0
  158. package/dist/core/completions/templates/powershell-templates.d.ts +6 -0
  159. package/dist/core/completions/templates/powershell-templates.js +25 -0
  160. package/dist/core/completions/templates/zsh-templates.d.ts +6 -0
  161. package/dist/core/completions/templates/zsh-templates.js +36 -0
  162. package/dist/core/completions/types.d.ts +79 -0
  163. package/dist/core/completions/types.js +2 -0
  164. package/dist/core/config-prompts.d.ts +9 -0
  165. package/dist/core/config-prompts.js +34 -0
  166. package/dist/core/config-schema.d.ts +86 -0
  167. package/dist/core/config-schema.js +213 -0
  168. package/dist/core/config.d.ts +17 -0
  169. package/dist/core/config.js +33 -0
  170. package/dist/core/converters/json-converter.d.ts +6 -0
  171. package/dist/core/converters/json-converter.js +51 -0
  172. package/dist/core/global-config.d.ts +44 -0
  173. package/dist/core/global-config.js +125 -0
  174. package/dist/core/index.d.ts +2 -0
  175. package/dist/core/index.js +3 -0
  176. package/dist/core/init.d.ts +36 -0
  177. package/dist/core/init.js +576 -0
  178. package/dist/core/legacy-cleanup.d.ts +162 -0
  179. package/dist/core/legacy-cleanup.js +512 -0
  180. package/dist/core/list.d.ts +9 -0
  181. package/dist/core/list.js +173 -0
  182. package/dist/core/migration.d.ts +23 -0
  183. package/dist/core/migration.js +108 -0
  184. package/dist/core/parsers/change-parser.d.ts +13 -0
  185. package/dist/core/parsers/change-parser.js +193 -0
  186. package/dist/core/parsers/markdown-parser.d.ts +22 -0
  187. package/dist/core/parsers/markdown-parser.js +187 -0
  188. package/dist/core/parsers/requirement-blocks.d.ts +37 -0
  189. package/dist/core/parsers/requirement-blocks.js +201 -0
  190. package/dist/core/profile-sync-drift.d.ts +38 -0
  191. package/dist/core/profile-sync-drift.js +201 -0
  192. package/dist/core/profiles.d.ts +26 -0
  193. package/dist/core/profiles.js +41 -0
  194. package/dist/core/project-config.d.ts +64 -0
  195. package/dist/core/project-config.js +223 -0
  196. package/dist/core/schemas/base.schema.d.ts +13 -0
  197. package/dist/core/schemas/base.schema.js +13 -0
  198. package/dist/core/schemas/change.schema.d.ts +73 -0
  199. package/dist/core/schemas/change.schema.js +31 -0
  200. package/dist/core/schemas/index.d.ts +4 -0
  201. package/dist/core/schemas/index.js +4 -0
  202. package/dist/core/schemas/spec.schema.d.ts +18 -0
  203. package/dist/core/schemas/spec.schema.js +15 -0
  204. package/dist/core/sdd/adr-policy.d.ts +7 -0
  205. package/dist/core/sdd/adr-policy.js +47 -0
  206. package/dist/core/sdd/adr.d.ts +4 -0
  207. package/dist/core/sdd/adr.js +27 -0
  208. package/dist/core/sdd/bootstrap.d.ts +28 -0
  209. package/dist/core/sdd/bootstrap.js +353 -0
  210. package/dist/core/sdd/check.d.ts +51 -0
  211. package/dist/core/sdd/check.js +831 -0
  212. package/dist/core/sdd/coordination/coordination-adapters.d.ts +73 -0
  213. package/dist/core/sdd/coordination/coordination-adapters.js +87 -0
  214. package/dist/core/sdd/coordination/index.d.ts +2 -0
  215. package/dist/core/sdd/coordination/index.js +2 -0
  216. package/dist/core/sdd/dedup.d.ts +23 -0
  217. package/dist/core/sdd/dedup.js +62 -0
  218. package/dist/core/sdd/default-bootstrap-files.d.ts +23 -0
  219. package/dist/core/sdd/default-bootstrap-files.js +385 -0
  220. package/dist/core/sdd/default-skills.d.ts +16 -0
  221. package/dist/core/sdd/default-skills.js +427 -0
  222. package/dist/core/sdd/diagnose.d.ts +25 -0
  223. package/dist/core/sdd/diagnose.js +1312 -0
  224. package/dist/core/sdd/docs-sync.d.ts +21 -0
  225. package/dist/core/sdd/docs-sync.js +231 -0
  226. package/dist/core/sdd/domain/helpers.d.ts +6 -0
  227. package/dist/core/sdd/domain/helpers.js +37 -0
  228. package/dist/core/sdd/domain/lifecycle-guardrails.d.ts +22 -0
  229. package/dist/core/sdd/domain/lifecycle-guardrails.js +31 -0
  230. package/dist/core/sdd/domain/lifecycle-hooks.d.ts +16 -0
  231. package/dist/core/sdd/domain/lifecycle-hooks.js +27 -0
  232. package/dist/core/sdd/domain/post-active-validation.d.ts +15 -0
  233. package/dist/core/sdd/domain/post-active-validation.js +71 -0
  234. package/dist/core/sdd/domain/traceability.d.ts +8 -0
  235. package/dist/core/sdd/domain/traceability.js +83 -0
  236. package/dist/core/sdd/domain/transition-engine.d.ts +49 -0
  237. package/dist/core/sdd/domain/transition-engine.js +120 -0
  238. package/dist/core/sdd/fingerprint.d.ts +23 -0
  239. package/dist/core/sdd/fingerprint.js +146 -0
  240. package/dist/core/sdd/import-openspec.d.ts +31 -0
  241. package/dist/core/sdd/import-openspec.js +232 -0
  242. package/dist/core/sdd/init.d.ts +36 -0
  243. package/dist/core/sdd/init.js +65 -0
  244. package/dist/core/sdd/json-schema.d.ts +6 -0
  245. package/dist/core/sdd/json-schema.js +59 -0
  246. package/dist/core/sdd/legacy-operations.d.ts +286 -0
  247. package/dist/core/sdd/legacy-operations.js +2175 -0
  248. package/dist/core/sdd/lenses.d.ts +14 -0
  249. package/dist/core/sdd/lenses.js +97 -0
  250. package/dist/core/sdd/merge-catalog.d.ts +9 -0
  251. package/dist/core/sdd/merge-catalog.js +70 -0
  252. package/dist/core/sdd/migrate-workspace.d.ts +36 -0
  253. package/dist/core/sdd/migrate-workspace.js +344 -0
  254. package/dist/core/sdd/migrate.d.ts +24 -0
  255. package/dist/core/sdd/migrate.js +385 -0
  256. package/dist/core/sdd/resolve-project-root.d.ts +15 -0
  257. package/dist/core/sdd/resolve-project-root.js +46 -0
  258. package/dist/core/sdd/root-resolver.d.ts +16 -0
  259. package/dist/core/sdd/root-resolver.js +62 -0
  260. package/dist/core/sdd/sanitize.d.ts +35 -0
  261. package/dist/core/sdd/sanitize.js +750 -0
  262. package/dist/core/sdd/services/approve.service.d.ts +20 -0
  263. package/dist/core/sdd/services/approve.service.js +82 -0
  264. package/dist/core/sdd/services/audit.service.d.ts +53 -0
  265. package/dist/core/sdd/services/audit.service.js +136 -0
  266. package/dist/core/sdd/services/breakdown.service.d.ts +35 -0
  267. package/dist/core/sdd/services/breakdown.service.js +185 -0
  268. package/dist/core/sdd/services/context.service.d.ts +346 -0
  269. package/dist/core/sdd/services/context.service.js +278 -0
  270. package/dist/core/sdd/services/debate.service.d.ts +16 -0
  271. package/dist/core/sdd/services/debate.service.js +73 -0
  272. package/dist/core/sdd/services/decide.service.d.ts +23 -0
  273. package/dist/core/sdd/services/decide.service.js +81 -0
  274. package/dist/core/sdd/services/dedup-apply.service.d.ts +39 -0
  275. package/dist/core/sdd/services/dedup-apply.service.js +259 -0
  276. package/dist/core/sdd/services/feature-lint.service.d.ts +29 -0
  277. package/dist/core/sdd/services/feature-lint.service.js +146 -0
  278. package/dist/core/sdd/services/finalize.service.d.ts +33 -0
  279. package/dist/core/sdd/services/finalize.service.js +707 -0
  280. package/dist/core/sdd/services/frontend-gap.service.d.ts +23 -0
  281. package/dist/core/sdd/services/frontend-gap.service.js +117 -0
  282. package/dist/core/sdd/services/frontend-impact.service.d.ts +19 -0
  283. package/dist/core/sdd/services/frontend-impact.service.js +46 -0
  284. package/dist/core/sdd/services/ingest-deposito.service.d.ts +32 -0
  285. package/dist/core/sdd/services/ingest-deposito.service.js +231 -0
  286. package/dist/core/sdd/services/insight.service.d.ts +21 -0
  287. package/dist/core/sdd/services/insight.service.js +81 -0
  288. package/dist/core/sdd/services/legacy-capability.service.d.ts +24 -0
  289. package/dist/core/sdd/services/legacy-capability.service.js +59 -0
  290. package/dist/core/sdd/services/mcp-runtime.service.d.ts +42 -0
  291. package/dist/core/sdd/services/mcp-runtime.service.js +144 -0
  292. package/dist/core/sdd/services/metrics.service.d.ts +49 -0
  293. package/dist/core/sdd/services/metrics.service.js +181 -0
  294. package/dist/core/sdd/services/next.service.d.ts +35 -0
  295. package/dist/core/sdd/services/next.service.js +54 -0
  296. package/dist/core/sdd/services/onboard.service.d.ts +9 -0
  297. package/dist/core/sdd/services/onboard.service.js +165 -0
  298. package/dist/core/sdd/services/rebuild.service.d.ts +31 -0
  299. package/dist/core/sdd/services/rebuild.service.js +482 -0
  300. package/dist/core/sdd/services/scan-naming.service.d.ts +43 -0
  301. package/dist/core/sdd/services/scan-naming.service.js +246 -0
  302. package/dist/core/sdd/services/skills-invoke.service.d.ts +24 -0
  303. package/dist/core/sdd/services/skills-invoke.service.js +63 -0
  304. package/dist/core/sdd/services/skills-sync.service.d.ts +15 -0
  305. package/dist/core/sdd/services/skills-sync.service.js +117 -0
  306. package/dist/core/sdd/services/start.service.d.ts +26 -0
  307. package/dist/core/sdd/services/start.service.js +237 -0
  308. package/dist/core/sdd/skills.d.ts +15 -0
  309. package/dist/core/sdd/skills.js +46 -0
  310. package/dist/core/sdd/state-lock.d.ts +19 -0
  311. package/dist/core/sdd/state-lock.js +144 -0
  312. package/dist/core/sdd/state.d.ts +155 -0
  313. package/dist/core/sdd/state.js +1000 -0
  314. package/dist/core/sdd/store/in-memory-adapter.d.ts +12 -0
  315. package/dist/core/sdd/store/in-memory-adapter.js +27 -0
  316. package/dist/core/sdd/store/index.d.ts +5 -0
  317. package/dist/core/sdd/store/index.js +5 -0
  318. package/dist/core/sdd/store/sdd-stores.d.ts +25 -0
  319. package/dist/core/sdd/store/sdd-stores.js +59 -0
  320. package/dist/core/sdd/store/state-store.d.ts +32 -0
  321. package/dist/core/sdd/store/state-store.js +2 -0
  322. package/dist/core/sdd/store/yaml-file-adapter.d.ts +12 -0
  323. package/dist/core/sdd/store/yaml-file-adapter.js +43 -0
  324. package/dist/core/sdd/structural-health.d.ts +557 -0
  325. package/dist/core/sdd/structural-health.js +187 -0
  326. package/dist/core/sdd/transaction.d.ts +14 -0
  327. package/dist/core/sdd/transaction.js +100 -0
  328. package/dist/core/sdd/types.d.ts +1570 -0
  329. package/dist/core/sdd/types.js +617 -0
  330. package/dist/core/sdd/views.d.ts +3 -0
  331. package/dist/core/sdd/views.js +560 -0
  332. package/dist/core/sdd/workspace-schemas.d.ts +620 -0
  333. package/dist/core/sdd/workspace-schemas.js +254 -0
  334. package/dist/core/sdd/write-manifest.d.ts +25 -0
  335. package/dist/core/sdd/write-manifest.js +353 -0
  336. package/dist/core/shared/index.d.ts +8 -0
  337. package/dist/core/shared/index.js +8 -0
  338. package/dist/core/shared/skill-generation.d.ts +49 -0
  339. package/dist/core/shared/skill-generation.js +106 -0
  340. package/dist/core/shared/tool-detection.d.ts +71 -0
  341. package/dist/core/shared/tool-detection.js +158 -0
  342. package/dist/core/specs-apply.d.ts +73 -0
  343. package/dist/core/specs-apply.js +385 -0
  344. package/dist/core/styles/palette.d.ts +7 -0
  345. package/dist/core/styles/palette.js +8 -0
  346. package/dist/core/templates/index.d.ts +8 -0
  347. package/dist/core/templates/index.js +9 -0
  348. package/dist/core/templates/skill-templates.d.ts +20 -0
  349. package/dist/core/templates/skill-templates.js +19 -0
  350. package/dist/core/templates/types.d.ts +19 -0
  351. package/dist/core/templates/types.js +5 -0
  352. package/dist/core/templates/workflows/apply-change.d.ts +10 -0
  353. package/dist/core/templates/workflows/apply-change.js +308 -0
  354. package/dist/core/templates/workflows/archive-change.d.ts +10 -0
  355. package/dist/core/templates/workflows/archive-change.js +277 -0
  356. package/dist/core/templates/workflows/bulk-archive-change.d.ts +10 -0
  357. package/dist/core/templates/workflows/bulk-archive-change.js +502 -0
  358. package/dist/core/templates/workflows/continue-change.d.ts +10 -0
  359. package/dist/core/templates/workflows/continue-change.js +232 -0
  360. package/dist/core/templates/workflows/explore.d.ts +10 -0
  361. package/dist/core/templates/workflows/explore.js +475 -0
  362. package/dist/core/templates/workflows/feedback.d.ts +9 -0
  363. package/dist/core/templates/workflows/feedback.js +108 -0
  364. package/dist/core/templates/workflows/ff-change.d.ts +10 -0
  365. package/dist/core/templates/workflows/ff-change.js +206 -0
  366. package/dist/core/templates/workflows/new-change.d.ts +10 -0
  367. package/dist/core/templates/workflows/new-change.js +151 -0
  368. package/dist/core/templates/workflows/onboard.d.ts +10 -0
  369. package/dist/core/templates/workflows/onboard.js +573 -0
  370. package/dist/core/templates/workflows/propose.d.ts +10 -0
  371. package/dist/core/templates/workflows/propose.js +224 -0
  372. package/dist/core/templates/workflows/sdd.d.ts +10 -0
  373. package/dist/core/templates/workflows/sdd.js +107 -0
  374. package/dist/core/templates/workflows/sync-specs.d.ts +10 -0
  375. package/dist/core/templates/workflows/sync-specs.js +286 -0
  376. package/dist/core/templates/workflows/verify-change.d.ts +10 -0
  377. package/dist/core/templates/workflows/verify-change.js +346 -0
  378. package/dist/core/update.d.ts +77 -0
  379. package/dist/core/update.js +538 -0
  380. package/dist/core/validation/constants.d.ts +34 -0
  381. package/dist/core/validation/constants.js +40 -0
  382. package/dist/core/validation/types.d.ts +18 -0
  383. package/dist/core/validation/types.js +2 -0
  384. package/dist/core/validation/validator.d.ts +33 -0
  385. package/dist/core/validation/validator.js +409 -0
  386. package/dist/core/view.d.ts +8 -0
  387. package/dist/core/view.js +170 -0
  388. package/dist/index.d.ts +3 -0
  389. package/dist/index.js +3 -0
  390. package/dist/prompts/searchable-multi-select.d.ts +28 -0
  391. package/dist/prompts/searchable-multi-select.js +159 -0
  392. package/dist/telemetry/config.d.ts +32 -0
  393. package/dist/telemetry/config.js +68 -0
  394. package/dist/telemetry/index.d.ts +44 -0
  395. package/dist/telemetry/index.js +207 -0
  396. package/dist/ui/ascii-patterns.d.ts +16 -0
  397. package/dist/ui/ascii-patterns.js +133 -0
  398. package/dist/ui/welcome-screen.d.ts +10 -0
  399. package/dist/ui/welcome-screen.js +146 -0
  400. package/dist/utils/change-metadata.d.ts +51 -0
  401. package/dist/utils/change-metadata.js +147 -0
  402. package/dist/utils/change-utils.d.ts +62 -0
  403. package/dist/utils/change-utils.js +121 -0
  404. package/dist/utils/command-references.d.ts +18 -0
  405. package/dist/utils/command-references.js +20 -0
  406. package/dist/utils/file-system.d.ts +36 -0
  407. package/dist/utils/file-system.js +281 -0
  408. package/dist/utils/index.d.ts +6 -0
  409. package/dist/utils/index.js +9 -0
  410. package/dist/utils/interactive.d.ts +18 -0
  411. package/dist/utils/interactive.js +21 -0
  412. package/dist/utils/item-discovery.d.ts +4 -0
  413. package/dist/utils/item-discovery.js +73 -0
  414. package/dist/utils/match.d.ts +3 -0
  415. package/dist/utils/match.js +22 -0
  416. package/dist/utils/openspec-compat.d.ts +2 -0
  417. package/dist/utils/openspec-compat.js +2 -0
  418. package/dist/utils/shell-detection.d.ts +20 -0
  419. package/dist/utils/shell-detection.js +41 -0
  420. package/dist/utils/task-progress.d.ts +8 -0
  421. package/dist/utils/task-progress.js +36 -0
  422. package/package.json +111 -0
  423. package/schemas/sdd/1-spec.schema.json +221 -0
  424. package/schemas/sdd/2-plan.schema.json +199 -0
  425. package/schemas/sdd/3-tasks.schema.json +102 -0
  426. package/schemas/sdd/4-changelog.schema.json +55 -0
  427. package/schemas/sdd/5-quality.schema.json +427 -0
  428. package/schemas/sdd/workspace-catalog.schema.json +1012 -0
  429. package/schemas/spec-driven/schema.yaml +153 -0
  430. package/schemas/spec-driven/templates/design.md +19 -0
  431. package/schemas/spec-driven/templates/proposal.md +23 -0
  432. package/schemas/spec-driven/templates/spec.md +8 -0
  433. package/schemas/spec-driven/templates/tasks.md +9 -0
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: devtrack-api
3
+ description: Model-agnostic engineering skill for the DevTrack Foundation API and derived DevTrack APIs. Use it to implement, review, refactor, test, document, or govern NestJS TypeScript backend work using DDD, Hexagonal Architecture, Clean Architecture, TypeORM, OpenSDD, strict import boundaries, layered modules under domain, application, presentation, infrastructure, and shared, plus safe operational practices, evidence-based validation, and quality handoff.
4
+ ---
5
+
6
+ # DevTrack API
7
+
8
+ ## Mission
9
+
10
+ Use this skill as the local architecture, quality, safety, and delivery contract for `devtrack-foundation-api` and compatible derived APIs.
11
+
12
+ The goal is not only to produce code. The goal is to preserve architectural integrity, avoid unsafe changes, validate outcomes with evidence, and leave a reliable handoff that any capable engineering agent can continue.
13
+
14
+ ## Universal Agent Contract
15
+
16
+ These rules apply to any assistant, automation host, IDE agent, command-line coding agent, or model runtime using this skill:
17
+
18
+ - Stay model-agnostic. Do not depend on a specific LLM, vendor, chat product, IDE, plugin, or hidden tool.
19
+ - Prefer repository evidence over memory, assumptions, examples, or generated guesses.
20
+ - Do not invent APIs, flags, files, package scripts, class names, module names, environment variables, database objects, or behavior.
21
+ - Verify version-sensitive details from local files such as `package.json`, lockfiles, configs, migrations, source code, or official docs when available.
22
+ - Keep work scoped to the user request and the active OpenSDD feature when one exists.
23
+ - Preserve user changes in a dirty worktree. Never overwrite unrelated modifications.
24
+ - Avoid destructive actions unless the user explicitly requested them and the scope is clear.
25
+ - Never expose, copy, log, commit, or summarize real secrets.
26
+ - Do not create external memory, backlog, workflow, scratchpad, context, or handoff stores.
27
+ - Do not use BRV in this environment.
28
+ - Never introduce Prisma. Persistence is TypeORM only.
29
+
30
+ ## Operating Mode
31
+
32
+ Repository files are the source for implementation facts. OpenSDD is the source for operational planning, progress, dependencies, blockers, quality, and handoff.
33
+
34
+ Before edits in the API repository:
35
+
36
+ 1. Read the nearest `AGENTS.md` and `AGENT.md`.
37
+ 2. Run `opensdd sdd onboard system`.
38
+ 3. Run `opensdd sdd next`.
39
+ 4. If SDD returns a ready or active feature id, run `opensdd sdd context <FEAT-ID>` before coding.
40
+ 5. If no feature id is available but the user explicitly requested the work, continue narrowly and state the SDD exception in the final handoff.
41
+ 6. Check `git status --short` before editing and before the final handoff.
42
+ 7. Inspect nearby implementation files before creating new patterns.
43
+
44
+ When a command or local tool is unavailable, report it as unavailable, explain the effect on confidence, and use the smallest safe alternative. Do not fake command output.
45
+
46
+ ## Safety Baseline
47
+
48
+ Treat the repository as a production-grade system:
49
+
50
+ - No real secrets in commits, examples, logs, tests, prompts, fixtures, screenshots, or handoff text.
51
+ - Update `.env.example` when variable names change. Do not copy values from `.env`.
52
+ - Do not run destructive commands such as broad deletes, hard resets, force pushes, production migrations, table drops, queue purges, or cloud deletions unless explicitly requested and scoped.
53
+ - Avoid changing authentication, authorization, encryption, tenancy, payment, data-retention, PII, logging, or observability behavior without targeted validation.
54
+ - For AI/LLM integrations, keep provider-specific SDKs and credentials in infrastructure, expose capabilities through ports, and avoid leaking prompts, secrets, personal data, or internal lifecycle payloads through presentation.
55
+ - Prefer explicit failure handling over silent fallbacks for security-sensitive behavior.
56
+
57
+ ## Reference Map
58
+
59
+ Load only the files needed for the task, but always load governance before code changes:
60
+
61
+ - Always read [architecture-governance.md](references/architecture-governance.md) before code changes.
62
+ - Read [imports-lint.md](references/imports-lint.md) before editing imports or fixing lint.
63
+ - Read [domain-modeling.md](references/domain-modeling.md) for `domain/`, `.type.ts`, `.bo.ts`, `.vo.ts`, validators, events, and repository ports.
64
+ - Read [application-presentation.md](references/application-presentation.md) for use cases, services, handlers, ports, modules, controllers, DTO validators, GraphQL, CLI, WebSocket, agents, and tools.
65
+ - Read [typeorm-infrastructure.md](references/typeorm-infrastructure.md) for TypeORM entities, repositories, mappers, migrations, modules, config, infrastructure adapters, settings, queues, AWS, and provider integrations.
66
+ - Read [testing-validation.md](references/testing-validation.md) before finishing or when choosing tests.
67
+ - Use [implementation-checklist.md](references/implementation-checklist.md) as the final pass checklist.
68
+
69
+ ## Layer Order
70
+
71
+ Implement from inside out unless the task is purely presentation or infrastructure:
72
+
73
+ 1. `src/domain`: business rules, BOs, VOs, types, validators, events, repository port contracts.
74
+ 2. `src/application`: orchestration, use cases, services, handlers, agents/tools, ports in/out.
75
+ 3. `src/infrastructure`: concrete adapters, TypeORM, AWS, queue, cache, HTTP, LLM, vector store, Temporal, settings.
76
+ 4. `src/presentation`: REST/GraphQL/CLI/WebSocket entrypoints and request validation.
77
+ 5. `src/shared`: stable cross-cutting primitives only when genuinely shared.
78
+
79
+ Dependency direction is strict:
80
+
81
+ - `domain` must not import `application`, `presentation`, or `infrastructure`.
82
+ - `application` must not import `presentation` or concrete infrastructure adapters.
83
+ - `presentation` must not import concrete infrastructure.
84
+ - `infrastructure` implements ports defined by `domain` or `application`.
85
+
86
+ ## Non-Negotiable Naming
87
+
88
+ - Domain types: `src/domain/<context>/types/<name>.type.ts`.
89
+ - Business objects: `src/domain/<context>/business-objects/<name>.bo.ts`.
90
+ - Value objects: `src/domain/<context>/value-objects/<name>.vo.ts`.
91
+ - Domain entities, where the context already uses entities: `<name>.entity.ts`.
92
+ - Domain repository ports: `src/domain/<context>/repository-ports/<name>-repository.port.ts`.
93
+ - Application ports: `src/application/<context>/<module>/ports/in/*.port.ts` and `ports/out/*.port.ts`.
94
+ - Use cases: `<verb-noun>.use-case.ts`.
95
+ - Services: `<name>.service.ts`.
96
+ - Handlers: `<name>.handler.ts`.
97
+ - REST controllers: `<verb-noun>.controller.ts`, one controller class per file.
98
+ - Presentation validators: `<verb-noun>.presentation-validator.ts`.
99
+ - TypeORM entities: `<name>.orm-entity.ts`.
100
+ - TypeORM repositories: `<name>.typeorm-repository.ts`.
101
+ - TypeORM mappers: `<name>.mapper.ts`.
102
+ - TypeORM migrations: `<timestamp>-<action>.migration.ts`.
103
+ - Nest modules: `<module>.application.module.ts`, `<module>.module.ts`, or `<module>-orm.module.ts` by layer.
104
+
105
+ ## Imports And Lint First Principles
106
+
107
+ - Do not use relative imports in `src` or tests. Even same-folder imports are forbidden.
108
+ - Use aliases: `@domain/*`, `@application/*`, `@presentation/*`, `@infrastructure/*`, `@infrastructure/adapter/*`, `@shared/*`, `@src/*`.
109
+ - Use `import type` for type-only imports.
110
+ - Keep domain free of Nest, TypeORM, class-validator, HTTP, queue, AWS, cache, LLM, and framework concepts.
111
+ - Treat lint warnings as design feedback, not cosmetic noise.
112
+
113
+ ## Implementation Standard
114
+
115
+ A valid change must satisfy all relevant checks:
116
+
117
+ - It matches the current repository patterns unless the user explicitly requested a better pattern and the migration cost is justified.
118
+ - It keeps business invariants in domain objects, value objects, or domain validators.
119
+ - It keeps orchestration in application use cases, services, or handlers.
120
+ - It keeps transport mapping and request validation in presentation.
121
+ - It keeps concrete integrations in infrastructure.
122
+ - It handles promises, errors, transactions, retries, and mapping boundaries deliberately.
123
+ - It updates wiring, tests, docs, and SDD quality records when the change requires them.
124
+
125
+ ## Completion Contract
126
+
127
+ Before final response on API work:
128
+
129
+ 1. Run the smallest useful tests first, then broaden if the change crosses layers.
130
+ 2. Prefer `pnpm lint` and `pnpm build` for structural changes.
131
+ 3. Update `.sdd/active/<FEAT-ID>/5-quality.yaml` when an active feature exists and completion evidence is in scope.
132
+ 4. Declare frontend impact with `opensdd sdd frontend-impact <FEAT-ID> ...` when an active feature exists and the feature is being completed.
133
+ 5. Update affected docs required by SDD when the task changes architecture or behavior.
134
+ 6. Run `opensdd sdd finalize --ref <FEAT-ID>` only when feature completion is actually in scope.
135
+ 7. Final handoff must include changed areas, validation commands and results, skipped checks with reasons, SDD exception if any, and residual risks.
136
+
137
+ Never claim validation passed unless the command actually ran successfully.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "DevTrack API"
3
+ short_description: "Portable DevTrack API engineering governance, architecture, safety, validation, and quality skill."
4
+ default_prompt: "Use $devtrack-api to implement, review, refactor, test, or document DevTrack API work with OpenSDD, DDD/Clean Architecture, TypeORM, strict import boundaries, evidence-based validation, and safe operational constraints."
@@ -0,0 +1,381 @@
1
+ # Application And Presentation
2
+
3
+ ## Application Layer Intent
4
+
5
+ Application orchestrates use cases. It coordinates domain objects and ports.
6
+
7
+ Allowed responsibilities:
8
+
9
+ - Create domain objects.
10
+ - Call repository/output ports.
11
+ - Coordinate services and handlers.
12
+ - Translate application input into domain calls.
13
+ - Manage non-HTTP orchestration.
14
+ - Use Nest DI decorators where existing modules do.
15
+ - Handle application-level authorization or policy checks only when the repository already models them there.
16
+ - Normalize external messages when the normalization is part of application semantics.
17
+
18
+ Forbidden responsibilities:
19
+
20
+ - HTTP response shaping.
21
+ - TypeORM queries.
22
+ - ORM entities.
23
+ - class-validator DTOs.
24
+ - Business invariants that belong in domain.
25
+ - Concrete infrastructure adapters.
26
+ - Provider SDK calls, raw credentials, or transport-specific envelopes.
27
+
28
+ ## Canonical Application Layout
29
+
30
+ For each module:
31
+
32
+ ```text
33
+ src/application/<context>/<module>/
34
+ ports/in
35
+ ports/out
36
+ use-cases
37
+ services
38
+ handlers
39
+ agents
40
+ tools
41
+ <module>.application.module.ts
42
+ ```
43
+
44
+ Use `business` for standard API modules and `intelligence` for agent/conversation modules.
45
+
46
+ ## Application Design Rules
47
+
48
+ - Keep use cases small and orchestration-focused.
49
+ - Let domain objects validate business invariants.
50
+ - Prefer explicit input/output application types when a use case needs a stable contract beyond a domain object.
51
+ - Catch infrastructure-specific errors only in infrastructure, unless the error is represented by a port contract.
52
+ - Handle non-awaited promises with `.catch` and useful logging.
53
+ - Return domain objects or application output types, not presentation DTOs.
54
+ - Keep transactions behind ports or infrastructure abstractions unless a local pattern already defines an application-level unit-of-work port.
55
+ - Do not log secrets, tokens, raw provider payloads, full prompts with sensitive data, or personal data beyond what existing policy allows.
56
+
57
+ ## Input Ports
58
+
59
+ Input ports expose use cases to presentation or other application modules.
60
+
61
+ File:
62
+
63
+ ```text
64
+ ports/in/<verb-noun>.use-case.port.ts
65
+ ```
66
+
67
+ Pattern:
68
+
69
+ ```ts
70
+ import type { Example } from '@domain/example/business-objects/example.bo';
71
+ import type { ExampleType } from '@domain/example/types/example.type';
72
+
73
+ export const CreateExampleUseCasePortSymbol = Symbol('CreateExampleUseCasePortSymbol');
74
+
75
+ export interface CreateExampleUseCasePort {
76
+ execute(input: ExampleType.Input): Promise<Example>;
77
+ }
78
+ ```
79
+
80
+ Rules:
81
+
82
+ - Export a `Symbol`.
83
+ - Export an interface.
84
+ - Use `execute` for use cases.
85
+ - Use type-only imports for domain types.
86
+ - Do not expose presentation validators, ORM entities, provider SDK types, or HTTP request/response types.
87
+
88
+ ## Output Ports
89
+
90
+ Output ports describe external dependencies needed by application.
91
+
92
+ File:
93
+
94
+ ```text
95
+ ports/out/<capability>.port.ts
96
+ ```
97
+
98
+ Pattern:
99
+
100
+ ```ts
101
+ export const ExampleProducerPortSymbol = Symbol('ExampleProducerPortSymbol');
102
+
103
+ export interface ExampleProducerPort {
104
+ publish(event: ExampleCreatedDomainEvent): Promise<void>;
105
+ }
106
+ ```
107
+
108
+ Rules:
109
+
110
+ - Application owns the port when the dependency exists to satisfy a use case.
111
+ - Infrastructure implements it.
112
+ - Do not import concrete adapters.
113
+ - Keep contracts provider-neutral unless the integration is intentionally provider-specific and isolated.
114
+ - Represent failures in the contract when the use case needs to make a decision from them.
115
+
116
+ ## Use Cases
117
+
118
+ File:
119
+
120
+ ```text
121
+ use-cases/<verb-noun>.use-case.ts
122
+ ```
123
+
124
+ Pattern:
125
+
126
+ ```ts
127
+ import { Inject, Injectable, Logger, Optional } from '@nestjs/common';
128
+ import { Example } from '@domain/example/business-objects/example.bo';
129
+ import { ExampleRepositoryPortSymbol } from '@domain/example/repository-ports/example-repository.port';
130
+ import type { ExampleRepositoryPort } from '@domain/example/repository-ports/example-repository.port';
131
+ import type { ExampleType } from '@domain/example/types/example.type';
132
+ import type { CreateExampleUseCasePort } from '@application/business/example/ports/in/create-example.use-case.port';
133
+ import { ExampleProducerPortSymbol } from '@application/business/example/ports/out/example-producer.port';
134
+ import type { ExampleProducerPort } from '@application/business/example/ports/out/example-producer.port';
135
+
136
+ @Injectable()
137
+ export class CreateExampleUseCase implements CreateExampleUseCasePort {
138
+ private readonly logger = new Logger(CreateExampleUseCase.name);
139
+
140
+ constructor(
141
+ @Inject(ExampleRepositoryPortSymbol)
142
+ private readonly repository: ExampleRepositoryPort,
143
+ @Optional()
144
+ @Inject(ExampleProducerPortSymbol)
145
+ private readonly producer?: ExampleProducerPort,
146
+ ) {}
147
+
148
+ async execute(input: ExampleType.Input): Promise<Example> {
149
+ const example = new Example(input);
150
+ const saved = await this.repository.save(example);
151
+
152
+ if (this.producer) {
153
+ this.producer.publish(saved.toPersistenceObject()).catch((error) => {
154
+ this.logger.error('Failed to publish Example event', error);
155
+ });
156
+ }
157
+
158
+ return saved;
159
+ }
160
+ }
161
+ ```
162
+
163
+ Rules:
164
+
165
+ - Keep use cases small and orchestration-focused.
166
+ - Let domain objects validate business invariants.
167
+ - Catch infrastructure-specific errors only in infrastructure, unless the error is represented by a port contract.
168
+ - Handle non-awaited promises with `.catch`.
169
+ - Return domain objects or application output types, not presentation DTOs.
170
+ - Do not call repositories outside their port contract.
171
+ - Do not implement retries, polling, SDK configuration, or transport acknowledgements in use cases.
172
+
173
+ ## Services
174
+
175
+ File:
176
+
177
+ ```text
178
+ services/<name>.service.ts
179
+ ```
180
+
181
+ Use services for reusable application orchestration that is not a single user action. A service can depend on ports and domain objects. It must not import presentation or concrete infrastructure.
182
+
183
+ ## Handlers
184
+
185
+ File:
186
+
187
+ ```text
188
+ handlers/<name>.handler.ts
189
+ ```
190
+
191
+ Use handlers for application-level event or message processing. Keep queue polling, ack, retry, and DLQ in infrastructure. Keep message normalization and use-case invocation in application when the normalization is part of application semantics.
192
+
193
+ ## Agents And Tools
194
+
195
+ Under intelligence modules, use:
196
+
197
+ ```text
198
+ agents
199
+ tools
200
+ ```
201
+
202
+ The canonical generic runtime is:
203
+
204
+ ```text
205
+ src/application/intelligence/common/agent-runtime
206
+ ```
207
+
208
+ Do not add new runtime ownership to `src/shared/agent` or `src/application/intelligence/agents`.
209
+
210
+ Rules:
211
+
212
+ - Agent orchestration belongs in application; provider calls and credentials belong in infrastructure.
213
+ - Tool interfaces should be explicit, typed, and provider-neutral where practical.
214
+ - Tools must enforce application/domain constraints instead of bypassing use cases.
215
+ - Do not expose raw prompts, internal chain data, provider credentials, or internal lifecycle payloads to presentation.
216
+ - Tool calls that mutate data or trigger external side effects must have clear input contracts and tests.
217
+ - Log failures without leaking sensitive payloads.
218
+
219
+ ## Application Modules
220
+
221
+ File:
222
+
223
+ ```text
224
+ src/application/<context>/<module>/<module>.application.module.ts
225
+ ```
226
+
227
+ Pattern:
228
+
229
+ ```ts
230
+ import { Module } from '@nestjs/common';
231
+ import { CreateExampleUseCase } from '@application/business/example/use-cases/create-example.use-case';
232
+ import { CreateExampleUseCasePortSymbol } from '@application/business/example/ports/in/create-example.use-case.port';
233
+
234
+ @Module({
235
+ providers: [{ provide: CreateExampleUseCasePortSymbol, useClass: CreateExampleUseCase }],
236
+ exports: [CreateExampleUseCasePortSymbol],
237
+ })
238
+ export class ExampleApplicationModule {}
239
+ ```
240
+
241
+ Also wire the module in `src/application/application.module.ts` when it is part of the public application graph.
242
+
243
+ ## Presentation Layer Intent
244
+
245
+ Presentation handles transport:
246
+
247
+ - REST controllers.
248
+ - GraphQL resolvers/types.
249
+ - CLI commands.
250
+ - WebSocket gateways/dtos.
251
+ - Guards and decorators.
252
+ - Presentation validators and Swagger docs.
253
+
254
+ Presentation must be thin. It maps request input to application input and returns output.
255
+
256
+ Presentation must not become a backdoor for business rules, infrastructure access, provider calls, or internal payload exposure.
257
+
258
+ ## REST Controllers
259
+
260
+ Rules:
261
+
262
+ - One controller class per file.
263
+ - One public route method per controller, usually `handle`.
264
+ - Inject application input port through its symbol.
265
+ - Extend `GenericController<Port>` when matching existing REST patterns.
266
+ - Generate transport-only values such as request UUIDs here when existing pattern does so.
267
+ - Do not call repositories, TypeORM, AWS SDK, queues, LLM providers, vector stores, or domain validators directly.
268
+ - Do not return raw domain internals, provider responses, internal lifecycle payloads, or sensitive data.
269
+ - Keep error mapping aligned with existing exception filters and controller patterns.
270
+
271
+ Pattern:
272
+
273
+ ```ts
274
+ import { Body, Controller, Post } from '@nestjs/common';
275
+ import { ApiCreatedResponse, ApiOperation, ApiTags } from '@nestjs/swagger';
276
+ import { randomUUID } from 'crypto';
277
+ import { Inject } from '@nestjs/common';
278
+ import { CreateExampleUseCasePortSymbol } from '@application/business/example/ports/in/create-example.use-case.port';
279
+ import type { CreateExampleUseCasePort } from '@application/business/example/ports/in/create-example.use-case.port';
280
+ import { GenericController } from '@presentation/generic-controller';
281
+ import { CreateExamplePresentationValidator } from '@presentation/rest/example/presentation-validators/create-example.presentation-validator';
282
+
283
+ @ApiTags('Examples')
284
+ @Controller('examples')
285
+ export class CreateExampleController extends GenericController<CreateExampleUseCasePort> {
286
+ constructor(@Inject(CreateExampleUseCasePortSymbol) useCase: CreateExampleUseCasePort) {
287
+ super(useCase);
288
+ }
289
+
290
+ @Post()
291
+ @ApiOperation({ summary: 'Criar example' })
292
+ @ApiCreatedResponse({ description: 'Example criado com sucesso' })
293
+ async handle(@Body() validator: CreateExamplePresentationValidator) {
294
+ const example = await this.useCase.execute({
295
+ id: randomUUID(),
296
+ name: validator.name,
297
+ });
298
+
299
+ return example.value;
300
+ }
301
+ }
302
+ ```
303
+
304
+ ## Presentation Validators
305
+
306
+ File:
307
+
308
+ ```text
309
+ presentation-validators/<verb-noun>.presentation-validator.ts
310
+ ```
311
+
312
+ Use `class-validator` and Swagger decorators for request shape. Do not encode business-only rules here.
313
+
314
+ Pattern:
315
+
316
+ ```ts
317
+ import { ApiProperty } from '@nestjs/swagger';
318
+ import { IsString, Length } from 'class-validator';
319
+
320
+ export class CreateExamplePresentationValidator {
321
+ @ApiProperty({
322
+ description: 'Nome do example',
323
+ example: 'Example A',
324
+ minLength: 2,
325
+ maxLength: 120,
326
+ })
327
+ @IsString()
328
+ @Length(2, 120)
329
+ name!: string;
330
+ }
331
+ ```
332
+
333
+ Rules:
334
+
335
+ - Validate transport shape only.
336
+ - Keep business invariants in domain.
337
+ - Do not import domain BOs or TypeORM entities into validators.
338
+ - Do not expose secret defaults or internal provider configuration in Swagger examples.
339
+
340
+ ## REST Modules
341
+
342
+ File:
343
+
344
+ ```text
345
+ src/presentation/rest/<module>/<module>.module.ts
346
+ ```
347
+
348
+ Pattern:
349
+
350
+ ```ts
351
+ import { Module } from '@nestjs/common';
352
+ import { ApplicationModule } from '@application/application.module';
353
+ import { CreateExampleController } from '@presentation/rest/example/controllers/create-example.controller';
354
+
355
+ @Module({
356
+ imports: [ApplicationModule],
357
+ controllers: [CreateExampleController],
358
+ })
359
+ export class ExampleModule {}
360
+ ```
361
+
362
+ Wire into `src/presentation/rest/rest.presentation.module.ts` if the REST module is new.
363
+
364
+ ## GraphQL, CLI, And WebSocket
365
+
366
+ Follow existing folders:
367
+
368
+ ```text
369
+ src/presentation/graphql/<module>
370
+ src/presentation/cli/<module>
371
+ src/presentation/websocket
372
+ ```
373
+
374
+ Rules:
375
+
376
+ - Keep resolvers/commands/gateways thin.
377
+ - Inject application ports.
378
+ - Keep transport DTOs separate from domain types.
379
+ - Guards remain presentation concerns.
380
+ - Do not bypass application use cases to call infrastructure directly.
381
+ - Validate and sanitize external input before mapping to application input.