@dewtech/dare-cli 2.17.0 → 3.0.0

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 (344) hide show
  1. package/README.md +98 -3
  2. package/dist/__tests__/confidence.test.d.ts +2 -0
  3. package/dist/__tests__/confidence.test.d.ts.map +1 -0
  4. package/dist/__tests__/confidence.test.js +73 -0
  5. package/dist/__tests__/confidence.test.js.map +1 -0
  6. package/dist/__tests__/datamodel.test.d.ts +2 -0
  7. package/dist/__tests__/datamodel.test.d.ts.map +1 -0
  8. package/dist/__tests__/datamodel.test.js +131 -0
  9. package/dist/__tests__/datamodel.test.js.map +1 -0
  10. package/dist/__tests__/dna-detector.test.d.ts +2 -0
  11. package/dist/__tests__/dna-detector.test.d.ts.map +1 -0
  12. package/dist/__tests__/dna-detector.test.js +97 -0
  13. package/dist/__tests__/dna-detector.test.js.map +1 -0
  14. package/dist/__tests__/dna-facts.test.d.ts +2 -0
  15. package/dist/__tests__/dna-facts.test.d.ts.map +1 -0
  16. package/dist/__tests__/dna-facts.test.js +44 -0
  17. package/dist/__tests__/dna-facts.test.js.map +1 -0
  18. package/dist/__tests__/graph-renderer.test.d.ts +2 -0
  19. package/dist/__tests__/graph-renderer.test.d.ts.map +1 -0
  20. package/dist/__tests__/graph-renderer.test.js +85 -0
  21. package/dist/__tests__/graph-renderer.test.js.map +1 -0
  22. package/dist/__tests__/migration.test.d.ts +2 -0
  23. package/dist/__tests__/migration.test.d.ts.map +1 -0
  24. package/dist/__tests__/migration.test.js +77 -0
  25. package/dist/__tests__/migration.test.js.map +1 -0
  26. package/dist/__tests__/module-detector.test.d.ts +2 -0
  27. package/dist/__tests__/module-detector.test.d.ts.map +1 -0
  28. package/dist/__tests__/module-detector.test.js +83 -0
  29. package/dist/__tests__/module-detector.test.js.map +1 -0
  30. package/dist/__tests__/refine.test.js +49 -49
  31. package/dist/__tests__/reverse-facts.test.d.ts +2 -0
  32. package/dist/__tests__/reverse-facts.test.d.ts.map +1 -0
  33. package/dist/__tests__/reverse-facts.test.js +78 -0
  34. package/dist/__tests__/reverse-facts.test.js.map +1 -0
  35. package/dist/__tests__/review.test.js +38 -38
  36. package/dist/__tests__/validate.test.js +65 -65
  37. package/dist/bin/dare.js +32 -3
  38. package/dist/bin/dare.js.map +1 -1
  39. package/dist/commands/blueprint.js +122 -122
  40. package/dist/commands/dag.d.ts.map +1 -1
  41. package/dist/commands/dag.js +43 -79
  42. package/dist/commands/dag.js.map +1 -1
  43. package/dist/commands/dna.d.ts +3 -0
  44. package/dist/commands/dna.d.ts.map +1 -0
  45. package/dist/commands/dna.js +69 -0
  46. package/dist/commands/dna.js.map +1 -0
  47. package/dist/commands/migrate.d.ts +3 -0
  48. package/dist/commands/migrate.d.ts.map +1 -0
  49. package/dist/commands/migrate.js +101 -0
  50. package/dist/commands/migrate.js.map +1 -0
  51. package/dist/commands/new.d.ts +16 -0
  52. package/dist/commands/new.d.ts.map +1 -0
  53. package/dist/commands/new.js +103 -0
  54. package/dist/commands/new.js.map +1 -0
  55. package/dist/commands/reverse.d.ts +3 -0
  56. package/dist/commands/reverse.d.ts.map +1 -0
  57. package/dist/commands/reverse.js +201 -0
  58. package/dist/commands/reverse.js.map +1 -0
  59. package/dist/commands/welcome.d.ts +14 -0
  60. package/dist/commands/welcome.d.ts.map +1 -0
  61. package/dist/commands/welcome.js +29 -0
  62. package/dist/commands/welcome.js.map +1 -0
  63. package/dist/skills/commands/add.d.ts +23 -0
  64. package/dist/skills/commands/add.d.ts.map +1 -0
  65. package/dist/skills/commands/add.js +206 -0
  66. package/dist/skills/commands/add.js.map +1 -0
  67. package/dist/skills/commands/info.d.ts +14 -0
  68. package/dist/skills/commands/info.d.ts.map +1 -0
  69. package/dist/skills/commands/info.js +99 -0
  70. package/dist/skills/commands/info.js.map +1 -0
  71. package/dist/skills/commands/list.d.ts +19 -0
  72. package/dist/skills/commands/list.d.ts.map +1 -0
  73. package/dist/skills/commands/list.js +163 -0
  74. package/dist/skills/commands/list.js.map +1 -0
  75. package/dist/skills/commands/publish.d.ts +56 -0
  76. package/dist/skills/commands/publish.d.ts.map +1 -0
  77. package/dist/skills/commands/publish.js +272 -0
  78. package/dist/skills/commands/publish.js.map +1 -0
  79. package/dist/skills/commands/remove.d.ts +19 -0
  80. package/dist/skills/commands/remove.d.ts.map +1 -0
  81. package/dist/skills/commands/remove.js +96 -0
  82. package/dist/skills/commands/remove.js.map +1 -0
  83. package/dist/skills/commands/update.d.ts +31 -0
  84. package/dist/skills/commands/update.d.ts.map +1 -0
  85. package/dist/skills/commands/update.js +132 -0
  86. package/dist/skills/commands/update.js.map +1 -0
  87. package/dist/skills/index.d.ts +22 -0
  88. package/dist/skills/index.d.ts.map +1 -0
  89. package/dist/skills/index.js +33 -0
  90. package/dist/skills/index.js.map +1 -0
  91. package/dist/skills/manifest.d.ts +54 -0
  92. package/dist/skills/manifest.d.ts.map +1 -0
  93. package/dist/skills/manifest.js +162 -0
  94. package/dist/skills/manifest.js.map +1 -0
  95. package/dist/skills/registry-local.d.ts +67 -0
  96. package/dist/skills/registry-local.d.ts.map +1 -0
  97. package/dist/skills/registry-local.js +130 -0
  98. package/dist/skills/registry-local.js.map +1 -0
  99. package/dist/skills/registry-mock.json +109 -0
  100. package/dist/skills/registry-remote.d.ts +110 -0
  101. package/dist/skills/registry-remote.d.ts.map +1 -0
  102. package/dist/skills/registry-remote.js +246 -0
  103. package/dist/skills/registry-remote.js.map +1 -0
  104. package/dist/skills/registry.d.ts +49 -0
  105. package/dist/skills/registry.d.ts.map +1 -0
  106. package/dist/skills/registry.js +94 -0
  107. package/dist/skills/registry.js.map +1 -0
  108. package/dist/skills/tests/manifest.spec.d.ts +8 -0
  109. package/dist/skills/tests/manifest.spec.d.ts.map +1 -0
  110. package/dist/skills/tests/manifest.spec.js +176 -0
  111. package/dist/skills/tests/manifest.spec.js.map +1 -0
  112. package/dist/skills/tests/publish.spec.d.ts +12 -0
  113. package/dist/skills/tests/publish.spec.d.ts.map +1 -0
  114. package/dist/skills/tests/publish.spec.js +276 -0
  115. package/dist/skills/tests/publish.spec.js.map +1 -0
  116. package/dist/skills/tests/registry-local.spec.d.ts +8 -0
  117. package/dist/skills/tests/registry-local.spec.d.ts.map +1 -0
  118. package/dist/skills/tests/registry-local.spec.js +231 -0
  119. package/dist/skills/tests/registry-local.spec.js.map +1 -0
  120. package/dist/skills/tests/registry.spec.d.ts +7 -0
  121. package/dist/skills/tests/registry.spec.d.ts.map +1 -0
  122. package/dist/skills/tests/registry.spec.js +58 -0
  123. package/dist/skills/tests/registry.spec.js.map +1 -0
  124. package/dist/skills/tests/remote-registry.spec.d.ts +9 -0
  125. package/dist/skills/tests/remote-registry.spec.d.ts.map +1 -0
  126. package/dist/skills/tests/remote-registry.spec.js +357 -0
  127. package/dist/skills/tests/remote-registry.spec.js.map +1 -0
  128. package/dist/skills/tests/update.spec.d.ts +9 -0
  129. package/dist/skills/tests/update.spec.d.ts.map +1 -0
  130. package/dist/skills/tests/update.spec.js +166 -0
  131. package/dist/skills/tests/update.spec.js.map +1 -0
  132. package/dist/utils/banner.d.ts +28 -0
  133. package/dist/utils/banner.d.ts.map +1 -0
  134. package/dist/utils/banner.js +77 -0
  135. package/dist/utils/banner.js.map +1 -0
  136. package/dist/utils/banner.spec.d.ts +5 -0
  137. package/dist/utils/banner.spec.d.ts.map +1 -0
  138. package/dist/utils/banner.spec.js +253 -0
  139. package/dist/utils/banner.spec.js.map +1 -0
  140. package/dist/utils/confidence.d.ts +41 -0
  141. package/dist/utils/confidence.d.ts.map +1 -0
  142. package/dist/utils/confidence.js +101 -0
  143. package/dist/utils/confidence.js.map +1 -0
  144. package/dist/utils/datamodel.d.ts +41 -0
  145. package/dist/utils/datamodel.d.ts.map +1 -0
  146. package/dist/utils/datamodel.js +535 -0
  147. package/dist/utils/datamodel.js.map +1 -0
  148. package/dist/utils/dna-detector.d.ts +61 -0
  149. package/dist/utils/dna-detector.d.ts.map +1 -0
  150. package/dist/utils/dna-detector.js +354 -0
  151. package/dist/utils/dna-detector.js.map +1 -0
  152. package/dist/utils/dna-facts.d.ts +13 -0
  153. package/dist/utils/dna-facts.d.ts.map +1 -0
  154. package/dist/utils/dna-facts.js +109 -0
  155. package/dist/utils/dna-facts.js.map +1 -0
  156. package/dist/utils/excalidraw-renderer.d.ts +11 -71
  157. package/dist/utils/excalidraw-renderer.d.ts.map +1 -1
  158. package/dist/utils/excalidraw-renderer.js +29 -162
  159. package/dist/utils/excalidraw-renderer.js.map +1 -1
  160. package/dist/utils/graph-renderer.d.ts +115 -0
  161. package/dist/utils/graph-renderer.d.ts.map +1 -0
  162. package/dist/utils/graph-renderer.js +216 -0
  163. package/dist/utils/graph-renderer.js.map +1 -0
  164. package/dist/utils/migration.d.ts +64 -0
  165. package/dist/utils/migration.d.ts.map +1 -0
  166. package/dist/utils/migration.js +183 -0
  167. package/dist/utils/migration.js.map +1 -0
  168. package/dist/utils/module-detector.d.ts +46 -0
  169. package/dist/utils/module-detector.d.ts.map +1 -0
  170. package/dist/utils/module-detector.js +348 -0
  171. package/dist/utils/module-detector.js.map +1 -0
  172. package/dist/utils/project-generator.js +252 -252
  173. package/dist/utils/reverse-facts.d.ts +50 -0
  174. package/dist/utils/reverse-facts.d.ts.map +1 -0
  175. package/dist/utils/reverse-facts.js +291 -0
  176. package/dist/utils/reverse-facts.js.map +1 -0
  177. package/dist/utils/stack-bootstrap.js +371 -371
  178. package/package.json +8 -3
  179. package/templates/DARE-dag-example.yaml +280 -280
  180. package/templates/UPDATE-MANIFEST.json +48 -48
  181. package/templates/backend/node-nestjs/.env.example +9 -9
  182. package/templates/backend/node-nestjs/nest-cli.json +8 -8
  183. package/templates/backend/node-nestjs/package.json +50 -50
  184. package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
  185. package/templates/backend/node-nestjs/src/app.module.ts +15 -15
  186. package/templates/backend/node-nestjs/src/app.service.ts +8 -8
  187. package/templates/backend/node-nestjs/src/main.ts +24 -24
  188. package/templates/backend/node-nestjs/tsconfig.json +21 -21
  189. package/templates/backend/php-laravel/.env.example +22 -22
  190. package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
  191. package/templates/backend/php-laravel/composer.json +40 -40
  192. package/templates/backend/python-fastapi/.env.example +4 -4
  193. package/templates/backend/python-fastapi/app/api/router.py +8 -8
  194. package/templates/backend/python-fastapi/app/core/config.py +20 -20
  195. package/templates/backend/python-fastapi/main.py +35 -35
  196. package/templates/backend/python-fastapi/requirements.txt +13 -13
  197. package/templates/backend/rust-axum/.env.example +3 -3
  198. package/templates/backend/rust-axum/Cargo.toml +23 -23
  199. package/templates/backend/rust-axum/src/errors.rs +30 -30
  200. package/templates/backend/rust-axum/src/main.rs +32 -32
  201. package/templates/backend/rust-axum/src/routes.rs +6 -6
  202. package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
  203. package/templates/frontend/leptos-csr/Cargo.toml +16 -16
  204. package/templates/frontend/leptos-csr/Trunk.toml +10 -10
  205. package/templates/frontend/leptos-csr/index.html +11 -11
  206. package/templates/frontend/leptos-csr/src/lib.rs +20 -20
  207. package/templates/frontend/leptos-csr/style/main.scss +19 -19
  208. package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
  209. package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
  210. package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
  211. package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
  212. package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
  213. package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
  214. package/templates/frontend/react/index.html +12 -12
  215. package/templates/frontend/react/package.json +35 -35
  216. package/templates/frontend/react/src/App.tsx +25 -25
  217. package/templates/frontend/react/src/main.tsx +9 -9
  218. package/templates/frontend/vue/package.json +32 -32
  219. package/templates/frontend/vue/src/App.vue +7 -7
  220. package/templates/frontend/vue/src/main.ts +10 -10
  221. package/templates/frontend/vue/src/router/index.ts +14 -14
  222. package/templates/frontend/vue/src/views/HomeView.vue +6 -6
  223. package/templates/hooks/pre-commit-dare-validate +24 -24
  224. package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -0
  225. package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -0
  226. package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -0
  227. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
  228. package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -0
  229. package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -0
  230. package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -0
  231. package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -0
  232. package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -0
  233. package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -0
  234. package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -0
  235. package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -0
  236. package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -0
  237. package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -114
  238. package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -0
  239. package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -111
  240. package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -0
  241. package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
  242. package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -0
  243. package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -265
  244. package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -0
  245. package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -0
  246. package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -0
  247. package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -0
  248. package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -0
  249. package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -0
  250. package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
  251. package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
  252. package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -141
  253. package/templates/ide/claude/.claude/commands/dare-ax.md +131 -0
  254. package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -134
  255. package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -0
  256. package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -151
  257. package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
  258. package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -0
  259. package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
  260. package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
  261. package/templates/ide/claude/.claude/commands/dare-dna.md +75 -0
  262. package/templates/ide/claude/.claude/commands/dare-docker.md +207 -0
  263. package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
  264. package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -0
  265. package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -0
  266. package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -0
  267. package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -0
  268. package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -0
  269. package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -0
  270. package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -0
  271. package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -0
  272. package/templates/ide/claude/.claude/commands/dare-refine.md +145 -145
  273. package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -0
  274. package/templates/ide/claude/.claude/commands/dare-review.md +113 -113
  275. package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
  276. package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
  277. package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
  278. package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
  279. package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -0
  280. package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -0
  281. package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -0
  282. package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -0
  283. package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -0
  284. package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -0
  285. package/templates/ide/claude/.claude/settings.example.json +35 -35
  286. package/templates/ide/claude/CLAUDE.md +146 -146
  287. package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
  288. package/templates/ide/claude/templates/DESIGN-template.md +129 -129
  289. package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -141
  290. package/templates/ide/cursor/.cursor/commands/dag-viz.md +139 -0
  291. package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +86 -86
  292. package/templates/ide/cursor/.cursor/commands/generate-design.md +35 -35
  293. package/templates/ide/cursor/.cursor/commands/generate-tasks.md +184 -184
  294. package/templates/ide/cursor/.cursor/commands/refine-task.md +107 -107
  295. package/templates/ide/cursor/.cursor/commands/review-task.md +91 -91
  296. package/templates/ide/cursor/.cursor/commands/run-dag.md +110 -110
  297. package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -0
  298. package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -0
  299. package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -0
  300. package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
  301. package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -0
  302. package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -0
  303. package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -0
  304. package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -0
  305. package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -0
  306. package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -0
  307. package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -0
  308. package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -0
  309. package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -0
  310. package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -0
  311. package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -0
  312. package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -0
  313. package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -0
  314. package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -0
  315. package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
  316. package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
  317. package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
  318. package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
  319. package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -141
  320. package/templates/shared/docker-compose.yml +41 -41
  321. package/dist/__tests__/dag-runner/adapters.test.d.ts +0 -2
  322. package/dist/__tests__/dag-runner/adapters.test.d.ts.map +0 -1
  323. package/dist/__tests__/dag-runner/adapters.test.js +0 -134
  324. package/dist/__tests__/dag-runner/adapters.test.js.map +0 -1
  325. package/dist/dag-runner/adapters/antigravity.d.ts +0 -6
  326. package/dist/dag-runner/adapters/antigravity.d.ts.map +0 -1
  327. package/dist/dag-runner/adapters/antigravity.js +0 -54
  328. package/dist/dag-runner/adapters/antigravity.js.map +0 -1
  329. package/dist/dag-runner/adapters/claude.d.ts +0 -6
  330. package/dist/dag-runner/adapters/claude.d.ts.map +0 -1
  331. package/dist/dag-runner/adapters/claude.js +0 -48
  332. package/dist/dag-runner/adapters/claude.js.map +0 -1
  333. package/dist/dag-runner/adapters/cursor.d.ts +0 -6
  334. package/dist/dag-runner/adapters/cursor.d.ts.map +0 -1
  335. package/dist/dag-runner/adapters/cursor.js +0 -58
  336. package/dist/dag-runner/adapters/cursor.js.map +0 -1
  337. package/dist/dag-runner/adapters/index.d.ts +0 -46
  338. package/dist/dag-runner/adapters/index.d.ts.map +0 -1
  339. package/dist/dag-runner/adapters/index.js +0 -55
  340. package/dist/dag-runner/adapters/index.js.map +0 -1
  341. package/dist/dag-runner/utils/timeout.d.ts +0 -27
  342. package/dist/dag-runner/utils/timeout.d.ts.map +0 -1
  343. package/dist/dag-runner/utils/timeout.js +0 -55
  344. package/dist/dag-runner/utils/timeout.js.map +0 -1
