@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,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`.
@@ -0,0 +1,166 @@
1
+ # /dare-quality-telemetry
2
+
3
+ Coleta métricas das skills DARE (ax, layered-design, llm-integration, frontend, realtime…), persiste histórico em `tmp/dare_metrics.json` e detecta regressões contra baseline.
4
+
5
+ ## Como usar
6
+
7
+ ```
8
+ /dare-quality-telemetry collect # roda todos os collectors
9
+ /dare-quality-telemetry baseline # captura baseline atual
10
+ /dare-quality-telemetry compare # compara contra baseline (CI)
11
+ /dare-quality-telemetry report # gera markdown report
12
+ ```
13
+
14
+ ## O que faz
15
+
16
+ 1. Roda collectors das skills configuradas em paralelo
17
+ 2. Agrega em um snapshot
18
+ 3. Persiste em `tmp/dare_metrics.json`
19
+ 4. Compara com `tmp/dare_metrics_baseline.json`
20
+ 5. Reporta em markdown / JSON
21
+ 6. Exit code ≠ 0 se regressão crítica
22
+
23
+ ## Arquitetura
24
+
25
+ ```
26
+ collect.ts
27
+ ↓ chama em paralelo
28
+ [ax collector] [layered coll.] [llm coll.] [frontend coll.] [realtime coll.]
29
+
30
+ Aggregator → snapshot { skill: { M-01: value, ... } }
31
+
32
+ tmp/dare_metrics.json + Regression detector
33
+
34
+ Reporter → markdown / JSON / GH Actions summary
35
+ ```
36
+
37
+ ## Métricas obrigatórias
38
+
39
+ | ID | Métrica |
40
+ |---|---|
41
+ | M-01 | 100% dos builds incluem coleta (skill instalada = true) |
42
+ | M-02 | 0 regressões passam despercebidas (baseline existe) |
43
+ | M-03 | Histórico mantido em `tmp/dare_metrics.json` |
44
+ | M-04 | Workflow `.github/workflows/dare-metrics.yml` existe |
45
+
46
+ ## Configuração
47
+
48
+ ```yaml
49
+ # dare.config.yml
50
+ telemetry:
51
+ skills:
52
+ - dare-ax
53
+ - dare-layered-design
54
+ - dare-llm-integration
55
+ - dare-frontend-design
56
+ - dare-realtime
57
+ output: tmp/dare_metrics.json
58
+ baseline: tmp/dare_metrics_baseline.json
59
+ fail_on_regression: true
60
+ ```
61
+
62
+ ## Schema do snapshot
63
+
64
+ ```json
65
+ {
66
+ "timestamp": "2026-05-26T10:30:00Z",
67
+ "commit": "1d4a1417",
68
+ "branch": "main",
69
+ "skills": {
70
+ "dare-ax": {
71
+ "M-01": { "value": 1.0, "status": "PASS" },
72
+ "M-04": { "value": 1.0, "status": "PASS" }
73
+ },
74
+ "dare-layered-design": {
75
+ "M-01": { "value": 0.95, "status": "PASS" }
76
+ }
77
+ }
78
+ }
79
+ ```
80
+
81
+ ## Detecção de regressão
82
+
83
+ | Mudança | Severidade | Ação |
84
+ |---|---|---|
85
+ | value caiu ≥ 5% | CRITICAL | bloquear PR |
86
+ | value caiu < 5% mas ≥ 1% | WARNING | comentar no PR |
87
+ | value subiu | INFO | celebrar |
88
+ | value igual | NEUTRAL | nenhuma |
89
+
90
+ ## O que fazer
91
+
92
+ ### Passo 1: Instalar
93
+
94
+ ```bash
95
+ pnpm add @dare/quality-telemetry
96
+ ```
97
+
98
+ ### Passo 2: Configurar `dare.config.yml`
99
+
100
+ Listar as skills filhas a rastrear.
101
+
102
+ ### Passo 3: Rodar collect
103
+
104
+ ```bash
105
+ dare metrics collect
106
+ ```
107
+
108
+ ### Passo 4: Capturar baseline
109
+
110
+ ```bash
111
+ dare metrics baseline
112
+ ```
113
+
114
+ Geralmente capturado uma vez por release tag, não a cada commit.
115
+
116
+ ### Passo 5: Workflow CI
117
+
118
+ ```yaml
119
+ # .github/workflows/dare-metrics.yml
120
+ name: DARE Metrics
121
+ on: [push, pull_request]
122
+ jobs:
123
+ metrics:
124
+ runs-on: ubuntu-latest
125
+ steps:
126
+ - uses: actions/checkout@v4
127
+ - uses: actions/setup-node@v4
128
+ with: { node-version: '20' }
129
+ - run: pnpm install
130
+ - run: pnpm dare metrics collect
131
+ - run: pnpm dare metrics compare
132
+ - uses: actions/upload-artifact@v4
133
+ with:
134
+ name: dare-metrics
135
+ path: tmp/dare_metrics*.json
136
+ ```
137
+
138
+ ## Antipatterns
139
+
140
+ | AP | Antipattern | Por quê |
141
+ |---|---|---|
142
+ | AP-01 | Métricas sem baseline | Não detecta regressão |
143
+ | AP-02 | Histórico não versionado | Perde contexto |
144
+ | AP-03 | Coletar mas não bloquear | CI vira teatro |
145
+ | AP-04 | Baseline desatualizado | Regressão real fica invisível |
146
+
147
+ ## Boas práticas
148
+
149
+ 1. **Baseline por release**, não por commit
150
+ 2. **Regressão = bloqueio**, não comentário ignorável
151
+ 3. **Exportar para Datadog/Grafana** após N coletas
152
+ 4. **Collectors paralelos** — skill deve rodar em < 60s
153
+
154
+ ## Saída esperada
155
+
156
+ Reporte markdown com:
157
+ - Tabela por skill com M-01 a M-04
158
+ - Comparação contra baseline (delta por métrica)
159
+ - Status final: PASS / WARNING / CRITICAL
160
+ - Link para snapshot completo em `tmp/dare_metrics.json`
161
+
162
+ $ARGUMENTS
163
+
164
+ ---
165
+
166
+ Skill MIT — parte do DARE Method.
@@ -0,0 +1,159 @@
1
+ # /dare-realtime
2
+
3
+ Comunicação real-time (WebSocket, SSE) DARE-compliant — eventos tipados, subscriptions autorizadas, reconexão com backoff, zero ghost listeners.
4
+
5
+ ## Como usar
6
+
7
+ ```
8
+ /dare-realtime # audita uso de WS/SSE no projeto
9
+ /dare-realtime scaffold ws # gera event registry + subscription manager + reconnect
10
+ /dare-realtime audit ghosts # detecta listeners sem cleanup
11
+ ```
12
+
13
+ ## Os 4 pilares
14
+
15
+ ### 1. Schema validation de eventos
16
+
17
+ Todo evento WS/SSE tem schema JSON. Server valida antes de emitir, client valida antes de processar.
18
+
19
+ ### 2. Registro central de tipos
20
+
21
+ Um único `event_registry.ts` lista todos os event types com versão (`.v1`, `.v2`).
22
+
23
+ ### 3. Reconexão com exponential backoff
24
+
25
+ ```typescript
26
+ class ReconnectStrategy {
27
+ private attempt = 0;
28
+ next(): number {
29
+ const base = Math.min(1000 * 2 ** this.attempt, 30_000);
30
+ return base + Math.random() * 1000; // jitter
31
+ }
32
+ reset() { this.attempt = 0; }
33
+ }
34
+ ```
35
+
36
+ ### 4. Subscription manager (zero ghost listeners)
37
+
38
+ Map de subscriptions com cleanup automático on disconnect.
39
+
40
+ ## Métricas obrigatórias
41
+
42
+ | ID | Métrica |
43
+ |---|---|
44
+ | M-01 | 100% de event types com JSON Schema |
45
+ | M-02 | 100% de subscriptions autorizadas |
46
+ | M-03 | 0 ghost listeners após desconexão |
47
+ | M-04 | Estratégia de reconexão configurada |
48
+
49
+ ## Antipatterns
50
+
51
+ | AP | Antipattern | Correção |
52
+ |---|---|---|
53
+ | AP-01 | Evento sem schema | Adicionar no registry |
54
+ | AP-02 | `socket.on()` sem cleanup | SubscriptionManager |
55
+ | AP-03 | Reconexão sem backoff | Exponential + jitter |
56
+ | AP-04 | Sem autorização de subscription | `authorize()` antes de `subscribe()` |
57
+ | AP-05 | Broadcast sem filtro | Rooms por tenant |
58
+ | AP-06 | Estado stale após reconectar | Resync via REST/snapshot |
59
+
60
+ ## O que fazer
61
+
62
+ ### Passo 1: Event Registry
63
+
64
+ ```typescript
65
+ export const EventRegistry = {
66
+ 'user.created.v1': { schema: UserCreatedSchema, requires: 'admin' },
67
+ 'message.sent.v1': { schema: MessageSentSchema, requires: 'participant' },
68
+ };
69
+ ```
70
+
71
+ ### Passo 2: Subscription Manager
72
+
73
+ ```typescript
74
+ class SubscriptionManager {
75
+ private subs = new Map<string, Set<string>>();
76
+
77
+ subscribe(connId: string, event: string) {
78
+ if (!this.subs.has(connId)) this.subs.set(connId, new Set());
79
+ this.subs.get(connId)!.add(event);
80
+ }
81
+
82
+ onDisconnect(connId: string) {
83
+ this.subs.delete(connId); // cleanup SEMPRE
84
+ }
85
+ }
86
+ ```
87
+
88
+ ### Passo 3: Reconnect com backoff
89
+
90
+ ```typescript
91
+ const strategy = new ReconnectStrategy();
92
+ socket.on('disconnect', () => {
93
+ setTimeout(() => socket.connect(), strategy.next());
94
+ });
95
+ socket.on('connect', () => {
96
+ strategy.reset();
97
+ resyncState(); // buscar eventos perdidos via REST
98
+ });
99
+ ```
100
+
101
+ ### Passo 4: Autorização por subscription
102
+
103
+ ```typescript
104
+ socket.on('subscribe', (eventType) => {
105
+ if (!authorize(socket.user, eventType)) {
106
+ return socket.emit('error', { code: 'FORBIDDEN' });
107
+ }
108
+ subscriptionManager.subscribe(socket.id, eventType);
109
+ });
110
+ ```
111
+
112
+ ### Passo 5: Validação no server e client
113
+
114
+ ```typescript
115
+ // Server antes de emitir
116
+ const valid = EventRegistry[eventType].schema.safeParse(payload);
117
+ if (!valid.success) return log.error('invalid event', valid.error);
118
+ io.to(room).emit(eventType, valid.data);
119
+
120
+ // Client antes de processar
121
+ socket.on(eventType, (payload) => {
122
+ const valid = EventRegistry[eventType].schema.safeParse(payload);
123
+ if (!valid.success) return log.warn('invalid event received');
124
+ handleEvent(valid.data);
125
+ });
126
+ ```
127
+
128
+ ## Stack recomendada
129
+
130
+ | Stack | WebSocket | SSE |
131
+ |---|---|---|
132
+ | Node | `socket.io`, `ws` | `eventsource` + endpoint custom |
133
+ | Rails | Action Cable | Rack streaming |
134
+ | Rust/Axum | `tokio-tungstenite` | `axum::sse::Sse` |
135
+ | FastAPI | `fastapi.WebSocket` | `EventSourceResponse` |
136
+ | Go | `gorilla/websocket` | stdlib `http.Flusher` |
137
+
138
+ ## Boas práticas
139
+
140
+ 1. **SSE para server→client unidirecional** (logs, métricas)
141
+ 2. **WS para bidirectional** (chat, colaboração)
142
+ 3. **Rooms/channels por tenant** — evita cross-tenant
143
+ 4. **Heartbeat ping-pong** — detectar conexão zumbi
144
+ 5. **Backpressure** — drop eventos antigos se client lento
145
+ 6. **Replay limitado** — últimos N eventos por room para reconexão recente
146
+
147
+ ## Saída esperada
148
+
149
+ Reporte:
150
+ - Lista de event types e seus schemas (ou falta de)
151
+ - Subscriptions sem autorização
152
+ - Listeners sem cleanup (grep `socket.on` sem `removeListener` ou cleanup)
153
+ - Stack escolhida e configuração de reconnect
154
+
155
+ $ARGUMENTS
156
+
157
+ ---
158
+
159
+ Skill MIT — parte do DARE Method.
@@ -0,0 +1,145 @@
1
+ # Comando: /dare-refine
2
+
3
+ ## Descrição
4
+
5
+ Analisa a complexidade de uma task e, quando alta, **quebra em sub-tasks menores** com escopo bem delimitado. Pode ser chamada:
6
+
7
+ - Automaticamente pela skill `dare-tasks` logo após gerar o DAG (para cada task ≥ MED)
8
+ - Manualmente pelo dev: `/dare-refine task-034`
9
+ - Após mudança de escopo: quando o BLUEPRINT mudou e uma task ficou grande demais
10
+
11
+ A camada determinística (heurística de complexidade) já é feita pelo CLI: `dare refine <id>`. Este comando adiciona a camada **semântica** — você lê a spec, decide se a quebra é necessária e, se for, produz sub-tasks coerentes.
12
+
13
+ ## Quando rodar
14
+
15
+ - Logo após `/dare-tasks` para cada task com complexity HIGH no `dare-dag.yaml`
16
+ - Quando o dev pede explicitamente: `/dare-refine task-034`
17
+ - Quando você gerou uma task e ela "te parece grande" mesmo marcada MED — confie no instinto
18
+
19
+ ## Como executar
20
+
21
+ ### 1. Validar argumento
22
+
23
+ `$ARGUMENTS` deve ter o `task-id`. Se vazio, peça.
24
+
25
+ ### 2. Rodar a camada determinística
26
+
27
+ ```bash
28
+ dare refine $ARGUMENTS --split --format json > .dare/refine-$ARGUMENTS.json
29
+ ```
30
+
31
+ Esse JSON traz:
32
+ - `report.score` e `report.level` (LOW/MED/HIGH/CRITICAL)
33
+ - `report.signals` — explica por que pontuou alto/baixo
34
+ - `report.recommendsSplit` — true se HIGH ou CRITICAL
35
+ - `proposal.subtasks` — quebra inicial baseada em diretórios (chute coarse)
36
+
37
+ ### 3. Decidir se vale quebrar
38
+
39
+ Critérios para **quebrar**:
40
+
41
+ - ✅ `recommendsSplit: true` da heurística (HIGH/CRITICAL)
42
+ - ✅ Mais de 6 arquivos a criar/modificar
43
+ - ✅ Mistura responsabilidades fortes (ex.: cria modelo + escreve controller + escreve teste + faz migration — split por camada)
44
+ - ✅ Toca código que outra task ainda não criou (deveria ser depois)
45
+ - ✅ Inclui refactor + feature nova juntos
46
+ - ✅ Tem keyword "pesada" (refactor, migrate, integrate) E score MED+
47
+
48
+ Critérios para **manter inteira**:
49
+
50
+ - ✅ Score LOW e até MED
51
+ - ✅ Todos os arquivos pertencem ao mesmo módulo/feature
52
+ - ✅ Cabe em uma conversa única do agente (15–60 min de trabalho efetivo)
53
+
54
+ ### 4. Se decidir quebrar — produzir sub-tasks coerentes
55
+
56
+ Não use a `proposal.subtasks` da CLI sem revisão — ela agrupa por diretório, o que nem sempre faz sentido semantico. **Reagrupe por responsabilidade**:
57
+
58
+ | Eixo de split | Quando aplicar |
59
+ |---|---|
60
+ | **Por camada** | Modelo / Controller / Service / Test ficam em tasks separadas se cada um é grande |
61
+ | **Por endpoint** | Task original tinha 4 endpoints REST → 4 sub-tasks de 1 endpoint cada |
62
+ | **Por feature** | Auth tinha "register + login + refresh + logout" → split por verbo |
63
+ | **Refactor + feature** | Quebra em "1. refactor X para preparar terreno" + "2. adiciona feature Y em cima" |
64
+ | **Migration + código** | "1. migration + seeds" + "2. código que usa o novo schema" |
65
+
66
+ Cada sub-task deve:
67
+
68
+ - Ter `subtask_prompt` auto-suficiente (assinaturas exatas, validações, edge cases — o Anti-Stub Contract aplica)
69
+ - Ter spec_file própria em `DARE/EXECUTION/<sub-id>.md`
70
+ - Ter `depends_on` mínimo mas correto (sub-tasks da mesma família geralmente dependem em ordem)
71
+ - Ter complexity honesta — se a sub ainda ficar HIGH, quebra de novo
72
+
73
+ ### 5. Emitir verdito + plano
74
+
75
+ Salve em `.dare/refine-verdict-$ARGUMENTS.json`:
76
+
77
+ ```json
78
+ {
79
+ "manageable": false,
80
+ "reasons": [
81
+ "Score 18 (HIGH) — 7 endpoints + migration + 12 testes no mesmo escopo",
82
+ "Mistura refactor de service layer com novos endpoints"
83
+ ],
84
+ "proposedSubtasks": [
85
+ {
86
+ "id": "task-034a",
87
+ "title": "Refactor UserService para suportar profile_settings",
88
+ "files": ["src/services/UserService.ts", "tests/services/UserService.test.ts"],
89
+ "rationale": "Refactor isolado antes da feature — gates passam sem mexer em controllers",
90
+ "estimatedLevel": "MED"
91
+ },
92
+ {
93
+ "id": "task-034b",
94
+ "title": "Endpoints GET/PATCH /users/me/profile",
95
+ "files": ["src/controllers/profile.ts", "tests/controllers/profile.test.ts"],
96
+ "rationale": "Endpoints novos consumindo o serviço refatorado",
97
+ "estimatedLevel": "MED"
98
+ }
99
+ ]
100
+ }
101
+ ```
102
+
103
+ Se a task **é** manuseável (não precisa quebrar):
104
+
105
+ ```json
106
+ {
107
+ "manageable": true,
108
+ "reasons": ["Score 7 (MED), 4 arquivos no mesmo módulo, 6 testes — cabe em uma conversa"]
109
+ }
110
+ ```
111
+
112
+ ### 6. Aplicar o split
113
+
114
+ Se quebrou:
115
+
116
+ 1. **Edite** `DARE/dare-dag.yaml` substituindo a task original pelas sub-tasks
117
+ 2. **Crie** as specs novas em `DARE/EXECUTION/<sub-id>.md` (use `templates/TASK-SPEC-template.md` — seguindo o Anti-Stub Contract!)
118
+ 3. **Atualize** `DARE/TASKS.md` (visão humana) refletindo a quebra
119
+ 4. **Regenere** o Mermaid: `dare dag viz -o DARE/dag-graph.mmd`
120
+ 5. **Marque** a task original como SPLIT (não deletar — preservar histórico) ou remover e referenciar no header das sub-tasks
121
+
122
+ ### 7. Mensagem ao usuário
123
+
124
+ Se manteve inteira:
125
+ > ✅ Task `$ARGUMENTS` está bem-dimensionada (score X, level Y). Sem split necessário.
126
+
127
+ Se quebrou:
128
+ > 🪓 Task `$ARGUMENTS` quebrada em N sub-task(s):
129
+ > - `<id>a`: <título>
130
+ > - `<id>b`: <título>
131
+ > ...
132
+ >
133
+ > Specs criadas em `DARE/EXECUTION/`. Revise antes de executar:
134
+ > ```bash
135
+ > dare validate # verifica DAG
136
+ > dare dag viz # confirma grafo
137
+ > dare execute --next # roda a primeira sub-task pronta
138
+ > ```
139
+
140
+ ## Regras inegociáveis
141
+
142
+ - **Não quebre tasks LOW** — overhead não vale a pena
143
+ - **Não invente dependências** — sub-tasks da mesma família frequentemente são sequenciais, não falsamente paralelas
144
+ - **Cada sub-task precisa ser independentemente testável** — se você precisa rodar A para testar B, A precisa ser parent de B no DAG
145
+ - **Anti-Stub Contract aplica em cada sub-task** — não relaxa critérios só porque é menor