@dewtech/dare-cli 2.16.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 (408) hide show
  1. package/README.md +196 -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.d.ts +2 -0
  31. package/dist/__tests__/refine.test.d.ts.map +1 -0
  32. package/dist/__tests__/refine.test.js +186 -0
  33. package/dist/__tests__/refine.test.js.map +1 -0
  34. package/dist/__tests__/reverse-facts.test.d.ts +2 -0
  35. package/dist/__tests__/reverse-facts.test.d.ts.map +1 -0
  36. package/dist/__tests__/reverse-facts.test.js +78 -0
  37. package/dist/__tests__/reverse-facts.test.js.map +1 -0
  38. package/dist/__tests__/review.test.d.ts +2 -0
  39. package/dist/__tests__/review.test.d.ts.map +1 -0
  40. package/dist/__tests__/review.test.js +242 -0
  41. package/dist/__tests__/review.test.js.map +1 -0
  42. package/dist/__tests__/update.test.d.ts +2 -0
  43. package/dist/__tests__/update.test.d.ts.map +1 -0
  44. package/dist/__tests__/update.test.js +150 -0
  45. package/dist/__tests__/update.test.js.map +1 -0
  46. package/dist/__tests__/validate.test.js +65 -65
  47. package/dist/bin/dare.js +38 -3
  48. package/dist/bin/dare.js.map +1 -1
  49. package/dist/commands/blueprint.js +122 -122
  50. package/dist/commands/dag.d.ts.map +1 -1
  51. package/dist/commands/dag.js +43 -79
  52. package/dist/commands/dag.js.map +1 -1
  53. package/dist/commands/dna.d.ts +3 -0
  54. package/dist/commands/dna.d.ts.map +1 -0
  55. package/dist/commands/dna.js +69 -0
  56. package/dist/commands/dna.js.map +1 -0
  57. package/dist/commands/execute.d.ts.map +1 -1
  58. package/dist/commands/execute.js +76 -0
  59. package/dist/commands/execute.js.map +1 -1
  60. package/dist/commands/migrate.d.ts +3 -0
  61. package/dist/commands/migrate.d.ts.map +1 -0
  62. package/dist/commands/migrate.js +101 -0
  63. package/dist/commands/migrate.js.map +1 -0
  64. package/dist/commands/new.d.ts +16 -0
  65. package/dist/commands/new.d.ts.map +1 -0
  66. package/dist/commands/new.js +103 -0
  67. package/dist/commands/new.js.map +1 -0
  68. package/dist/commands/refine.d.ts +16 -0
  69. package/dist/commands/refine.d.ts.map +1 -0
  70. package/dist/commands/refine.js +167 -0
  71. package/dist/commands/refine.js.map +1 -0
  72. package/dist/commands/reverse.d.ts +3 -0
  73. package/dist/commands/reverse.d.ts.map +1 -0
  74. package/dist/commands/reverse.js +201 -0
  75. package/dist/commands/reverse.js.map +1 -0
  76. package/dist/commands/review.d.ts +16 -0
  77. package/dist/commands/review.d.ts.map +1 -0
  78. package/dist/commands/review.js +106 -0
  79. package/dist/commands/review.js.map +1 -0
  80. package/dist/commands/update.d.ts +13 -0
  81. package/dist/commands/update.d.ts.map +1 -0
  82. package/dist/commands/update.js +149 -0
  83. package/dist/commands/update.js.map +1 -0
  84. package/dist/commands/welcome.d.ts +14 -0
  85. package/dist/commands/welcome.d.ts.map +1 -0
  86. package/dist/commands/welcome.js +29 -0
  87. package/dist/commands/welcome.js.map +1 -0
  88. package/dist/skills/commands/add.d.ts +23 -0
  89. package/dist/skills/commands/add.d.ts.map +1 -0
  90. package/dist/skills/commands/add.js +206 -0
  91. package/dist/skills/commands/add.js.map +1 -0
  92. package/dist/skills/commands/info.d.ts +14 -0
  93. package/dist/skills/commands/info.d.ts.map +1 -0
  94. package/dist/skills/commands/info.js +99 -0
  95. package/dist/skills/commands/info.js.map +1 -0
  96. package/dist/skills/commands/list.d.ts +19 -0
  97. package/dist/skills/commands/list.d.ts.map +1 -0
  98. package/dist/skills/commands/list.js +163 -0
  99. package/dist/skills/commands/list.js.map +1 -0
  100. package/dist/skills/commands/publish.d.ts +56 -0
  101. package/dist/skills/commands/publish.d.ts.map +1 -0
  102. package/dist/skills/commands/publish.js +272 -0
  103. package/dist/skills/commands/publish.js.map +1 -0
  104. package/dist/skills/commands/remove.d.ts +19 -0
  105. package/dist/skills/commands/remove.d.ts.map +1 -0
  106. package/dist/skills/commands/remove.js +96 -0
  107. package/dist/skills/commands/remove.js.map +1 -0
  108. package/dist/skills/commands/update.d.ts +31 -0
  109. package/dist/skills/commands/update.d.ts.map +1 -0
  110. package/dist/skills/commands/update.js +132 -0
  111. package/dist/skills/commands/update.js.map +1 -0
  112. package/dist/skills/index.d.ts +22 -0
  113. package/dist/skills/index.d.ts.map +1 -0
  114. package/dist/skills/index.js +33 -0
  115. package/dist/skills/index.js.map +1 -0
  116. package/dist/skills/manifest.d.ts +54 -0
  117. package/dist/skills/manifest.d.ts.map +1 -0
  118. package/dist/skills/manifest.js +162 -0
  119. package/dist/skills/manifest.js.map +1 -0
  120. package/dist/skills/registry-local.d.ts +67 -0
  121. package/dist/skills/registry-local.d.ts.map +1 -0
  122. package/dist/skills/registry-local.js +130 -0
  123. package/dist/skills/registry-local.js.map +1 -0
  124. package/dist/skills/registry-mock.json +109 -0
  125. package/dist/skills/registry-remote.d.ts +110 -0
  126. package/dist/skills/registry-remote.d.ts.map +1 -0
  127. package/dist/skills/registry-remote.js +246 -0
  128. package/dist/skills/registry-remote.js.map +1 -0
  129. package/dist/skills/registry.d.ts +49 -0
  130. package/dist/skills/registry.d.ts.map +1 -0
  131. package/dist/skills/registry.js +94 -0
  132. package/dist/skills/registry.js.map +1 -0
  133. package/dist/skills/tests/manifest.spec.d.ts +8 -0
  134. package/dist/skills/tests/manifest.spec.d.ts.map +1 -0
  135. package/dist/skills/tests/manifest.spec.js +176 -0
  136. package/dist/skills/tests/manifest.spec.js.map +1 -0
  137. package/dist/skills/tests/publish.spec.d.ts +12 -0
  138. package/dist/skills/tests/publish.spec.d.ts.map +1 -0
  139. package/dist/skills/tests/publish.spec.js +276 -0
  140. package/dist/skills/tests/publish.spec.js.map +1 -0
  141. package/dist/skills/tests/registry-local.spec.d.ts +8 -0
  142. package/dist/skills/tests/registry-local.spec.d.ts.map +1 -0
  143. package/dist/skills/tests/registry-local.spec.js +231 -0
  144. package/dist/skills/tests/registry-local.spec.js.map +1 -0
  145. package/dist/skills/tests/registry.spec.d.ts +7 -0
  146. package/dist/skills/tests/registry.spec.d.ts.map +1 -0
  147. package/dist/skills/tests/registry.spec.js +58 -0
  148. package/dist/skills/tests/registry.spec.js.map +1 -0
  149. package/dist/skills/tests/remote-registry.spec.d.ts +9 -0
  150. package/dist/skills/tests/remote-registry.spec.d.ts.map +1 -0
  151. package/dist/skills/tests/remote-registry.spec.js +357 -0
  152. package/dist/skills/tests/remote-registry.spec.js.map +1 -0
  153. package/dist/skills/tests/update.spec.d.ts +9 -0
  154. package/dist/skills/tests/update.spec.d.ts.map +1 -0
  155. package/dist/skills/tests/update.spec.js +166 -0
  156. package/dist/skills/tests/update.spec.js.map +1 -0
  157. package/dist/types/Refine.types.d.ts +96 -0
  158. package/dist/types/Refine.types.d.ts.map +1 -0
  159. package/dist/types/Refine.types.js +19 -0
  160. package/dist/types/Refine.types.js.map +1 -0
  161. package/dist/types/Review.types.d.ts +86 -0
  162. package/dist/types/Review.types.d.ts.map +1 -0
  163. package/dist/types/Review.types.js +15 -0
  164. package/dist/types/Review.types.js.map +1 -0
  165. package/dist/types/UpdateManifest.types.d.ts +91 -0
  166. package/dist/types/UpdateManifest.types.d.ts.map +1 -0
  167. package/dist/types/UpdateManifest.types.js +13 -0
  168. package/dist/types/UpdateManifest.types.js.map +1 -0
  169. package/dist/utils/ReviewRunner.d.ts +42 -0
  170. package/dist/utils/ReviewRunner.d.ts.map +1 -0
  171. package/dist/utils/ReviewRunner.js +175 -0
  172. package/dist/utils/ReviewRunner.js.map +1 -0
  173. package/dist/utils/UpdateApplier.d.ts +42 -0
  174. package/dist/utils/UpdateApplier.d.ts.map +1 -0
  175. package/dist/utils/UpdateApplier.js +207 -0
  176. package/dist/utils/UpdateApplier.js.map +1 -0
  177. package/dist/utils/UpdateDetector.d.ts +56 -0
  178. package/dist/utils/UpdateDetector.d.ts.map +1 -0
  179. package/dist/utils/UpdateDetector.js +164 -0
  180. package/dist/utils/UpdateDetector.js.map +1 -0
  181. package/dist/utils/banner.d.ts +28 -0
  182. package/dist/utils/banner.d.ts.map +1 -0
  183. package/dist/utils/banner.js +77 -0
  184. package/dist/utils/banner.js.map +1 -0
  185. package/dist/utils/banner.spec.d.ts +5 -0
  186. package/dist/utils/banner.spec.d.ts.map +1 -0
  187. package/dist/utils/banner.spec.js +253 -0
  188. package/dist/utils/banner.spec.js.map +1 -0
  189. package/dist/utils/complexity-analyzer.d.ts +60 -0
  190. package/dist/utils/complexity-analyzer.d.ts.map +1 -0
  191. package/dist/utils/complexity-analyzer.js +292 -0
  192. package/dist/utils/complexity-analyzer.js.map +1 -0
  193. package/dist/utils/confidence.d.ts +41 -0
  194. package/dist/utils/confidence.d.ts.map +1 -0
  195. package/dist/utils/confidence.js +101 -0
  196. package/dist/utils/confidence.js.map +1 -0
  197. package/dist/utils/datamodel.d.ts +41 -0
  198. package/dist/utils/datamodel.d.ts.map +1 -0
  199. package/dist/utils/datamodel.js +535 -0
  200. package/dist/utils/datamodel.js.map +1 -0
  201. package/dist/utils/dna-detector.d.ts +61 -0
  202. package/dist/utils/dna-detector.d.ts.map +1 -0
  203. package/dist/utils/dna-detector.js +354 -0
  204. package/dist/utils/dna-detector.js.map +1 -0
  205. package/dist/utils/dna-facts.d.ts +13 -0
  206. package/dist/utils/dna-facts.d.ts.map +1 -0
  207. package/dist/utils/dna-facts.js +109 -0
  208. package/dist/utils/dna-facts.js.map +1 -0
  209. package/dist/utils/excalidraw-renderer.d.ts +11 -71
  210. package/dist/utils/excalidraw-renderer.d.ts.map +1 -1
  211. package/dist/utils/excalidraw-renderer.js +29 -162
  212. package/dist/utils/excalidraw-renderer.js.map +1 -1
  213. package/dist/utils/graph-renderer.d.ts +115 -0
  214. package/dist/utils/graph-renderer.d.ts.map +1 -0
  215. package/dist/utils/graph-renderer.js +216 -0
  216. package/dist/utils/graph-renderer.js.map +1 -0
  217. package/dist/utils/migration.d.ts +64 -0
  218. package/dist/utils/migration.d.ts.map +1 -0
  219. package/dist/utils/migration.js +183 -0
  220. package/dist/utils/migration.js.map +1 -0
  221. package/dist/utils/module-detector.d.ts +46 -0
  222. package/dist/utils/module-detector.d.ts.map +1 -0
  223. package/dist/utils/module-detector.js +348 -0
  224. package/dist/utils/module-detector.js.map +1 -0
  225. package/dist/utils/project-generator.d.ts.map +1 -1
  226. package/dist/utils/project-generator.js +273 -254
  227. package/dist/utils/project-generator.js.map +1 -1
  228. package/dist/utils/reverse-facts.d.ts +50 -0
  229. package/dist/utils/reverse-facts.d.ts.map +1 -0
  230. package/dist/utils/reverse-facts.js +291 -0
  231. package/dist/utils/reverse-facts.js.map +1 -0
  232. package/dist/utils/stack-bootstrap.js +371 -371
  233. package/dist/utils/static-analyzer.d.ts +29 -0
  234. package/dist/utils/static-analyzer.d.ts.map +1 -0
  235. package/dist/utils/static-analyzer.js +390 -0
  236. package/dist/utils/static-analyzer.js.map +1 -0
  237. package/dist/utils/version-compare.d.ts +27 -0
  238. package/dist/utils/version-compare.d.ts.map +1 -0
  239. package/dist/utils/version-compare.js +47 -0
  240. package/dist/utils/version-compare.js.map +1 -0
  241. package/package.json +8 -3
  242. package/templates/DARE-dag-example.yaml +280 -280
  243. package/templates/UPDATE-MANIFEST.json +48 -0
  244. package/templates/backend/node-nestjs/.env.example +9 -9
  245. package/templates/backend/node-nestjs/nest-cli.json +8 -8
  246. package/templates/backend/node-nestjs/package.json +50 -50
  247. package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
  248. package/templates/backend/node-nestjs/src/app.module.ts +15 -15
  249. package/templates/backend/node-nestjs/src/app.service.ts +8 -8
  250. package/templates/backend/node-nestjs/src/main.ts +24 -24
  251. package/templates/backend/node-nestjs/tsconfig.json +21 -21
  252. package/templates/backend/php-laravel/.env.example +22 -22
  253. package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
  254. package/templates/backend/php-laravel/composer.json +40 -40
  255. package/templates/backend/python-fastapi/.env.example +4 -4
  256. package/templates/backend/python-fastapi/app/api/router.py +8 -8
  257. package/templates/backend/python-fastapi/app/core/config.py +20 -20
  258. package/templates/backend/python-fastapi/main.py +35 -35
  259. package/templates/backend/python-fastapi/requirements.txt +13 -13
  260. package/templates/backend/rust-axum/.env.example +3 -3
  261. package/templates/backend/rust-axum/Cargo.toml +23 -23
  262. package/templates/backend/rust-axum/src/errors.rs +30 -30
  263. package/templates/backend/rust-axum/src/main.rs +32 -32
  264. package/templates/backend/rust-axum/src/routes.rs +6 -6
  265. package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
  266. package/templates/frontend/leptos-csr/Cargo.toml +16 -16
  267. package/templates/frontend/leptos-csr/Trunk.toml +10 -10
  268. package/templates/frontend/leptos-csr/index.html +11 -11
  269. package/templates/frontend/leptos-csr/src/lib.rs +20 -20
  270. package/templates/frontend/leptos-csr/style/main.scss +19 -19
  271. package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
  272. package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
  273. package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
  274. package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
  275. package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
  276. package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
  277. package/templates/frontend/react/index.html +12 -12
  278. package/templates/frontend/react/package.json +35 -35
  279. package/templates/frontend/react/src/App.tsx +25 -25
  280. package/templates/frontend/react/src/main.tsx +9 -9
  281. package/templates/frontend/vue/package.json +32 -32
  282. package/templates/frontend/vue/src/App.vue +7 -7
  283. package/templates/frontend/vue/src/main.ts +10 -10
  284. package/templates/frontend/vue/src/router/index.ts +14 -14
  285. package/templates/frontend/vue/src/views/HomeView.vue +6 -6
  286. package/templates/hooks/pre-commit-dare-validate +24 -24
  287. package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -0
  288. package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +180 -36
  289. package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -0
  290. package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -0
  291. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
  292. package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -0
  293. package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -0
  294. package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -0
  295. package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -0
  296. package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -0
  297. package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -0
  298. package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -0
  299. package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -0
  300. package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -0
  301. package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -0
  302. package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -0
  303. package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -0
  304. package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -0
  305. package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
  306. package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -0
  307. package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -224
  308. package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -0
  309. package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -0
  310. package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -0
  311. package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -0
  312. package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -0
  313. package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -0
  314. package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
  315. package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
  316. package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -100
  317. package/templates/ide/claude/.claude/commands/dare-ax.md +131 -0
  318. package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -78
  319. package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -0
  320. package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -110
  321. package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
  322. package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -0
  323. package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
  324. package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
  325. package/templates/ide/claude/.claude/commands/dare-dna.md +75 -0
  326. package/templates/ide/claude/.claude/commands/dare-docker.md +207 -0
  327. package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
  328. package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -0
  329. package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -0
  330. package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -0
  331. package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -0
  332. package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -0
  333. package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -0
  334. package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -0
  335. package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -0
  336. package/templates/ide/claude/.claude/commands/dare-refine.md +145 -0
  337. package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -0
  338. package/templates/ide/claude/.claude/commands/dare-review.md +113 -0
  339. package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
  340. package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
  341. package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
  342. package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
  343. package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -0
  344. package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -0
  345. package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -0
  346. package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -0
  347. package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -0
  348. package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -0
  349. package/templates/ide/claude/.claude/settings.example.json +35 -35
  350. package/templates/ide/claude/CLAUDE.md +146 -146
  351. package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
  352. package/templates/ide/claude/templates/DESIGN-template.md +129 -129
  353. package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -100
  354. package/templates/ide/cursor/.cursor/commands/dag-viz.md +139 -0
  355. package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +86 -41
  356. package/templates/ide/cursor/.cursor/commands/generate-design.md +35 -35
  357. package/templates/ide/cursor/.cursor/commands/generate-tasks.md +184 -142
  358. package/templates/ide/cursor/.cursor/commands/refine-task.md +107 -0
  359. package/templates/ide/cursor/.cursor/commands/review-task.md +91 -0
  360. package/templates/ide/cursor/.cursor/commands/run-dag.md +110 -110
  361. package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -0
  362. package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -0
  363. package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -0
  364. package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
  365. package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -0
  366. package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -0
  367. package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -0
  368. package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -0
  369. package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -0
  370. package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -0
  371. package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -0
  372. package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -0
  373. package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -0
  374. package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -0
  375. package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -0
  376. package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -0
  377. package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -0
  378. package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -0
  379. package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
  380. package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
  381. package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
  382. package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
  383. package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -100
  384. package/templates/shared/docker-compose.yml +41 -41
  385. package/dist/__tests__/dag-runner/adapters.test.d.ts +0 -2
  386. package/dist/__tests__/dag-runner/adapters.test.d.ts.map +0 -1
  387. package/dist/__tests__/dag-runner/adapters.test.js +0 -134
  388. package/dist/__tests__/dag-runner/adapters.test.js.map +0 -1
  389. package/dist/dag-runner/adapters/antigravity.d.ts +0 -6
  390. package/dist/dag-runner/adapters/antigravity.d.ts.map +0 -1
  391. package/dist/dag-runner/adapters/antigravity.js +0 -54
  392. package/dist/dag-runner/adapters/antigravity.js.map +0 -1
  393. package/dist/dag-runner/adapters/claude.d.ts +0 -6
  394. package/dist/dag-runner/adapters/claude.d.ts.map +0 -1
  395. package/dist/dag-runner/adapters/claude.js +0 -48
  396. package/dist/dag-runner/adapters/claude.js.map +0 -1
  397. package/dist/dag-runner/adapters/cursor.d.ts +0 -6
  398. package/dist/dag-runner/adapters/cursor.d.ts.map +0 -1
  399. package/dist/dag-runner/adapters/cursor.js +0 -58
  400. package/dist/dag-runner/adapters/cursor.js.map +0 -1
  401. package/dist/dag-runner/adapters/index.d.ts +0 -46
  402. package/dist/dag-runner/adapters/index.d.ts.map +0 -1
  403. package/dist/dag-runner/adapters/index.js +0 -55
  404. package/dist/dag-runner/adapters/index.js.map +0 -1
  405. package/dist/dag-runner/utils/timeout.d.ts +0 -27
  406. package/dist/dag-runner/utils/timeout.d.ts.map +0 -1
  407. package/dist/dag-runner/utils/timeout.js +0 -55
  408. package/dist/dag-runner/utils/timeout.js.map +0 -1