@@ -0,0 +1,149 @@
1
+ # /dare-frontend-design
2
+
3
+ Arquitetura frontend DARE para projetos React e Vue. Detecta god components, fetch inline em JSX/template, e gera scaffold DARE-compliant.
4
+
5
+ ## Como usar
6
+
7
+ ```
8
+ /dare-frontend-design # audita projeto atual
9
+ /dare-frontend-design lint # roda checks AP-01 a AP-06
10
+ /dare-frontend-design scaffold <página> # gera Page + Container + Hook + Presentational
11
+ ```
12
+
13
+ ## Arquitetura
14
+
15
+ ```
16
+ Page → Container (lógica) → Presentational (puro)
17
+
18
+ Hook (fetch + cache)
19
+ ```
20
+
21
+ ## As 4 regras
22
+
23
+ ### 1. Componente < 300 linhas
24
+
25
+ Se passar de 300, quebrar em sub-componentes, hooks ou helpers.
26
+
27
+ ### 2. Zero `fetch()` em JSX/template
28
+
29
+ Use TanStack Query (React/Vue), SWR ou similar. Hook devolve `{ data, isLoading, error }`.
30
+
31
+ ### 3. Error Boundary em cada Page
32
+
33
+ React: `<ErrorBoundary>` wrapping rotas.
34
+ Vue: `onErrorCaptured` em layout/page-level.
35
+
36
+ ### 4. Bundle size monitorado
37
+
38
+ `rollup-plugin-visualizer`, `webpack-bundle-analyzer`. Limite por chunk (ex: <300KB inicial).
39
+
40
+ ## Métricas obrigatórias
41
+
42
+ | ID | Métrica |
43
+ |---|---|
44
+ | M-01 | 100% de componentes < 300 linhas |
45
+ | M-02 | 0 `fetch()` direto em JSX/template |
46
+ | M-03 | 100% de páginas com error boundary |
47
+ | M-04 | Bundle config presente |
48
+
49
+ ## Antipatterns
50
+
51
+ | AP | Antipattern | Correção |
52
+ |---|---|---|
53
+ | AP-01 | God component (>300 linhas) | Quebrar em sub-componentes + hooks |
54
+ | AP-02 | Fetch em JSX | Mover para hook |
55
+ | AP-03 | Booleanos isLoading espalhados | Discriminated union de estados |
56
+ | AP-04 | Sem error boundary | Wrap em `<ErrorBoundary>` |
57
+ | AP-05 | Estilo inline pesado | CSS module/styled |
58
+ | AP-06 | Props drilling profundo | Context/Zustand/Pinia |
59
+
60
+ ## O que fazer
61
+
62
+ ### Passo 1: Detectar god components
63
+
64
+ ```bash
65
+ find src/ -name "*.tsx" -o -name "*.vue" | xargs wc -l | sort -rn | head -20
66
+ ```
67
+
68
+ ### Passo 2: Detectar fetch inline
69
+
70
+ ```bash
71
+ grep -rn "fetch(\|axios\." src/components/ src/pages/
72
+ ```
73
+
74
+ ### Passo 3: Migrar para hooks de dados
75
+
76
+ ```tsx
77
+ // Antes
78
+ function UserList() {
79
+ const [users, setUsers] = useState([]);
80
+ useEffect(() => { fetch('/api/users').then(r => r.json()).then(setUsers); }, []);
81
+ return <ul>{users.map(...)}</ul>;
82
+ }
83
+
84
+ // Depois
85
+ function UserList() {
86
+ const { data, isLoading, error } = useUsers();
87
+ if (isLoading) return <Spinner />;
88
+ if (error) return <ErrorMessage error={error} />;
89
+ return <ul>{data.map(...)}</ul>;
90
+ }
91
+
92
+ function useUsers() {
93
+ return useQuery({ queryKey: ['users'], queryFn: () => api.users.list() });
94
+ }
95
+ ```
96
+
97
+ ### Passo 4: Error boundaries
98
+
99
+ ```tsx
100
+ // React
101
+ class ErrorBoundary extends React.Component { ... }
102
+
103
+ <ErrorBoundary fallback={<ErrorPage />}>
104
+ <UserList />
105
+ </ErrorBoundary>
106
+ ```
107
+
108
+ ```vue
109
+ <!-- Vue -->
110
+ <script setup>
111
+ import { onErrorCaptured } from 'vue';
112
+ onErrorCaptured((err) => { logError(err); return false; });
113
+ </script>
114
+ ```
115
+
116
+ ### Passo 5: Bundle analyzer
117
+
118
+ ```typescript
119
+ // vite.config.ts
120
+ import { visualizer } from 'rollup-plugin-visualizer';
121
+ export default {
122
+ plugins: [visualizer({ open: false, gzipSize: true })],
123
+ build: { chunkSizeWarningLimit: 300 }
124
+ };
125
+ ```
126
+
127
+ ## Stack recomendada
128
+
129
+ | Camada | React | Vue |
130
+ |---|---|---|
131
+ | Roteamento | React Router / Next | Vue Router / Nuxt |
132
+ | Estado server | TanStack Query | TanStack Vue Query |
133
+ | Estado client | Zustand / Jotai | Pinia |
134
+ | Styling | Tailwind / CSS Modules | Tailwind / SCSS |
135
+ | Testes | Vitest + Testing Library | Vitest + Testing Library |
136
+
137
+ ## Saída esperada
138
+
139
+ Reporte:
140
+ - Top 10 componentes com mais linhas
141
+ - Lista de `fetch()`/`axios` inline em componentes
142
+ - Páginas sem error boundary
143
+ - Configuração de bundle (presente/ausente)
144
+
145
+ $ARGUMENTS
146
+
147
+ ---
148
+
149
+ Skill MIT — parte do DARE Method.
@@ -0,0 +1,211 @@
1
+ # /dare-laravel-api
2
+
3
+ Padrões DARE para APIs REST em Laravel 11 + PHP 8.3. Strict Types, FormRequests, Services, Resources, Repositories, Eloquent + casts, tratamento global de exceções, testes Pest, PHPStan/Larastan nível 8.
4
+
5
+ ## Como usar
6
+
7
+ ```
8
+ /dare-laravel-api # audita projeto Laravel
9
+ /dare-laravel-api scaffold users # gera CRUD com camadas
10
+ /dare-laravel-api migrate-controllers # extrai lógica de Controllers para Services
11
+ ```
12
+
13
+ ## Stack canônica
14
+
15
+ - PHP 8.3 com `declare(strict_types=1);` em todo arquivo
16
+ - Laravel 11.x modo API
17
+ - PostgreSQL 16 ou MySQL 8
18
+ - Pest para testes (ou PHPUnit 11)
19
+ - PHPStan + Larastan nível 8
20
+ - Pint para formatação
21
+ - Sanctum para auth
22
+
23
+ ## Layered Design
24
+
25
+ | Camada | Pasta Laravel |
26
+ |---|---|
27
+ | Handler | `app/Http/Controllers/` |
28
+ | Service | `app/Services/` |
29
+ | Repository | `app/Repositories/` |
30
+ | Model | `app/Models/` |
31
+ | Presenter | `app/Http/Resources/` |
32
+
33
+ ## Controllers (Handler)
34
+
35
+ ```php
36
+ <?php declare(strict_types=1);
37
+
38
+ namespace App\Http\Controllers;
39
+
40
+ use App\Http\Requests\StoreUserRequest;
41
+ use App\Http\Resources\UserResource;
42
+ use App\Services\RegisterUser;
43
+
44
+ final class UserApiController extends Controller
45
+ {
46
+ public function __construct(private RegisterUser $service) {}
47
+
48
+ public function store(StoreUserRequest $request): UserResource
49
+ {
50
+ $user = $this->service->execute($request->validated());
51
+ return new UserResource($user);
52
+ }
53
+ }
54
+ ```
55
+
56
+ Regras:
57
+ - Apenas: recebe → valida via FormRequest → chama Service → retorna Resource
58
+ - NUNCA: query Eloquent, lógica de negócio, validação inline
59
+
60
+ ## FormRequests
61
+
62
+ ```php
63
+ final class StoreUserRequest extends FormRequest
64
+ {
65
+ public function authorize(): bool { return $this->user()->can('create', User::class); }
66
+
67
+ public function rules(): array {
68
+ return [
69
+ 'email' => ['required', 'email', 'unique:users,email'],
70
+ 'password' => ['required', 'string', 'min:12'],
71
+ ];
72
+ }
73
+ }
74
+ ```
75
+
76
+ ## Services
77
+
78
+ Uma operação por classe:
79
+
80
+ ```php
81
+ final class RegisterUser
82
+ {
83
+ public function __construct(private UserRepository $users) {}
84
+
85
+ public function execute(array $data): User
86
+ {
87
+ if ($this->users->existsByEmail($data['email'])) {
88
+ throw new UserAlreadyExistsException();
89
+ }
90
+ return $this->users->create([...$data, 'password' => Hash::make($data['password'])]);
91
+ }
92
+ }
93
+ ```
94
+
95
+ ## Repositories
96
+
97
+ ```php
98
+ final class UserRepository
99
+ {
100
+ public function existsByEmail(string $email): bool {
101
+ return User::where('email', $email)->exists();
102
+ }
103
+ public function create(array $data): User {
104
+ return User::create($data);
105
+ }
106
+ }
107
+ ```
108
+
109
+ ## Resources
110
+
111
+ Nunca retorne Model direto:
112
+
113
+ ```php
114
+ final class UserResource extends JsonResource
115
+ {
116
+ public function toArray($request): array {
117
+ return [
118
+ 'id' => $this->id,
119
+ 'email' => $this->email,
120
+ 'createdAt' => $this->created_at?->toIso8601String(),
121
+ ];
122
+ }
123
+ }
124
+ ```
125
+
126
+ ## Exceções globais (`bootstrap/app.php`)
127
+
128
+ ```php
129
+ ->withExceptions(function (Exceptions $exceptions) {
130
+ $exceptions->render(fn (UserAlreadyExistsException $e) =>
131
+ response()->json(['error' => 'User exists', 'code' => 'USER_EXISTS'], 409));
132
+ })
133
+ ```
134
+
135
+ ## Transações
136
+
137
+ ```php
138
+ DB::transaction(function () use ($data) {
139
+ $user = User::create($data);
140
+ UserProfile::create([...]);
141
+ });
142
+ ```
143
+
144
+ ## Testes Pest
145
+
146
+ ```php
147
+ it('cria usuário com sucesso', function () {
148
+ $this->actingAs(User::factory()->admin()->create())
149
+ ->postJson('/api/users', ['email' => 'jane@example.com', 'name' => 'Jane', 'password' => 'longsecret123'])
150
+ ->assertCreated();
151
+ });
152
+
153
+ it('rejeita email duplicado', function () {
154
+ User::factory()->create(['email' => 'taken@example.com']);
155
+ $this->actingAs(User::factory()->admin()->create())
156
+ ->postJson('/api/users', ['email' => 'taken@example.com', ...])
157
+ ->assertStatus(409);
158
+ });
159
+ ```
160
+
161
+ Cobertura mínima por endpoint: 200/201, 422, 401/403, 404.
162
+
163
+ ## Antipatterns
164
+
165
+ | AP | Antipattern | Correção |
166
+ |---|---|---|
167
+ | AP-01 | `$request->validate()` no Controller | FormRequest |
168
+ | AP-02 | Query Eloquent no Controller | Repository |
169
+ | AP-03 | Lógica no Controller | Service |
170
+ | AP-04 | Retornar Model direto | JsonResource |
171
+ | AP-05 | `$guarded = []` | `$fillable` explícito |
172
+ | AP-06 | Sem `declare(strict_types=1)` | Adicionar no topo |
173
+ | AP-07 | Múltiplas inserções sem transaction | `DB::transaction()` |
174
+ | AP-08 | `bcrypt()` default cost | `Hash::make($pwd, ['rounds' => 12])` |
175
+
176
+ ## Validação no CI
177
+
178
+ ```bash
179
+ ./vendor/bin/phpstan analyse --level=8
180
+ ./vendor/bin/pint --test
181
+ ./vendor/bin/pest --coverage --min=80
182
+ ```
183
+
184
+ ## O que fazer
185
+
186
+ 1. Audit:
187
+ ```bash
188
+ grep -rn "request()->validate" app/Http/Controllers/
189
+ grep -rn "::where\|::find" app/Http/Controllers/
190
+ ./vendor/bin/phpstan analyse --level=8
191
+ ```
192
+ 2. Para cada `$request->validate(...)` → FormRequest com `php artisan make:request`
193
+ 3. Para cada Controller com lógica > 10 linhas → Service
194
+ 4. Para cada query Eloquent em Controller → Repository
195
+ 5. Substituir `return $user` por `return new UserResource($user)`
196
+ 6. Adicionar `declare(strict_types=1);` em todo arquivo
197
+
198
+ ## Segurança (combinar com `/dare-security`)
199
+
200
+ - Hash com `Hash::make($pwd, ['rounds' => 12])` ou Argon2
201
+ - Sanctum para SPA/mobile
202
+ - `ThrottleRequests` middleware
203
+ - Headers de segurança (HSTS, X-Frame, CSP) em middleware
204
+ - CORS específico, nunca `*` em produção
205
+ - `$fillable` SEMPRE, nunca `$guarded = []`
206
+
207
+ $ARGUMENTS
208
+
209
+ ---
210
+
211
+ Skill MIT — parte do DARE Method.
@@ -0,0 +1,124 @@
1
+ # /dare-layered-design
2
+
3
+ Enforce arquitetura estrita de 4 camadas (Handlers, Services, Repositories, Models) em projetos DARE — independente de linguagem.
4
+
5
+ ## Como usar
6
+
7
+ ```
8
+ /dare-layered-design # audita projeto atual
9
+ /dare-layered-design lint # roda checks AP-01 a AP-06
10
+ /dare-layered-design scaffold <recurso> # gera CRUD com camadas corretas
11
+ ```
12
+
13
+ ## As 4 camadas
14
+
15
+ ```
16
+ Handler → Service → Repository → Model
17
+ (HTTP) (negócio) (I/O) (domínio)
18
+ ```
19
+
20
+ ### Handler
21
+ - Recebe request, valida input, chama um Service, retorna response
22
+ - **Nunca** acessa Repository direto, **nunca** instancia Service com `new`
23
+
24
+ ### Service
25
+ - Implementa uma operação de negócio (`RegisterUser`, `RefundPayment`)
26
+ - Orquestra Repositories
27
+ - **Nunca** sabe sobre HTTP, **nunca** faz SQL inline
28
+
29
+ ### Repository
30
+ - Abstrai persistência (DB, cache, API externa)
31
+ - Retorna Model ou primitivo
32
+ - **Nunca** retorna HTTP status, **nunca** lança exceção de domínio
33
+
34
+ ### Model
35
+ - Entidade pura do domínio
36
+ - **Nunca** importa Repository/Service/Handler
37
+
38
+ ## Métricas obrigatórias
39
+
40
+ | ID | Métrica |
41
+ |---|---|
42
+ | M-01 | 100% dos Services têm testes unitários (sem DB/HTTP real) |
43
+ | M-02 | 0% de chamadas Handler→Repository direto |
44
+ | M-03 | 100% dos Handlers usam injeção (sem `new Service()`) |
45
+ | M-04 | 100% dos Repositories são agnósticos das camadas superiores |
46
+
47
+ ## Tabela por linguagem
48
+
49
+ | Camada | Laravel | NestJS | FastAPI | Rails | Rust | Go |
50
+ |---|---|---|---|---|---|---|
51
+ | Handler | `Http/Controllers/` | `*.controller.ts` | `routers/` | `app/controllers/` | `handlers/` | `handlers/` |
52
+ | Service | `Services/` | `*.service.ts` | `services/` | `app/services/` | `services/` | `services/` |
53
+ | Repository | `Repositories/` | `*.repository.ts` | `repositories/` | `app/repositories/` | `repositories/` | `repositories/` |
54
+ | Model | `Models/` | `entities/` | `models/` | `app/models/` | `domain/` | `models/` |
55
+
56
+ ## Antipatterns
57
+
58
+ | AP | Antipattern | Sinal |
59
+ |---|---|---|
60
+ | AP-01 | Handler→Repository direto | `controller.repo.find()` |
61
+ | AP-02 | Service com SQL inline | `db.query()` em Service |
62
+ | AP-03 | Repository lança exceção de domínio | `throw UserNotFound` |
63
+ | AP-04 | Model importa Service | acoplamento invertido |
64
+ | AP-05 | God Service (>20 métodos) | `UserService.everything()` |
65
+ | AP-06 | Fat Controller (>100 linhas) | lógica em Handler |
66
+
67
+ ## O que fazer
68
+
69
+ ### Passo 1: Mapear camadas existentes
70
+
71
+ Liste as pastas atuais e classifique cada uma como Handler, Service, Repository, Model ou "indefinido". Indefinido = candidato a refactor.
72
+
73
+ ### Passo 2: Detectar violações com grep
74
+
75
+ ```bash
76
+ # AP-01: Handler→Repository direto
77
+ grep -rn "Repository" src/controllers/ # Laravel/NestJS
78
+ grep -rn "Repository" app/controllers/ # Rails
79
+
80
+ # AP-02: SQL inline em Service
81
+ grep -rn "SELECT\\|INSERT\\|UPDATE\\|DELETE" src/services/
82
+
83
+ # AP-03: Exceção de domínio em Repository
84
+ grep -rn "throw.*NotFound\\|raise.*NotFound" src/repositories/
85
+ ```
86
+
87
+ ### Passo 3: Quebrar God Service
88
+
89
+ Para cada Service com >20 métodos, separe em vários services nomeados por operação:
90
+ - `UserService.register()` → `RegisterUser`
91
+ - `UserService.resetPassword()` → `ResetPassword`
92
+ - `UserService.delete()` → `DeleteUser`
93
+
94
+ ### Passo 4: Cobrir Services com testes unitários
95
+
96
+ Service não depende de DB nem HTTP real — Repository é mockado:
97
+
98
+ ```typescript
99
+ const repo = { findByEmail: jest.fn().mockResolvedValue({id: 1}) };
100
+ const sut = new RegisterUserService(repo as any);
101
+ await expect(sut.execute(...)).rejects.toThrow();
102
+ ```
103
+
104
+ ### Passo 5: Adicionar lint no CI
105
+
106
+ ```yaml
107
+ - name: Layered design lint
108
+ run: |
109
+ grep -rn "Repository" src/controllers/ && exit 1 || true
110
+ grep -rn "new .*Service" src/controllers/ && exit 1 || true
111
+ ```
112
+
113
+ ## Saída esperada
114
+
115
+ Reporte numerado por antipattern (AP-01 a AP-06):
116
+ - Quantas violações por arquivo
117
+ - Sugestão concreta de refactor para cada uma
118
+ - Lista de Services sem cobertura unitária
119
+
120
+ $ARGUMENTS
121
+
122
+ ---
123
+
124
+ Skill MIT — parte do DARE Method. Inspirado em "Layered Design for Ruby on Rails Applications" de Vladimir Dementyev (Evil Martians).
@@ -0,0 +1,148 @@
1
+ # /dare-llm-integration
2
+
3
+ Integração segura e eficiente com LLMs (Gemini, Claude, OpenAI, Ollama) em projetos DARE.
4
+
5
+ ## Como usar
6
+
7
+ ```
8
+ /dare-llm-integration # audita uso de LLM no projeto
9
+ /dare-llm-integration scaffold # gera LLMProvider + cache + rate limit
10
+ /dare-llm-integration prompts # extrai prompts inline para arquivos versionados
11
+ ```
12
+
13
+ ## Os 5 pilares
14
+
15
+ ### 1. LLMProvider abstraction
16
+
17
+ Nunca chame SDK do Gemini/OpenAI direto em Handler ou Service de negócio. Sempre via interface `LLMProvider`.
18
+
19
+ ### 2. Cache TTL
20
+
21
+ Toda chamada passa por cache. Key = `hash(promptId + input + model)`. TTL default 1h.
22
+
23
+ ### 3. Rate limit via token bucket
24
+
25
+ Token bucket por provider:
26
+ - Gemini Free: 15 RPM, 1M tokens/dia
27
+ - Claude tier 1: 50 RPM
28
+ - OpenAI tier 1: 500 RPM
29
+
30
+ ### 4. Prompts versionados
31
+
32
+ Nunca inline em código. Vivem em `prompts/<id>.v<n>.md` com frontmatter (model, temperature, schema).
33
+
34
+ ### 5. Validação via schema
35
+
36
+ LLM mente — sempre valide output com Zod/Pydantic/serde.
37
+
38
+ ## Métricas obrigatórias
39
+
40
+ | ID | Métrica |
41
+ |---|---|
42
+ | M-01 | 100% das chamadas LLM via LLMProvider injetado |
43
+ | M-02 | 100% das responses LLM cacheadas |
44
+ | M-03 | 100% das requests com rate limit |
45
+ | M-04 | 100% das respostas validadas contra schema |
46
+
47
+ ## Antipatterns
48
+
49
+ | AP | Antipattern | Por quê |
50
+ |---|---|---|
51
+ | AP-01 | SDK direto em Handler | impossível mockar/trocar provider |
52
+ | AP-02 | Sem cache | custo explode |
53
+ | AP-03 | Prompt em código | impossível versionar/A-B |
54
+ | AP-04 | User input direto em prompt | prompt injection trivial |
55
+ | AP-05 | Trusting LLM output | LLM mente, schema é defesa |
56
+
57
+ ## Defesa contra prompt injection
58
+
59
+ ```python
60
+ # ❌ Concatenação direta
61
+ system = f"You are an assistant. {user_question}"
62
+
63
+ # ✅ Separação por delimitador + escape
64
+ messages = [
65
+ {"role": "system", "content": "You are an assistant. Answer based on the document below."},
66
+ {"role": "user", "content": f"<document>{escape(doc)}</document>\n<question>{escape(q)}</question>"}
67
+ ]
68
+ ```
69
+
70
+ Regras:
71
+ - Use delimitadores (`<document>`, `<question>`)
72
+ - Escape conteúdo do usuário (XML/HTML escape)
73
+ - Detecte "Ignore instructions above"
74
+ - Valide output — fora do schema = sinal de injection
75
+
76
+ ## O que fazer
77
+
78
+ ### Passo 1: Auditar chamadas LLM
79
+
80
+ ```bash
81
+ grep -rn "GoogleGenAI\\|new OpenAI\\|Anthropic(" src/
82
+ ```
83
+
84
+ Toda ocorrência em Handler ou Service de negócio = AP-01.
85
+
86
+ ### Passo 2: Criar `LLMProvider` interface
87
+
88
+ ```typescript
89
+ interface LLMProvider {
90
+ complete(req: {
91
+ promptId: string;
92
+ input: Record<string, unknown>;
93
+ schema: ZodSchema;
94
+ }): Promise<unknown>;
95
+ }
96
+ ```
97
+
98
+ ### Passo 3: Implementar providers
99
+
100
+ Comece com o que o projeto usa. Use os exemplos em `packages/skills/dare-llm-integration/providers/`.
101
+
102
+ ### Passo 4: Configurar cache + rate limit
103
+
104
+ Cache em memória com TTL + token bucket por provider. Implementação pronta em `packages/skills/dare-llm-integration/cache/` e `.../rate_limit/`.
105
+
106
+ ### Passo 5: Extrair prompts inline
107
+
108
+ Para cada prompt inline encontrado, mova para `prompts/<id>.v1.md` com frontmatter:
109
+
110
+ ```markdown
111
+ ---
112
+ id: summarize
113
+ version: 1
114
+ model: gemini-2.0-flash
115
+ temperature: 0.2
116
+ max_tokens: 500
117
+ schema: SummarySchema
118
+ ---
119
+
120
+ # System
121
+ You are a concise summarizer.
122
+
123
+ # User
124
+ Summarize: <text>{{ text }}</text>
125
+ ```
126
+
127
+ ### Passo 6: Adicionar validação no chamador
128
+
129
+ ```typescript
130
+ const raw = await llm.complete({...});
131
+ const parsed = SummarySchema.parse(raw); // joga LLMOutputInvalidError se falhar
132
+ ```
133
+
134
+ ## Saída esperada
135
+
136
+ Reporte numerado:
137
+ - Quantas chamadas LLM no projeto
138
+ - Quantas via LLMProvider (M-01)
139
+ - Quantas cacheadas (M-02)
140
+ - Quantas com rate limit (M-03)
141
+ - Quantas validadas contra schema (M-04)
142
+ - Lista de prompts inline a extrair
143
+
144
+ $ARGUMENTS
145
+
146
+ ---
147
+
148
+ Skill MIT — parte do DARE Method.
@@ -0,0 +1,72 @@
1
+ # /dare-migrate
2
+
3
+ Camada semântica da migração (Fase 2 brownfield). Roda **depois** de `dare migrate`, que já leu os
4
+ artefatos do `reverse`/`dna` e gerou os esqueletos. Sua função é **escrever a estratégia de migração
5
+ e os cenários Gherkin de paridade reais** — o contrato comportamental que garante uma reimplementação
6
+ fiel ao legado.
7
+
8
+ ## Como usar
9
+
10
+ ```
11
+ /dare-migrate
12
+ ```
13
+
14
+ > Pré-requisito: rodar `dare migrate --to <stack>` antes (gera `DARE/MIGRATION/MIGRATION.md`,
15
+ > `migration-facts.json` e `parity/*.feature`). Isso por sua vez exige `dare reverse` já executado.
16
+
17
+ ## Quando usar
18
+
19
+ - Projeto legado entendido (`reverse` + `dna` feitos) que será **reimplementado** em outra stack.
20
+ - Acabou de rodar `dare migrate` e o `MIGRATION.md`/`.feature` têm seções `<!-- AGENT -->`/`# AGENT`.
21
+
22
+ ## O que fazer
23
+
24
+ ### 1. Carregar contexto (não re-varrer)
25
+ - Leia `DARE/MIGRATION/migration-facts.json` (origem, alvo, módulos, blocking gaps).
26
+ - Leia `DARE/IDEIA.md` + `DARE/REVERSE/module-*.md` (o que cada módulo faz) e `DARE/PROJECT-DNA.md`
27
+ (convenções). Abra arquivos-chave do legado só o necessário para inferir comportamento.
28
+
29
+ ### 2. Preencher `DARE/MIGRATION/MIGRATION.md`
30
+ - **Decisão de Paradigma** — origem e alvo mudam de paradigma (procedural→OO, monólito→serviços)?
31
+ Registre decisão + justificativa; se preservado, diga.
32
+ - **Estratégia de Migração** — big-bang vs. **strangler/parallel-run**; ordem dos módulos; feature flags.
33
+ - **Registro de Risco** — para cada **blocking gap** (🔴) pré-listado, escreva o tratamento; some os
34
+ riscos de regressão/dados/performance + mitigações.
35
+ - **Arquitetura-alvo** — desenhe na stack-alvo, **alinhada ao DNA** (camadas/convenções) quando o
36
+ paradigma for preservado; senão justifique a nova organização.
37
+ - **Plano de Cutover & Rollback** — passos de corte, validação de paridade (rodar os `.feature`),
38
+ critério de go/no-go e rollback.
39
+
40
+ ### 3. Escrever os Gherkin de paridade (`parity/<módulo>.feature`)
41
+ - Um `Scenario` por **fluxo observável** do módulo, derivado do **comportamento legado real**
42
+ (não invente). `Given` estado inicial → `When` ação → `Then` resultado **idêntico ao legado**.
43
+ - Inclua casos de borda e formatação que o legado garante (ex.: arredondamento monetário, máscaras).
44
+ - Esses `.feature` são o **contrato de aceite** da reimplementação na stack-alvo.
45
+
46
+ ### 4. Apresentar ao usuário
47
+ Resumo: decisão de paradigma, estratégia, nº de cenários de paridade, blocking gaps a resolver.
48
+ Reforce que cenários de paridade só valem se vierem do comportamento legado observado.
49
+
50
+ ## Regras de ouro
51
+
52
+ 1. **Paridade primeiro** — o objetivo é não quebrar comportamento; todo fluxo crítico vira `Scenario`.
53
+ 2. **Blocking gaps são bloqueantes** — um 🔴 não resolvido é risco de reimplementação; trate ou registre.
54
+ 3. **Respeite o DNA** — a arquitetura-alvo segue as convenções da casa quando faz sentido.
55
+ 4. **Não invente comportamento** — cenário sem base no legado é fonte de regressão silenciosa.
56
+ 5. **Strangler quando possível** — migração incremental com parallel-run reduz risco vs. big-bang.
57
+
58
+ ## Antipatterns
59
+
60
+ | AP | Antipattern | Por quê |
61
+ |---|---|---|
62
+ | AP-01 | Gherkin genérico sem base no legado | Não garante paridade — vira regressão |
63
+ | AP-02 | Ignorar blocking gaps (🔴) | Reimplementa em cima de incerteza |
64
+ | AP-03 | Big-bang sem necessidade | Maximiza risco e dificulta rollback |
65
+ | AP-04 | Arquitetura-alvo desalinhada do DNA | Código novo vira ilha inconsistente |
66
+ | AP-05 | Reescrever os fatos determinísticos do CLI | Quebra a fonte de verdade |
67
+
68
+ $ARGUMENTS
69
+
70
+ ---
71
+
72
+ Skill MIT — parte do DARE Method. Fase 2 (brownfield). Pareia com o comando `dare migrate`.