@@ -0,0 +1,114 @@
1
+ ---
2
+ name: dare-refine
3
+ description: Analisa complexidade de uma task DARE e, quando alta, quebra em sub-tasks menores. Use após gerar o DAG (para tasks HIGH/CRITICAL), quando o dev pedir refinamento manual, ou quando o escopo mudou e uma task ficou grande. Combina heurística determinística (CLI) com decisão semântica do agente.
4
+ ---
5
+
6
+ # DARE Refine Skill
7
+
8
+ Você é o refinador de tasks do método DARE. Seu papel é garantir que cada task caiba em uma conversa única do agente — sem ficar tão grande que o agente "invente" stubs/mocks pra completar.
9
+
10
+ ## Quando usar
11
+
12
+ - Após `dare-tasks` gerar o DAG, para cada task com complexity HIGH no `dare-dag.yaml`
13
+ - Quando o dev pede: "refine task-034"
14
+ - Quando o BLUEPRINT mudou e uma task ficou grande demais
15
+
16
+ ## Camada determinística vs semântica
17
+
18
+ O CLI `dare refine <id>` já mede sinais objetivos: # arquivos, # funções, # testes, # dependências, keywords pesadas. Esta skill faz a camada semântica — você lê o conteúdo da spec e decide se faz sentido quebrar.
19
+
20
+ ## Como executar
21
+
22
+ ### Passo 1: Rodar a heurística determinística
23
+
24
+ ```bash
25
+ dare refine <task-id> --split --format json > .dare/refine-<task-id>.json
26
+ ```
27
+
28
+ JSON traz:
29
+ - `report.score`, `report.level`
30
+ - `report.signals` — explica a pontuação
31
+ - `report.recommendsSplit` — true se HIGH/CRITICAL
32
+ - `proposal.subtasks` — quebra inicial coarse
33
+
34
+ ### Passo 2: Decidir se quebra
35
+
36
+ **Quebrar quando:**
37
+ - `recommendsSplit: true` (HIGH/CRITICAL)
38
+ - Mais de 6 arquivos
39
+ - Mistura responsabilidades (modelo + controller + teste + migration)
40
+ - Inclui refactor + feature juntos
41
+ - Keyword "pesada" + score MED+
42
+
43
+ **Manter inteira quando:**
44
+ - LOW ou MED baixo
45
+ - Mesmo módulo
46
+ - Cabe em uma conversa (15–60 min)
47
+
48
+ ### Passo 3: Eixos de split
49
+
50
+ | Eixo | Quando |
51
+ |---|---|
52
+ | **Por camada** | Modelo / Controller / Service / Test separados |
53
+ | **Por endpoint** | 4 endpoints → 4 sub-tasks |
54
+ | **Por feature** | Auth = register + login → split por verbo |
55
+ | **Refactor + feature** | "1. refactor" + "2. feature em cima" |
56
+ | **Migration + código** | "1. migration" + "2. código novo" |
57
+
58
+ Cada sub-task:
59
+ - `subtask_prompt` auto-suficiente (Anti-Stub Contract!)
60
+ - Spec própria em `DARE/EXECUTION/<sub-id>.md`
61
+ - `depends_on` mínimo mas correto
62
+ - Complexity honesta — se sub ainda for HIGH, quebrar de novo
63
+
64
+ ### Passo 4: Verdito
65
+
66
+ `.dare/refine-verdict-<task-id>.json`:
67
+
68
+ ```json
69
+ {
70
+ "manageable": false,
71
+ "reasons": ["Score 18 (HIGH) — 7 endpoints + migration", "Mistura refactor com features novas"],
72
+ "proposedSubtasks": [
73
+ {
74
+ "id": "task-034a",
75
+ "title": "Refactor UserService",
76
+ "files": ["src/services/UserService.ts", "tests/services/UserService.test.ts"],
77
+ "rationale": "Refactor isolado antes da feature",
78
+ "estimatedLevel": "MED"
79
+ }
80
+ ]
81
+ }
82
+ ```
83
+
84
+ Manuseável:
85
+
86
+ ```json
87
+ {
88
+ "manageable": true,
89
+ "reasons": ["Score 7 (MED), 4 arquivos mesmo módulo"]
90
+ }
91
+ ```
92
+
93
+ ### Passo 5: Aplicar o split
94
+
95
+ 1. Editar `DARE/dare-dag.yaml` substituindo a task pelas sub-tasks
96
+ 2. Criar specs em `DARE/EXECUTION/<sub-id>.md` (template + Anti-Stub Contract)
97
+ 3. Atualizar `DARE/TASKS.md` (visão humana)
98
+ 4. Regenerar Mermaid: `dare dag viz -o DARE/dag-graph.mmd`
99
+ 5. Marcar task original como SPLIT (preservar histórico)
100
+
101
+ ### Passo 6: Mensagem
102
+
103
+ Manuseável:
104
+ > ✅ Task bem-dimensionada (score X, level Y). Sem split.
105
+
106
+ Quebrada:
107
+ > 🪓 Task quebrada em N sub-tasks: [lista]. Revise com `dare validate` e `dare dag viz`.
108
+
109
+ ## Regras inegociáveis
110
+
111
+ - Não quebrar tasks LOW
112
+ - Não inventar dependências falsas
113
+ - Cada sub-task testável independentemente
114
+ - Anti-Stub Contract aplica em cada sub-task
@@ -0,0 +1,108 @@
1
+ ---
2
+ name: dare-reverse
3
+ description: Camada semântica da engenharia reversa (Fase 0 / brownfield). Roda depois do comando `dare reverse` e preenche as inferências — propósito, domínio, responsabilidades e diagramas de fluxo — nos artefatos DARE/IDEIA.md e DARE/REVERSE/module-*.md.
4
+ ---
5
+
6
+ # DARE Reverse Skill — Engenharia Reversa (Fase 0)
7
+
8
+ Você é o agente da **Fase 0 (brownfield)** do método DARE no Antigravity. Esta skill é a
9
+ **camada semântica** da engenharia reversa: roda **depois** do comando `dare reverse`, que já
10
+ varreu o código e gerou os esqueletos determinísticos. Sua função é **preencher as inferências**
11
+ que o CLI não faz: propósito, domínio, responsabilidades e os **diagramas de fluxo**
12
+ ("como a coisa funciona").
13
+
14
+ > Pré-requisito: o comando `dare reverse` precisa ter rodado antes (gera `DARE/IDEIA.md`,
15
+ > `DARE/REVERSE/module-*.md` e `DARE/REVERSE/reverse-facts.json`). Se não existirem, peça ao
16
+ > usuário para rodar `dare reverse` primeiro.
17
+
18
+ ## Quando usar esta skill
19
+
20
+ - O usuário quer entender / documentar um projeto **legado** antes de adotar o DARE.
21
+ - Acabou de rodar `dare reverse` e os artefatos têm seções `<!-- AGENT: ... -->` em aberto.
22
+ - O objetivo é gerar uma **pré-arquitetura** (`IDEIA.md`) que depois vira `DESIGN.md`.
23
+
24
+ ## Marcação de confiança (obrigatória)
25
+
26
+ Ao preencher cada `<!-- AGENT -->`, marque **cada afirmação** com seu nível de confiança + evidência:
27
+
28
+ - `- 🟢 <claim>. ` + `` `arquivo:linha` `` — **CONFIRMED**: evidência direta no código.
29
+ - `- 🟡 <claim>. ` + `` `arquivo:linha` `` — **INFERRED**: padrão/dedução; pode estar errado.
30
+ - `- 🔴 <claim>. → ver gaps.md` — **GAP**: não determinável pelo código.
31
+
32
+ Regra: só 🟢 com evidência direta; na dúvida, 🟡; sem base, 🔴 (registre em `gaps.md`). Os fatos
33
+ estruturais (caminho, LOC, deps) já vêm pré-marcados 🟢 pelo CLI — **não os altere**.
34
+
35
+ ## Passo a passo
36
+
37
+ ### 1. Carregar os fatos (não re-varrer tudo)
38
+
39
+ - Leia `DARE/REVERSE/reverse-facts.json` — fonte de fatos determinística (stack, módulos, LOC,
40
+ grafo de dependências). **Confie nela** para o inventário; não reconte arquivos.
41
+ - Por módulo, abra **2-5 arquivos representativos** (entrypoints, controllers, services, models)
42
+ — o suficiente para inferir responsabilidade e fluxo. Não leia o módulo inteiro.
43
+
44
+ ### 2. Preencher `DARE/IDEIA.md`
45
+
46
+ Substitua cada bloco `<!-- AGENT: ... -->`:
47
+
48
+ - **Propósito Inferido** — 2-4 frases: o que o software faz e por quê.
49
+ - **Domínio & Conceitos** — entidades de negócio + glossário.
50
+ - **Modelo de Dados (reconstruído)** — entidades, campos-chave, relacionamentos.
51
+ - **Superfície de API** — endpoints inferidos de rotas/controllers.
52
+ - **Fluxo do Sistema** — um `flowchart TD` Mermaid do caminho principal de request/dados
53
+ atravessando os módulos.
54
+ - **⚠️ Incertezas / Gaps** — o que NÃO deu pra inferir + perguntas objetivas para o humano.
55
+
56
+ **Não toque** no Mapa de Módulos nem na tabela (determinísticos, gerados pelo CLI).
57
+
58
+ ### 3. Preencher cada `DARE/REVERSE/module-*.md`
59
+
60
+ - **Responsabilidade** — papel do módulo no sistema (1-3 frases).
61
+ - **Superfície Pública** — o que expõe (funções/classes/endpoints/tipos exportados).
62
+ - **Como Funciona (fluxo)** — um `sequenceDiagram` Mermaid do fluxo típico
63
+ (entrypoint → service → repository → DB/externo).
64
+ - **Dependências & Acoplamento** — comente o acoplamento e riscos (circular, hotspot HIGH).
65
+
66
+ ### 4. Apresentar ao usuário
67
+
68
+ Resumo: propósito inferido, nº de módulos, principais incertezas. Reforce que o `IDEIA.md` é um
69
+ **rascunho a validar** antes de promover a DESIGN com `dare design`.
70
+
71
+ ## Passo final — Gaps, Questions e Reviewer
72
+
73
+ 1. **`gaps.md`** — consolide os 🔴 classificados por severidade (crítico/moderado/cosmético/fora-escopo) + tratamento.
74
+ 2. **`questions.md`** — perguntas objetivas ao humano.
75
+ 3. **Reviewer** — releia os arquivos-chave e rebaixe claims sem evidência (🟢→🟡 ou 🟡→🔴).
76
+ 4. **Rode `dare reverse --report`** — gera `confidence-report.md` + `traceability/code-spec-matrix.md` (índice determinístico).
77
+
78
+ ## Modo `--deep` (Fase 3)
79
+
80
+ Se `dare reverse --deep` foi usado, complete os artefatos extras em `DARE/REVERSE/`:
81
+ - **`erd.md`** — entidades extraídas pelo CLI (🟢); complete relações não-explícitas (🟡).
82
+ - **`domain-rules.md`** — regras de negócio (validações, invariantes, cálculos), 🟢/🟡/🔴.
83
+ - **`state-machines.md`** — `stateDiagram-v2` por entidade/fluxo (estados/transições reais).
84
+ - **`permissions.md`** — papéis, recursos e regras de autorização.
85
+ - **`c4/c4-context.md`** e **`c4/c4-container.md`** — atores/externos e containers (component = mapa de módulos).
86
+
87
+ ## Regras de ouro
88
+
89
+ 1. **Não invente** — fluxo não-claro vira 🔴 (gap), não chute.
90
+ 2. **Fidelidade ao código real** — descreva o que o código faz, não o que deveria fazer.
91
+ 3. **Diagramas enxutos** — legibilidade acima de exaustividade.
92
+ 4. **Não re-varra** — os fatos já estão em `reverse-facts.json`.
93
+ 5. **Preserve o determinístico** — nunca edite o Mapa de Módulos/tabela/grafo do CLI.
94
+
95
+ ## Antipatterns
96
+
97
+ | AP | Antipattern | Por quê |
98
+ |---|---|---|
99
+ | AP-01 | Inventar endpoints/entidades inexistentes | Polui a pré-arquitetura com ficção |
100
+ | AP-02 | Reescrever a tabela de módulos do CLI | Quebra a fonte determinística |
101
+ | AP-03 | `sequenceDiagram` gigante e ilegível | Anula o propósito do diagrama |
102
+ | AP-04 | Pular a seção de Incertezas | Remove o ponto de validação humana |
103
+ | AP-05 | Ler o projeto inteiro arquivo a arquivo | Desperdiça contexto; os fatos já estão no JSON |
104
+ | AP-06 | Marcar tudo 🟢 sem evidência `file:line` | Infla a confiança e engana o humano |
105
+
106
+ ---
107
+
108
+ Skill MIT — parte do DARE Method. Fase 0 (brownfield). Pareia com o comando `dare reverse`.
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: dare-review
3
+ description: Audita uma task DARE implementada — cruza a spec com o código real para detectar stubs, mocks fora de testes, funções vazias, TODOs e validar critério-a-critério se a implementação satisfaz o que a spec prometeu. Use antes de marcar uma task como DONE, ou quando o dev pedir revisão manual. Combina análise estática (via CLI) com verdito semântico (você).
4
+ ---
5
+
6
+ # DARE Review Skill
7
+
8
+ Você é o auditor de qualidade do método DARE. Seu papel é verificar se uma task implementada **realmente** entrega o que a spec promete — sem stubs, sem mocks em produção, sem funções vazias, sem TODOs pendentes.
9
+
10
+ ## Quando usar esta skill
11
+
12
+ - Antes de marcar uma task como DONE (gate obrigatório no Definition of Done)
13
+ - Quando `dare review <id>` estático passa mas precisa validação semântica
14
+ - Quando o dev pede revisão manual: "revise a task-034"
15
+
16
+ ## Camada estática vs semântica
17
+
18
+ O CLI `dare review <id>` já faz a camada **estática**: regex sobre os arquivos detecta TODO/FIXME/stubs/mocks/funções vazias. Esta skill faz a camada **semântica**: critério-a-critério da spec contra a implementação real.
19
+
20
+ ## Como executar
21
+
22
+ ### Passo 1: Rodar a camada estática
23
+
24
+ ```bash
25
+ dare review <task-id> --format json > .dare/review-static-<task-id>.json
26
+ ```
27
+
28
+ Leia o JSON. Se houver erros estáticos, reporte-os primeiro. Geralmente não vale prosseguir com semântica se a estática falhou.
29
+
30
+ ### Passo 2: Carregar contexto
31
+
32
+ - `DARE/EXECUTION/<task-id>.md` — spec da task
33
+ - Cada arquivo listado na seção 3 ("ARQUIVOS A CRIAR / MODIFICAR")
34
+ - `DARE/BLUEPRINT.md` — contratos de API / modelos
35
+
36
+ ### Passo 3: Auditoria critério-a-critério
37
+
38
+ Para **cada** item das seções abaixo, marque ✅ / ❌ com evidência (arquivo + linha):
39
+
40
+ #### 3.1 Objetivo (seção 1 da spec)
41
+ A implementação atinge o estado observável prometido? Encontre evidência concreta.
42
+
43
+ #### 3.2 Arquivos (seção 3)
44
+ - Todos existem com conteúdo descrito?
45
+ - Arquivos extras suspeitos?
46
+
47
+ #### 3.3 Implementação (seção 4)
48
+ - Cada passo numerado foi executado?
49
+ - Assinaturas exatas correspondem?
50
+ - Validações têm regras concretas (não "valida email" — a regex específica)?
51
+
52
+ #### 3.4 Testes (seção 4 — subitem testes)
53
+ - Cada teste listado existe?
54
+ - Tem assertions reais (não `assertTrue(true)`)?
55
+ - Edge cases enumerados cobertos?
56
+
57
+ #### 3.5 Segurança (seção 5)
58
+ - Input validation conforme spec?
59
+ - Não há secrets/tokens hardcoded?
60
+ - SQL/Command injection mitigado?
61
+
62
+ #### 3.6 Anti-Stub (seção 7)
63
+ A camada estática já checou. Só anote se encontrar algo que regex não pegaria (ex.: dados hardcoded disfarçados).
64
+
65
+ ### Passo 4: Emitir verdito semântico
66
+
67
+ Salve em `.dare/review-semantic-<task-id>.json`:
68
+
69
+ ```json
70
+ {
71
+ "passed": true,
72
+ "unmetCriteria": [],
73
+ "notes": "Resumo de 1-3 frases"
74
+ }
75
+ ```
76
+
77
+ Falha:
78
+
79
+ ```json
80
+ {
81
+ "passed": false,
82
+ "unmetCriteria": [
83
+ "Seção 4.3: validação de senha sem regex de força",
84
+ "Seção 4.4: teste de 'email duplicado' não existe"
85
+ ],
86
+ "notes": "2 critérios não atendidos em src/auth/register.ts"
87
+ }
88
+ ```
89
+
90
+ ### Passo 5: Rodar o review fundido
91
+
92
+ ```bash
93
+ dare review <task-id> --from-agent .dare/review-semantic-<task-id>.json
94
+ ```
95
+
96
+ Exit code 0 = pode ir para DONE; 1 = não pode.
97
+
98
+ ### Passo 6: Mensagem final
99
+
100
+ Se passou:
101
+ > ✅ Task aprovada. Marque DONE: `dare execute --complete <task-id>`
102
+
103
+ Se falhou:
104
+ > ❌ Task não passou. Itens a corrigir: [lista]. Re-rode após corrigir.
105
+
106
+ ## Regras inegociáveis
107
+
108
+ - **Não invente** que algo está implementado se não viu o código no disco
109
+ - **Não aceite** mocks/stubs em código de produção mesmo que façam testes passar
110
+ - **Mocks são OK** dentro de `*.test.*`, `*.spec.*`, `__tests__/`, `tests/`, `spec/`
111
+ - **Evidência concreta:** sempre cite arquivo + linha para suas conclusões
@@ -0,0 +1,263 @@
1
+ ---
2
+ name: dare-rust-leptos
3
+ description: Guia DARE para desenvolvimento Leptos (Rust + WASM) — decisão CSR vs Fullstack, idioms 0.7, antipatterns, tipos compartilhados server+WASM com cfg_attr, workspace misto WASM+nativo, templates de tasks.
4
+ ---
5
+
6
+ # DARE Rust/Leptos Skill
7
+
8
+ Você é um especialista em Leptos 0.7+ (framework reativo Rust → WASM). Seu papel é orientar a decisão de variante (CSR vs Fullstack), aplicar idioms obrigatórios, evitar antipatterns clássicos e estruturar tipos compartilhados entre server e WASM.
9
+
10
+ ## Quando usar
11
+
12
+ - Projeto novo Leptos sendo iniciado
13
+ - Decisão CSR vs Fullstack precisa ser tomada
14
+ - Workspace misto (Leptos + Axum + napi-rs) com problemas de target
15
+ - Tipos compartilhados quebrando entre server e WASM
16
+ - Effect/Resource/Action sendo mal usados
17
+
18
+ ## 1. Decisão de variante: CSR vs Fullstack
19
+
20
+ | Critério | CSR (trunk) | Fullstack (cargo-leptos) |
21
+ |---|---|---|
22
+ | SEO necessário | ❌ | ✅ |
23
+ | Time-to-interactive crítico | ❌ | ✅ |
24
+ | Dashboard interno / admin | ✅ | ✅ |
25
+ | Backend Axum existente | indiferente | ✅ integração direta |
26
+ | Simplicidade de deploy | ✅ arquivos estáticos | ⚠️ binário Axum |
27
+ | Server functions (`#[server]`) | ❌ não existe | ✅ |
28
+
29
+ **Regra de ouro:**
30
+ - Atrás de login e SEO não importa → **CSR**
31
+ - Precisa SEO, carregamento inicial rápido, ou server functions → **Fullstack**
32
+ - Já tem Axum no monorepo → **Fullstack** (workspace unificado)
33
+
34
+ ## 2. Ferramentas — nunca misturar
35
+
36
+ | Variante | Build | Dev server | Test |
37
+ |---|---|---|---|
38
+ | CSR | `trunk build --release` | `trunk serve` | `cargo test --workspace` |
39
+ | Fullstack | `cargo leptos build --release` | `cargo leptos watch` | `cargo test --workspace` |
40
+
41
+ > `cargo leptos test` **não existe**. Use `cargo test --workspace`.
42
+ > Não use `trunk` para fullstack nem `cargo leptos` para CSR.
43
+
44
+ ## 3. Idioms obrigatórios Leptos 0.7
45
+
46
+ ### Estado reativo
47
+
48
+ ```rust
49
+ // Signals — só re-renderiza o que usa
50
+ let (count, set_count) = signal(0);
51
+ let doubled = move || count.get() * 2; // derived (memo inline)
52
+
53
+ // Para estado compartilhado:
54
+ let count = RwSignal::new(0);
55
+ ```
56
+
57
+ ### Dados assíncronos
58
+
59
+ ```rust
60
+ // ✅ Resource — declarativo, integra com Suspense
61
+ let user = Resource::new(|| user_id(), |id| async move { fetch_user(id).await });
62
+
63
+ view! {
64
+ <Suspense fallback=|| view! { <p>"Loading..."</p> }>
65
+ {move || user.get().map(|u| view! { <p>{u.name}</p> })}
66
+ </Suspense>
67
+ }
68
+
69
+ // ❌ Effect que faz fetch (re-executa em todo render)
70
+ ```
71
+
72
+ ### Mutações
73
+
74
+ ```rust
75
+ // ✅ Action — submits, forms, operações
76
+ let save = Action::new(|input: &String| {
77
+ let input = input.clone();
78
+ async move { api::save(input).await }
79
+ });
80
+
81
+ view! {
82
+ <button on:click=move |_| save.dispatch("hello".to_string())>"Save"</button>
83
+ <Show when=move || save.pending().get()><p>"Saving..."</p></Show>
84
+ }
85
+ ```
86
+
87
+ ### Listas e condicionais
88
+
89
+ ```rust
90
+ view! {
91
+ <Show when=move || logged_in.get() fallback=|| view! { <Login/> }>
92
+ <Dashboard/>
93
+ </Show>
94
+
95
+ <For
96
+ each=move || items.get()
97
+ key=|item| item.id
98
+ children=move |item| view! { <ItemRow item=item/> }
99
+ />
100
+ }
101
+ ```
102
+
103
+ ### Server functions (fullstack only)
104
+
105
+ ```rust
106
+ #[server(SaveUser, "/api")]
107
+ pub async fn save_user(name: String) -> Result<User, ServerFnError> {
108
+ // Só roda no server (feature = "ssr")
109
+ db::create_user(name).await.map_err(Into::into)
110
+ }
111
+
112
+ // No componente
113
+ let save = ServerAction::<SaveUser>::new();
114
+ ```
115
+
116
+ ## 4. Tipos compartilhados server + WASM
117
+
118
+ ```rust
119
+ // crates/<projeto>-domain/src/lib.rs
120
+ use serde::{Deserialize, Serialize};
121
+
122
+ #[cfg_attr(feature = "ssr", derive(sqlx::FromRow))] // só no server
123
+ #[derive(Clone, Debug, Serialize, Deserialize)] // server + WASM
124
+ pub struct SecurityEvent {
125
+ pub id: uuid::Uuid,
126
+ pub attack_type: String,
127
+ pub risk_score: f32,
128
+ pub blocked: bool,
129
+ }
130
+ ```
131
+
132
+ `Cargo.toml`:
133
+
134
+ ```toml
135
+ [dependencies]
136
+ serde = { version = "1.0", features = ["derive"] }
137
+ uuid = { version = "1.10", features = ["v4", "serde"] }
138
+
139
+ [dependencies.sqlx]
140
+ version = "0.8"
141
+ features = ["postgres", "runtime-tokio", "uuid"]
142
+ optional = true
143
+
144
+ [features]
145
+ ssr = ["dep:sqlx"]
146
+ ```
147
+
148
+ ## 5. Workspace misto (WASM + nativo)
149
+
150
+ ```toml
151
+ # Cargo.toml do workspace
152
+ [workspace]
153
+ resolver = "2"
154
+ members = [
155
+ "crates/<p>-core", # lib nativa (x86)
156
+ "crates/<p>-server", # bin nativo — Axum
157
+ "crates/<p>-web", # bin+lib WASM — Leptos
158
+ "crates/<p>-cli", # bin nativo
159
+ ]
160
+ ```
161
+
162
+ ```toml
163
+ # crates/<p>-web/Cargo.toml — features separam server de WASM
164
+ [features]
165
+ default = []
166
+ hydrate = ["leptos/hydrate"]
167
+ ssr = ["dep:axum", "dep:leptos_axum", "dep:tokio", "leptos/ssr"]
168
+ ```
169
+
170
+ > **Antipattern crítico:** `[build] target = "wasm32-unknown-unknown"` no `.cargo/config.toml` raiz quebra todos os crates nativos. `cargo leptos` gerencia o target WASM internamente — não interfira.
171
+
172
+ ## 6. Antipatterns
173
+
174
+ | Antipattern | Por quê | Alternativa |
175
+ |---|---|---|
176
+ | `wasm_bindgen` direto | Bypassa abstrações Leptos, frágil | APIs do Leptos (`web_sys` via feature) |
177
+ | `panic!` em componentes | Derruba o app sem `ErrorBoundary` | `Result<_, ServerFnError>` + `ErrorBoundary` |
178
+ | `Effect` que faz fetch | Re-executa a cada render | `Resource::new()` |
179
+ | `tokio::spawn` no client | `tokio` não existe no WASM | `spawn_local()` ou server function |
180
+ | `std::thread` no client | Não existe no WASM | Signals para paralelismo reativo |
181
+ | `cargo leptos test` | Comando inválido | `cargo test --workspace` |
182
+ | `[build] target` global | Quebra crates nativos | Sem target global; cargo-leptos gerencia |
183
+
184
+ ## 7. Templates de tasks DARE
185
+
186
+ Cole no `DARE/dare-dag.yaml` após blueprint:
187
+
188
+ ```yaml
189
+ - id: leptos-001
190
+ title: "Workspace, AppShell e Router base"
191
+ description: |
192
+ Cargo workspace com resolver = "2".
193
+ App component com leptos_router::Router.
194
+ Layout base (header, main, footer). Rota "/" → HomePage.
195
+ Ralph Loop: cargo leptos build --release + cargo test --workspace + cargo clippy
196
+ depends_on: []
197
+
198
+ - id: leptos-002
199
+ title: "Form com Action + server function"
200
+ description: |
201
+ #[server] fn para processar o form.
202
+ ActionForm ou Action manual.
203
+ Validar input no server (ServerFnError em erro).
204
+ Pending state com Action::pending().
205
+ depends_on: [leptos-001]
206
+
207
+ - id: leptos-003
208
+ title: "Lista paginada com Resource + Suspense"
209
+ description: |
210
+ Resource recebendo página como signal.
211
+ Envolver em Suspense com fallback loading.
212
+ ErrorBoundary para erros de fetch.
213
+ Paginação com For + key por ID.
214
+ depends_on: [leptos-001]
215
+ ```
216
+
217
+ ## 8. Stack canônica
218
+
219
+ | Camada | Cliente (WASM) | Server (Fullstack) |
220
+ |---|---|---|
221
+ | Framework | Leptos 0.7+ | Leptos 0.7 + leptos_axum |
222
+ | Roteamento | leptos_router | (compartilhado) |
223
+ | Estado server | Resource + Server Functions | sqlx + Axum |
224
+ | Estilo | Tailwind | — |
225
+ | Build | cargo-leptos / trunk | cargo-leptos |
226
+
227
+ ## Como aplicar
228
+
229
+ ### Passo 1: Decidir variante
230
+
231
+ Use a tabela em §1. Documente decisão no DESIGN.md.
232
+
233
+ ### Passo 2: Setup workspace
234
+
235
+ Aplique `dare-rust-workspace` para layout multi-crate. `<p>-domain` em separado para tipos compartilhados.
236
+
237
+ ### Passo 3: Implementar componentes seguindo idioms §3
238
+
239
+ Resource para fetch, Action para mutação, Show/For para condicional/lista.
240
+
241
+ ### Passo 4: Server functions (fullstack)
242
+
243
+ `#[server]` para qualquer comunicação client→server. Validação no server, ServerFnError em erro.
244
+
245
+ ### Passo 5: Ralph Loop validation
246
+
247
+ ```bash
248
+ cargo leptos build --release # fullstack
249
+ # ou
250
+ trunk build --release # CSR
251
+ cargo test --workspace
252
+ cargo clippy --workspace --all-targets -- -D warnings
253
+ ```
254
+
255
+ ## Dicas
256
+
257
+ - **Combine** com `dare-rust-workspace` para decisão de layout
258
+ - **Para SSR**, use `leptos_axum` (não axum direto)
259
+ - **Hidratação** — sempre `view!` em ambos lados, server gera HTML inicial
260
+
261
+ ---
262
+
263
+ Esta skill é parte do DARE Method e está sob licença MIT.