@dewtech/dare-cli 3.3.0 → 3.4.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 (582) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +764 -764
  3. package/dist/__tests__/confidence.test.js +13 -13
  4. package/dist/__tests__/dag-converter.test.js +56 -56
  5. package/dist/__tests__/mcp-server/server.test.js +3 -16
  6. package/dist/__tests__/mcp-server/server.test.js.map +1 -1
  7. package/dist/__tests__/project-generator.test.js +2 -2
  8. package/dist/__tests__/project-generator.test.js.map +1 -1
  9. package/dist/__tests__/refine.test.js +49 -49
  10. package/dist/__tests__/reverse-collection.test.js +6 -6
  11. package/dist/__tests__/review.test.js +38 -38
  12. package/dist/__tests__/security-hardening.test.d.ts +2 -0
  13. package/dist/__tests__/security-hardening.test.d.ts.map +1 -0
  14. package/dist/__tests__/security-hardening.test.js +101 -0
  15. package/dist/__tests__/security-hardening.test.js.map +1 -0
  16. package/dist/__tests__/validate.test.js +65 -65
  17. package/dist/bin/dare.js +0 -0
  18. package/dist/commands/__tests__/init-validation.test.d.ts +2 -0
  19. package/dist/commands/__tests__/init-validation.test.d.ts.map +1 -0
  20. package/dist/commands/__tests__/init-validation.test.js +81 -0
  21. package/dist/commands/__tests__/init-validation.test.js.map +1 -0
  22. package/dist/commands/__tests__/init.integration.spec.js +6 -4
  23. package/dist/commands/__tests__/init.integration.spec.js.map +1 -1
  24. package/dist/commands/__tests__/init.spec.d.ts +2 -0
  25. package/dist/commands/__tests__/init.spec.d.ts.map +1 -0
  26. package/dist/commands/__tests__/init.spec.js +88 -0
  27. package/dist/commands/__tests__/init.spec.js.map +1 -0
  28. package/dist/commands/blueprint.js +122 -122
  29. package/dist/commands/design.js +20 -20
  30. package/dist/commands/init-validation.d.ts +22 -0
  31. package/dist/commands/init-validation.d.ts.map +1 -0
  32. package/dist/commands/init-validation.js +54 -0
  33. package/dist/commands/init-validation.js.map +1 -0
  34. package/dist/commands/init.d.ts.map +1 -1
  35. package/dist/commands/init.js +26 -10
  36. package/dist/commands/init.js.map +1 -1
  37. package/dist/graphrag/graph-rag.js +24 -24
  38. package/dist/mcp-server/__tests__/auth.test.d.ts +2 -0
  39. package/dist/mcp-server/__tests__/auth.test.d.ts.map +1 -0
  40. package/dist/mcp-server/__tests__/auth.test.js +72 -0
  41. package/dist/mcp-server/__tests__/auth.test.js.map +1 -0
  42. package/dist/mcp-server/__tests__/boot-config.test.d.ts +2 -0
  43. package/dist/mcp-server/__tests__/boot-config.test.d.ts.map +1 -0
  44. package/dist/mcp-server/__tests__/boot-config.test.js +29 -0
  45. package/dist/mcp-server/__tests__/boot-config.test.js.map +1 -0
  46. package/dist/mcp-server/__tests__/error-sanitize.test.d.ts +2 -0
  47. package/dist/mcp-server/__tests__/error-sanitize.test.d.ts.map +1 -0
  48. package/dist/mcp-server/__tests__/error-sanitize.test.js +66 -0
  49. package/dist/mcp-server/__tests__/error-sanitize.test.js.map +1 -0
  50. package/dist/mcp-server/__tests__/path-confinement.test.d.ts +2 -0
  51. package/dist/mcp-server/__tests__/path-confinement.test.d.ts.map +1 -0
  52. package/dist/mcp-server/__tests__/path-confinement.test.js +135 -0
  53. package/dist/mcp-server/__tests__/path-confinement.test.js.map +1 -0
  54. package/dist/mcp-server/bin/server.js +18 -6
  55. package/dist/mcp-server/bin/server.js.map +1 -1
  56. package/dist/mcp-server/boot-config.d.ts +6 -0
  57. package/dist/mcp-server/boot-config.d.ts.map +1 -0
  58. package/dist/mcp-server/boot-config.js +17 -0
  59. package/dist/mcp-server/boot-config.js.map +1 -0
  60. package/dist/mcp-server/middleware/auth.d.ts +10 -0
  61. package/dist/mcp-server/middleware/auth.d.ts.map +1 -0
  62. package/dist/mcp-server/middleware/auth.js +44 -0
  63. package/dist/mcp-server/middleware/auth.js.map +1 -0
  64. package/dist/mcp-server/middleware/cors.d.ts +6 -0
  65. package/dist/mcp-server/middleware/cors.d.ts.map +1 -0
  66. package/dist/mcp-server/middleware/cors.js +30 -0
  67. package/dist/mcp-server/middleware/cors.js.map +1 -0
  68. package/dist/mcp-server/middleware/error-handler.d.ts +11 -0
  69. package/dist/mcp-server/middleware/error-handler.d.ts.map +1 -0
  70. package/dist/mcp-server/middleware/error-handler.js +14 -0
  71. package/dist/mcp-server/middleware/error-handler.js.map +1 -0
  72. package/dist/mcp-server/server.d.ts +7 -2
  73. package/dist/mcp-server/server.d.ts.map +1 -1
  74. package/dist/mcp-server/server.js +185 -105
  75. package/dist/mcp-server/server.js.map +1 -1
  76. package/dist/skills/registry-mock.json +109 -109
  77. package/dist/skills/tests/manifest.spec.js +20 -20
  78. package/dist/stacks/__tests__/dna-emitter.spec.js +6 -6
  79. package/dist/stacks/dna-emitter.js +69 -69
  80. package/dist/stacks/ruby-rails-8/scaffold.js +15 -15
  81. package/dist/utils/project-generator.d.ts.map +1 -1
  82. package/dist/utils/project-generator.js +254 -252
  83. package/dist/utils/project-generator.js.map +1 -1
  84. package/dist/utils/stack-bootstrap.js +371 -371
  85. package/dist/utils/templates.js +394 -394
  86. package/dist/verification/__tests__/anti-tamper.test.js +13 -13
  87. package/package.json +96 -93
  88. package/templates/DARE-dag-example.yaml +280 -280
  89. package/templates/UPDATE-MANIFEST.json +68 -68
  90. package/templates/backend/node-nestjs/.env.example +9 -9
  91. package/templates/backend/node-nestjs/nest-cli.json +8 -8
  92. package/templates/backend/node-nestjs/package.json +50 -50
  93. package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
  94. package/templates/backend/node-nestjs/src/app.module.ts +15 -15
  95. package/templates/backend/node-nestjs/src/app.service.ts +8 -8
  96. package/templates/backend/node-nestjs/src/main.ts +24 -24
  97. package/templates/backend/node-nestjs/tsconfig.json +21 -21
  98. package/templates/backend/php-laravel/.env.example +22 -22
  99. package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
  100. package/templates/backend/php-laravel/composer.json +40 -40
  101. package/templates/backend/python-fastapi/.env.example +4 -4
  102. package/templates/backend/python-fastapi/app/api/router.py +8 -8
  103. package/templates/backend/python-fastapi/app/core/config.py +20 -20
  104. package/templates/backend/python-fastapi/main.py +35 -35
  105. package/templates/backend/python-fastapi/requirements.txt +13 -13
  106. package/templates/backend/rust-axum/.env.example +3 -3
  107. package/templates/backend/rust-axum/Cargo.toml +23 -23
  108. package/templates/backend/rust-axum/src/errors.rs +30 -30
  109. package/templates/backend/rust-axum/src/main.rs +32 -32
  110. package/templates/backend/rust-axum/src/routes.rs +6 -6
  111. package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
  112. package/templates/frontend/leptos-csr/Cargo.toml +16 -16
  113. package/templates/frontend/leptos-csr/Trunk.toml +10 -10
  114. package/templates/frontend/leptos-csr/index.html +11 -11
  115. package/templates/frontend/leptos-csr/src/lib.rs +20 -20
  116. package/templates/frontend/leptos-csr/style/main.scss +19 -19
  117. package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
  118. package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
  119. package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
  120. package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
  121. package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
  122. package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
  123. package/templates/frontend/react/index.html +12 -12
  124. package/templates/frontend/react/package.json +35 -35
  125. package/templates/frontend/react/src/App.tsx +25 -25
  126. package/templates/frontend/react/src/main.tsx +9 -9
  127. package/templates/frontend/vue/package.json +32 -32
  128. package/templates/frontend/vue/src/App.vue +7 -7
  129. package/templates/frontend/vue/src/main.ts +10 -10
  130. package/templates/frontend/vue/src/router/index.ts +14 -14
  131. package/templates/frontend/vue/src/views/HomeView.vue +6 -6
  132. package/templates/hooks/pre-commit-dare-validate +24 -24
  133. package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -152
  134. package/templates/ide/antigravity/.agents/skills/dare-bench/SKILL.md +21 -21
  135. package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +368 -368
  136. package/templates/ide/antigravity/.agents/skills/dare-bootstrap/SKILL.md +32 -32
  137. package/templates/ide/antigravity/.agents/skills/dare-bugfix-design/SKILL.md +76 -76
  138. package/templates/ide/antigravity/.agents/skills/dare-dag/SKILL.md +32 -32
  139. package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -154
  140. package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -130
  141. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
  142. package/templates/ide/antigravity/.agents/skills/dare-design/SKILL.md +180 -180
  143. package/templates/ide/antigravity/.agents/skills/dare-discover/SKILL.md +33 -33
  144. package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -63
  145. package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -315
  146. package/templates/ide/antigravity/.agents/skills/dare-execute/SKILL.md +264 -264
  147. package/templates/ide/antigravity/.agents/skills/dare-feature-design/SKILL.md +74 -74
  148. package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -192
  149. package/templates/ide/antigravity/.agents/skills/dare-graph/SKILL.md +35 -35
  150. package/templates/ide/antigravity/.agents/skills/dare-info/SKILL.md +31 -31
  151. package/templates/ide/antigravity/.agents/skills/dare-init/SKILL.md +35 -35
  152. package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -337
  153. package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -166
  154. package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -217
  155. package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -61
  156. package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -187
  157. package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -217
  158. package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -114
  159. package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -108
  160. package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -111
  161. package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -263
  162. package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
  163. package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -274
  164. package/templates/ide/antigravity/.agents/skills/dare-skill/SKILL.md +35 -35
  165. package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -265
  166. package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -188
  167. package/templates/ide/antigravity/.agents/skills/dare-update/SKILL.md +33 -33
  168. package/templates/ide/antigravity/.agents/skills/dare-validate/SKILL.md +33 -33
  169. package/templates/ide/antigravity/.agents/skills/dare-welcome/SKILL.md +30 -30
  170. package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -343
  171. package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -377
  172. package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -382
  173. package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -326
  174. package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -393
  175. package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
  176. package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
  177. package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -141
  178. package/templates/ide/antigravity/templates/TASKS-template.md +26 -26
  179. package/templates/ide/antigravity/templates/TELEMETRY-template.md +125 -125
  180. package/templates/ide/claude/.claude/commands/dare-ax.md +131 -131
  181. package/templates/ide/claude/.claude/commands/dare-bench.md +18 -18
  182. package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -134
  183. package/templates/ide/claude/.claude/commands/dare-bootstrap.md +27 -27
  184. package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -119
  185. package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -151
  186. package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
  187. package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -117
  188. package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
  189. package/templates/ide/claude/.claude/commands/dare-dag.md +27 -27
  190. package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
  191. package/templates/ide/claude/.claude/commands/dare-discover.md +28 -28
  192. package/templates/ide/claude/.claude/commands/dare-dna.md +75 -75
  193. package/templates/ide/claude/.claude/commands/dare-docker.md +207 -207
  194. package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
  195. package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -147
  196. package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -149
  197. package/templates/ide/claude/.claude/commands/dare-graph.md +30 -30
  198. package/templates/ide/claude/.claude/commands/dare-info.md +26 -26
  199. package/templates/ide/claude/.claude/commands/dare-init.md +30 -30
  200. package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -211
  201. package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -124
  202. package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -148
  203. package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -72
  204. package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -166
  205. package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -159
  206. package/templates/ide/claude/.claude/commands/dare-refine.md +145 -145
  207. package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -139
  208. package/templates/ide/claude/.claude/commands/dare-review.md +113 -113
  209. package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
  210. package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
  211. package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
  212. package/templates/ide/claude/.claude/commands/dare-skill.md +30 -30
  213. package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
  214. package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -132
  215. package/templates/ide/claude/.claude/commands/dare-update.md +28 -28
  216. package/templates/ide/claude/.claude/commands/dare-validate.md +28 -28
  217. package/templates/ide/claude/.claude/commands/dare-welcome.md +25 -25
  218. package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -205
  219. package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -232
  220. package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -228
  221. package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -210
  222. package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -236
  223. package/templates/ide/claude/.claude/settings.example.json +35 -35
  224. package/templates/ide/claude/CLAUDE.md +146 -146
  225. package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
  226. package/templates/ide/claude/templates/DESIGN-template.md +129 -129
  227. package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -141
  228. package/templates/ide/claude/templates/TASKS-template.md +26 -26
  229. package/templates/ide/claude/templates/TELEMETRY-template.md +125 -125
  230. package/templates/ide/cursor/.cursor/commands/dare-bench.md +18 -18
  231. package/templates/ide/cursor/.cursor/commands/dare-blueprint.md +86 -86
  232. package/templates/ide/cursor/.cursor/commands/dare-bootstrap.md +27 -27
  233. package/templates/ide/cursor/.cursor/commands/dare-bugfix-design.md +64 -64
  234. package/templates/ide/cursor/.cursor/commands/dare-dag-run.md +110 -110
  235. package/templates/ide/cursor/.cursor/commands/dare-dag-viz.md +139 -139
  236. package/templates/ide/cursor/.cursor/commands/dare-dag.md +27 -27
  237. package/templates/ide/cursor/.cursor/commands/dare-design.md +35 -35
  238. package/templates/ide/cursor/.cursor/commands/dare-discover.md +28 -28
  239. package/templates/ide/cursor/.cursor/commands/dare-dna.md +75 -75
  240. package/templates/ide/cursor/.cursor/commands/dare-docker-compose.md +18 -18
  241. package/templates/ide/cursor/.cursor/commands/dare-dockerfile.md +17 -17
  242. package/templates/ide/cursor/.cursor/commands/dare-execute.md +19 -19
  243. package/templates/ide/cursor/.cursor/commands/dare-feature-design.md +64 -64
  244. package/templates/ide/cursor/.cursor/commands/dare-graph.md +30 -30
  245. package/templates/ide/cursor/.cursor/commands/dare-info.md +26 -26
  246. package/templates/ide/cursor/.cursor/commands/dare-init.md +30 -30
  247. package/templates/ide/cursor/.cursor/commands/dare-migrate.md +72 -72
  248. package/templates/ide/cursor/.cursor/commands/dare-refine.md +107 -107
  249. package/templates/ide/cursor/.cursor/commands/dare-reverse.md +139 -139
  250. package/templates/ide/cursor/.cursor/commands/dare-review.md +91 -91
  251. package/templates/ide/cursor/.cursor/commands/dare-skill.md +30 -30
  252. package/templates/ide/cursor/.cursor/commands/dare-tasks.md +184 -184
  253. package/templates/ide/cursor/.cursor/commands/dare-telemetry.md +42 -42
  254. package/templates/ide/cursor/.cursor/commands/dare-update.md +28 -28
  255. package/templates/ide/cursor/.cursor/commands/dare-validate.md +28 -28
  256. package/templates/ide/cursor/.cursor/commands/dare-welcome.md +25 -25
  257. package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -263
  258. package/templates/ide/cursor/.cursor/rules/skill-bugfix-design.mdc +51 -51
  259. package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -173
  260. package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -134
  261. package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
  262. package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -63
  263. package/templates/ide/cursor/.cursor/rules/skill-docker.mdc +33 -33
  264. package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -352
  265. package/templates/ide/cursor/.cursor/rules/skill-feature-design.mdc +43 -43
  266. package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -244
  267. package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -371
  268. package/templates/ide/cursor/.cursor/rules/skill-laravel-api.mdc +44 -44
  269. package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -266
  270. package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -295
  271. package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -367
  272. package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -58
  273. package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -346
  274. package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -248
  275. package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -400
  276. package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -262
  277. package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -107
  278. package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -281
  279. package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
  280. package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
  281. package/templates/ide/cursor/.cursor/rules/skill-telemetry.mdc +156 -156
  282. package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
  283. package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
  284. package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -141
  285. package/templates/ide/cursor/templates/TASKS-template.md +26 -26
  286. package/templates/ide/cursor/templates/TELEMETRY-template.md +125 -125
  287. package/templates/shared/docker-compose.yml +41 -41
  288. package/templates/stacks/go-gin/.dare/skills.yml +11 -11
  289. package/templates/stacks/go-gin/.env.example +24 -24
  290. package/templates/stacks/go-gin/.github/workflows/dare-ci.yml +42 -42
  291. package/templates/stacks/go-gin/README.md.tpl +38 -38
  292. package/templates/stacks/go-gin/cmd/server/main.go.tpl +78 -78
  293. package/templates/stacks/go-gin/db/migrations/0001_create_users.down.sql +2 -2
  294. package/templates/stacks/go-gin/db/migrations/0001_create_users.up.sql +12 -12
  295. package/templates/stacks/go-gin/db/queries/users.sql +23 -23
  296. package/templates/stacks/go-gin/gitignore +7 -7
  297. package/templates/stacks/go-gin/go.mod.tpl +17 -17
  298. package/templates/stacks/go-gin/internal/config/config.go +41 -41
  299. package/templates/stacks/go-gin/internal/db/postgres.go.tpl +25 -25
  300. package/templates/stacks/go-gin/internal/handler/auth_handler.go.tpl +72 -72
  301. package/templates/stacks/go-gin/internal/handler/users_handler.go.tpl +72 -72
  302. package/templates/stacks/go-gin/internal/handler/ws_handler.go +37 -37
  303. package/templates/stacks/go-gin/internal/llm/dummy.go +14 -14
  304. package/templates/stacks/go-gin/internal/llm/provider.go +8 -8
  305. package/templates/stacks/go-gin/internal/middleware/jwt.go.tpl +58 -58
  306. package/templates/stacks/go-gin/internal/middleware/rate_limit.go +55 -55
  307. package/templates/stacks/go-gin/internal/model/user.go +17 -17
  308. package/templates/stacks/go-gin/internal/repository/users_repository.go.tpl +79 -79
  309. package/templates/stacks/go-gin/internal/service/auth_service.go.tpl +55 -55
  310. package/templates/stacks/go-gin/internal/service/users_service.go.tpl +53 -53
  311. package/templates/stacks/go-gin/llms.txt.tpl +54 -54
  312. package/templates/stacks/go-gin/openapi.json.tpl +46 -46
  313. package/templates/stacks/go-gin/sqlc.yaml +14 -14
  314. package/templates/stacks/go-gin/tests/smoke_test.go.tpl +22 -22
  315. package/templates/stacks/go-stdlib/.dare/skills.yml +11 -11
  316. package/templates/stacks/go-stdlib/.env.example +24 -24
  317. package/templates/stacks/go-stdlib/.github/workflows/dare-ci.yml +42 -42
  318. package/templates/stacks/go-stdlib/README.md.tpl +41 -41
  319. package/templates/stacks/go-stdlib/cmd/server/main.go.tpl +82 -82
  320. package/templates/stacks/go-stdlib/db/migrations/0001_create_users.down.sql +2 -2
  321. package/templates/stacks/go-stdlib/db/migrations/0001_create_users.up.sql +12 -12
  322. package/templates/stacks/go-stdlib/db/queries/users.sql +23 -23
  323. package/templates/stacks/go-stdlib/gitignore +6 -6
  324. package/templates/stacks/go-stdlib/go.mod.tpl +15 -15
  325. package/templates/stacks/go-stdlib/internal/config/config.go +41 -41
  326. package/templates/stacks/go-stdlib/internal/db/postgres.go.tpl +24 -24
  327. package/templates/stacks/go-stdlib/internal/handler/auth_handler.go.tpl +71 -71
  328. package/templates/stacks/go-stdlib/internal/handler/users_handler.go.tpl +84 -84
  329. package/templates/stacks/go-stdlib/internal/handler/ws_handler.go +36 -36
  330. package/templates/stacks/go-stdlib/internal/httpx/json.go +32 -32
  331. package/templates/stacks/go-stdlib/internal/llm/dummy.go +14 -14
  332. package/templates/stacks/go-stdlib/internal/llm/provider.go +8 -8
  333. package/templates/stacks/go-stdlib/internal/middleware/chain.go +21 -21
  334. package/templates/stacks/go-stdlib/internal/middleware/cors.go +27 -27
  335. package/templates/stacks/go-stdlib/internal/middleware/jwt.go.tpl +51 -51
  336. package/templates/stacks/go-stdlib/internal/middleware/rate_limit.go +81 -81
  337. package/templates/stacks/go-stdlib/internal/model/user.go +17 -17
  338. package/templates/stacks/go-stdlib/internal/repository/users_repository.go.tpl +75 -75
  339. package/templates/stacks/go-stdlib/internal/service/auth_service.go.tpl +55 -55
  340. package/templates/stacks/go-stdlib/internal/service/users_service.go.tpl +53 -53
  341. package/templates/stacks/go-stdlib/llms.txt.tpl +60 -60
  342. package/templates/stacks/go-stdlib/openapi.json.tpl +46 -46
  343. package/templates/stacks/go-stdlib/sqlc.yaml +14 -14
  344. package/templates/stacks/go-stdlib/tests/smoke_test.go.tpl +45 -45
  345. package/templates/stacks/mcp-go/.dare/skills.yml +8 -8
  346. package/templates/stacks/mcp-go/.env.example +14 -14
  347. package/templates/stacks/mcp-go/.github/workflows/dare-ci.yml +42 -42
  348. package/templates/stacks/mcp-go/README.md.tpl +50 -50
  349. package/templates/stacks/mcp-go/cmd/server/main.go.tpl +62 -62
  350. package/templates/stacks/mcp-go/gitignore +6 -6
  351. package/templates/stacks/mcp-go/go.mod.tpl +9 -9
  352. package/templates/stacks/mcp-go/internal/prompts/summarize.go +9 -9
  353. package/templates/stacks/mcp-go/internal/server/server.go.tpl +80 -80
  354. package/templates/stacks/mcp-go/internal/tools/echo.go +15 -15
  355. package/templates/stacks/mcp-go/internal/transports/http.go.tpl +21 -21
  356. package/templates/stacks/mcp-go/internal/transports/sse.go.tpl +17 -17
  357. package/templates/stacks/mcp-go/internal/transports/stdio.go.tpl +14 -14
  358. package/templates/stacks/mcp-go/llms.txt.tpl +60 -60
  359. package/templates/stacks/mcp-go/openapi.json.tpl +31 -31
  360. package/templates/stacks/mcp-go/tests/echo_test.go.tpl +37 -37
  361. package/templates/stacks/mcp-node-ts/.dare/skills.yml +8 -8
  362. package/templates/stacks/mcp-node-ts/.env.example +16 -16
  363. package/templates/stacks/mcp-node-ts/.github/workflows/dare-ci.yml +54 -54
  364. package/templates/stacks/mcp-node-ts/README.md.hbs +49 -49
  365. package/templates/stacks/mcp-node-ts/gitignore +7 -7
  366. package/templates/stacks/mcp-node-ts/llms.txt.hbs +61 -61
  367. package/templates/stacks/mcp-node-ts/openapi.json.hbs +39 -39
  368. package/templates/stacks/mcp-node-ts/package.json.hbs +35 -35
  369. package/templates/stacks/mcp-node-ts/src/cli.ts.hbs +71 -71
  370. package/templates/stacks/mcp-node-ts/src/prompts/index.ts +36 -36
  371. package/templates/stacks/mcp-node-ts/src/server.ts.hbs +45 -45
  372. package/templates/stacks/mcp-node-ts/src/tools/echo.ts +23 -23
  373. package/templates/stacks/mcp-node-ts/src/tools/index.ts +18 -18
  374. package/templates/stacks/mcp-node-ts/src/transports/http.ts +68 -68
  375. package/templates/stacks/mcp-node-ts/src/transports/sse.ts +58 -58
  376. package/templates/stacks/mcp-node-ts/src/transports/stdio.ts +5 -5
  377. package/templates/stacks/mcp-node-ts/tests/echo.test.ts +50 -50
  378. package/templates/stacks/mcp-node-ts/tsconfig.json +17 -17
  379. package/templates/stacks/mcp-python/.dare/skills.yml +8 -8
  380. package/templates/stacks/mcp-python/.env.example +14 -14
  381. package/templates/stacks/mcp-python/.github/workflows/dare-ci.yml +42 -42
  382. package/templates/stacks/mcp-python/README.md.j2 +49 -49
  383. package/templates/stacks/mcp-python/gitignore +12 -12
  384. package/templates/stacks/mcp-python/llms.txt.j2 +56 -56
  385. package/templates/stacks/mcp-python/openapi.json.j2 +33 -33
  386. package/templates/stacks/mcp-python/pyproject.toml.j2 +37 -37
  387. package/templates/stacks/mcp-python/src/cli.py.j2 +68 -68
  388. package/templates/stacks/mcp-python/src/prompts/summarize.py +10 -10
  389. package/templates/stacks/mcp-python/src/server.py.j2 +28 -28
  390. package/templates/stacks/mcp-python/src/tools/echo.py +12 -12
  391. package/templates/stacks/mcp-python/src/transports/http.py +12 -12
  392. package/templates/stacks/mcp-python/src/transports/sse.py +13 -13
  393. package/templates/stacks/mcp-python/src/transports/stdio.py +6 -6
  394. package/templates/stacks/mcp-python/tests/test_echo.py +28 -28
  395. package/templates/stacks/mcp-rust/.dare/skills.yml +8 -8
  396. package/templates/stacks/mcp-rust/.env.example +14 -14
  397. package/templates/stacks/mcp-rust/.github/workflows/dare-ci.yml +38 -38
  398. package/templates/stacks/mcp-rust/Cargo.toml.tera +35 -35
  399. package/templates/stacks/mcp-rust/README.md.tera +50 -50
  400. package/templates/stacks/mcp-rust/gitignore +5 -5
  401. package/templates/stacks/mcp-rust/llms.txt.tera +60 -60
  402. package/templates/stacks/mcp-rust/openapi.json.tera +31 -31
  403. package/templates/stacks/mcp-rust/src/cli.rs.tera +33 -33
  404. package/templates/stacks/mcp-rust/src/lib.rs +6 -6
  405. package/templates/stacks/mcp-rust/src/main.rs.tera +30 -30
  406. package/templates/stacks/mcp-rust/src/prompts/mod.rs +1 -1
  407. package/templates/stacks/mcp-rust/src/prompts/summarize.rs +5 -5
  408. package/templates/stacks/mcp-rust/src/server.rs.tera +38 -38
  409. package/templates/stacks/mcp-rust/src/tools/echo.rs +18 -18
  410. package/templates/stacks/mcp-rust/src/tools/mod.rs +22 -22
  411. package/templates/stacks/mcp-rust/src/transports/http.rs +27 -27
  412. package/templates/stacks/mcp-rust/src/transports/mod.rs +3 -3
  413. package/templates/stacks/mcp-rust/src/transports/sse.rs +33 -33
  414. package/templates/stacks/mcp-rust/src/transports/stdio.rs +14 -14
  415. package/templates/stacks/mcp-rust/tests/echo_test.rs.tera +27 -27
  416. package/templates/stacks/node-nestjs/.dare/skills.yml +11 -11
  417. package/templates/stacks/node-nestjs/.env.example +21 -21
  418. package/templates/stacks/node-nestjs/.github/workflows/dare-ci.yml +54 -54
  419. package/templates/stacks/node-nestjs/README.md.hbs +35 -35
  420. package/templates/stacks/node-nestjs/gitignore +7 -7
  421. package/templates/stacks/node-nestjs/llms.txt.hbs +47 -47
  422. package/templates/stacks/node-nestjs/nest-cli.json +16 -16
  423. package/templates/stacks/node-nestjs/openapi.json.hbs +75 -75
  424. package/templates/stacks/node-nestjs/package.json.hbs +57 -57
  425. package/templates/stacks/node-nestjs/prisma/schema.prisma +25 -25
  426. package/templates/stacks/node-nestjs/prisma/seed.ts.hbs +25 -25
  427. package/templates/stacks/node-nestjs/src/app.module.ts +39 -39
  428. package/templates/stacks/node-nestjs/src/auth/auth.controller.ts +29 -29
  429. package/templates/stacks/node-nestjs/src/auth/auth.module.ts +25 -25
  430. package/templates/stacks/node-nestjs/src/auth/auth.service.ts +36 -36
  431. package/templates/stacks/node-nestjs/src/auth/dto/login-response.dto.ts +9 -9
  432. package/templates/stacks/node-nestjs/src/auth/dto/login.dto.ts +17 -17
  433. package/templates/stacks/node-nestjs/src/auth/jwt.strategy.ts +25 -25
  434. package/templates/stacks/node-nestjs/src/common/filters/problem-details.filter.ts +38 -38
  435. package/templates/stacks/node-nestjs/src/common/interceptors/json-response.interceptor.ts +13 -13
  436. package/templates/stacks/node-nestjs/src/main.ts.hbs +44 -44
  437. package/templates/stacks/node-nestjs/src/prisma/prisma.module.ts +9 -9
  438. package/templates/stacks/node-nestjs/src/prisma/prisma.service.ts +9 -9
  439. package/templates/stacks/node-nestjs/src/users/dto/create-user.dto.ts +22 -22
  440. package/templates/stacks/node-nestjs/src/users/dto/user.dto.ts +15 -15
  441. package/templates/stacks/node-nestjs/src/users/users.controller.ts +41 -41
  442. package/templates/stacks/node-nestjs/src/users/users.module.ts +11 -11
  443. package/templates/stacks/node-nestjs/src/users/users.repository.ts +38 -38
  444. package/templates/stacks/node-nestjs/src/users/users.service.ts +38 -38
  445. package/templates/stacks/node-nestjs/tsconfig.build.json +4 -4
  446. package/templates/stacks/node-nestjs/tsconfig.json +28 -28
  447. package/templates/stacks/php-laravel/.dare/skills.yml +11 -11
  448. package/templates/stacks/php-laravel/.env.example +41 -41
  449. package/templates/stacks/php-laravel/.github/workflows/dare-ci.yml +43 -43
  450. package/templates/stacks/php-laravel/README.md.hbs +36 -36
  451. package/templates/stacks/php-laravel/app/Http/Controllers/Api/AuthController.php +36 -36
  452. package/templates/stacks/php-laravel/app/Http/Controllers/Api/UsersController.php +33 -33
  453. package/templates/stacks/php-laravel/app/Http/Requests/CreateUserRequest.php +26 -26
  454. package/templates/stacks/php-laravel/app/Http/Requests/LoginRequest.php +34 -34
  455. package/templates/stacks/php-laravel/app/Llm/Contracts/LlmProvider.php +12 -12
  456. package/templates/stacks/php-laravel/app/Llm/Providers/DummyProvider.php +13 -13
  457. package/templates/stacks/php-laravel/app/Llm/Providers/OpenAiProvider.php +33 -33
  458. package/templates/stacks/php-laravel/app/Models/User.php +44 -44
  459. package/templates/stacks/php-laravel/app/Repositories/UsersRepository.php +32 -32
  460. package/templates/stacks/php-laravel/app/Services/AuthService.php +37 -37
  461. package/templates/stacks/php-laravel/app/Services/UsersService.php +57 -57
  462. package/templates/stacks/php-laravel/artisan +12 -12
  463. package/templates/stacks/php-laravel/bootstrap/app.php +29 -29
  464. package/templates/stacks/php-laravel/bootstrap/providers.php +5 -5
  465. package/templates/stacks/php-laravel/composer.json.hbs +58 -58
  466. package/templates/stacks/php-laravel/config/l5-swagger.php +41 -41
  467. package/templates/stacks/php-laravel/config/reverb.php +34 -34
  468. package/templates/stacks/php-laravel/config/sanctum.php +15 -15
  469. package/templates/stacks/php-laravel/database/migrations/2026_06_01_000001_create_users_table.php +27 -27
  470. package/templates/stacks/php-laravel/database/seeders/DatabaseSeeder.php +21 -21
  471. package/templates/stacks/php-laravel/gitignore +23 -23
  472. package/templates/stacks/php-laravel/llms.txt.hbs +53 -53
  473. package/templates/stacks/php-laravel/openapi.json.hbs +43 -43
  474. package/templates/stacks/php-laravel/phpstan.neon +9 -9
  475. package/templates/stacks/php-laravel/routes/api.php +13 -13
  476. package/templates/stacks/php-laravel/routes/channels.php +7 -7
  477. package/templates/stacks/php-laravel/tests/Feature/AuthTest.php +35 -35
  478. package/templates/stacks/php-laravel/tests/Feature/UsersTest.php +30 -30
  479. package/templates/stacks/php-laravel/tests/Pest.php +5 -5
  480. package/templates/stacks/python-fastapi/.dare/skills.yml +11 -11
  481. package/templates/stacks/python-fastapi/.env.example +21 -21
  482. package/templates/stacks/python-fastapi/.github/workflows/dare-ci.yml +43 -43
  483. package/templates/stacks/python-fastapi/README.md.j2 +35 -35
  484. package/templates/stacks/python-fastapi/alembic/env.py +46 -46
  485. package/templates/stacks/python-fastapi/alembic/script.py.mako +26 -26
  486. package/templates/stacks/python-fastapi/alembic/versions/0001_create_users.py.j2 +37 -37
  487. package/templates/stacks/python-fastapi/alembic.ini.j2 +39 -39
  488. package/templates/stacks/python-fastapi/app/core/config.py +24 -24
  489. package/templates/stacks/python-fastapi/app/core/security.py +34 -34
  490. package/templates/stacks/python-fastapi/app/db/session.py +22 -22
  491. package/templates/stacks/python-fastapi/app/main.py.j2 +36 -36
  492. package/templates/stacks/python-fastapi/app/models/__init__.py +3 -3
  493. package/templates/stacks/python-fastapi/app/models/user.py +30 -30
  494. package/templates/stacks/python-fastapi/app/repositories/user_repository.py +34 -34
  495. package/templates/stacks/python-fastapi/app/routers/auth.py +37 -37
  496. package/templates/stacks/python-fastapi/app/routers/users.py +46 -46
  497. package/templates/stacks/python-fastapi/app/schemas/user.py +56 -56
  498. package/templates/stacks/python-fastapi/app/services/auth_service.py +22 -22
  499. package/templates/stacks/python-fastapi/app/services/user_service.py +31 -31
  500. package/templates/stacks/python-fastapi/gitignore +12 -12
  501. package/templates/stacks/python-fastapi/llms.txt.j2 +53 -53
  502. package/templates/stacks/python-fastapi/openapi.json.j2 +43 -43
  503. package/templates/stacks/python-fastapi/pyproject.toml.j2 +45 -45
  504. package/templates/stacks/python-fastapi/tests/test_auth.py +22 -22
  505. package/templates/stacks/ruby-rails-8/.dare/skills.yml +50 -50
  506. package/templates/stacks/ruby-rails-8/.env.example +20 -20
  507. package/templates/stacks/ruby-rails-8/.github/workflows/dare-ci.yml +112 -112
  508. package/templates/stacks/ruby-rails-8/Gemfile.erb +61 -61
  509. package/templates/stacks/ruby-rails-8/app/channels/application_cable/channel.rb +11 -11
  510. package/templates/stacks/ruby-rails-8/app/channels/application_cable/connection.rb +34 -34
  511. package/templates/stacks/ruby-rails-8/app/channels/dare_updates_channel.rb +18 -18
  512. package/templates/stacks/ruby-rails-8/app/channels/user_updates_channel.rb +23 -23
  513. package/templates/stacks/ruby-rails-8/app/controllers/application_controller.rb +44 -44
  514. package/templates/stacks/ruby-rails-8/app/controllers/concerns/problem_details.rb +93 -93
  515. package/templates/stacks/ruby-rails-8/app/handlers/summarize_handler.rb +33 -33
  516. package/templates/stacks/ruby-rails-8/app/handlers/users_handler.rb +68 -68
  517. package/templates/stacks/ruby-rails-8/app/llm/cache/llm_cache.rb +44 -44
  518. package/templates/stacks/ruby-rails-8/app/llm/prompts/prompt_loader.rb +54 -54
  519. package/templates/stacks/ruby-rails-8/app/llm/prompts/summarize_v1.jinja2 +12 -12
  520. package/templates/stacks/ruby-rails-8/app/llm/providers/dummy_provider.rb +35 -35
  521. package/templates/stacks/ruby-rails-8/app/llm/providers/llm_provider.rb +67 -67
  522. package/templates/stacks/ruby-rails-8/app/llm/providers/openai_provider.rb +62 -62
  523. package/templates/stacks/ruby-rails-8/app/llm/rate_limit/token_bucket.rb +82 -82
  524. package/templates/stacks/ruby-rails-8/app/llm/validators/summarize_output_schema.json +21 -21
  525. package/templates/stacks/ruby-rails-8/app/llm/validators/validator.rb +52 -52
  526. package/templates/stacks/ruby-rails-8/app/models/user.rb +36 -36
  527. package/templates/stacks/ruby-rails-8/app/presenters/user_presenter.rb +48 -48
  528. package/templates/stacks/ruby-rails-8/app/repositories/document_repository.rb +57 -57
  529. package/templates/stacks/ruby-rails-8/app/repositories/user_repository.rb +73 -73
  530. package/templates/stacks/ruby-rails-8/app/services/create_user_service.rb +67 -67
  531. package/templates/stacks/ruby-rails-8/app/services/realtime_service.rb +53 -53
  532. package/templates/stacks/ruby-rails-8/app/services/summarize_document_service.rb +57 -57
  533. package/templates/stacks/ruby-rails-8/config/dare.yml +42 -42
  534. package/templates/stacks/ruby-rails-8/config/initializers/dare.rb +31 -31
  535. package/templates/stacks/ruby-rails-8/config/initializers/rack_attack.rb +64 -64
  536. package/templates/stacks/ruby-rails-8/config/initializers/rswag_api.rb +12 -12
  537. package/templates/stacks/ruby-rails-8/lib/tasks/dare.rake +159 -159
  538. package/templates/stacks/ruby-rails-8/llms.txt.erb +69 -69
  539. package/templates/stacks/ruby-rails-8/spec/api/summarize_spec.rb +56 -56
  540. package/templates/stacks/ruby-rails-8/spec/api/users_spec.rb +72 -72
  541. package/templates/stacks/ruby-rails-8/spec/channels/dare_updates_channel_spec.rb +61 -61
  542. package/templates/stacks/ruby-rails-8/spec/channels/user_updates_channel_spec.rb +56 -56
  543. package/templates/stacks/ruby-rails-8/spec/factories/users.rb +27 -27
  544. package/templates/stacks/ruby-rails-8/spec/handlers/users_handler_spec.rb +88 -88
  545. package/templates/stacks/ruby-rails-8/spec/rails_helper.rb +31 -31
  546. package/templates/stacks/ruby-rails-8/spec/services/create_user_service_spec.rb +88 -88
  547. package/templates/stacks/ruby-rails-8/spec/services/summarize_document_service_spec.rb +142 -142
  548. package/templates/stacks/ruby-rails-8/spec/swagger_helper.rb +73 -73
  549. package/templates/stacks/rust-axum/.dare/skills.yml +11 -11
  550. package/templates/stacks/rust-axum/.env.example +26 -26
  551. package/templates/stacks/rust-axum/.github/workflows/dare-ci.yml +40 -40
  552. package/templates/stacks/rust-axum/Cargo.toml.tera +53 -53
  553. package/templates/stacks/rust-axum/README.md.tera +37 -37
  554. package/templates/stacks/rust-axum/gitignore +5 -5
  555. package/templates/stacks/rust-axum/llms.txt.tera +54 -54
  556. package/templates/stacks/rust-axum/migrations/0001_create_users.sql +13 -13
  557. package/templates/stacks/rust-axum/openapi.json.tera +46 -46
  558. package/templates/stacks/rust-axum/src/config.rs +45 -45
  559. package/templates/stacks/rust-axum/src/errors.rs +48 -48
  560. package/templates/stacks/rust-axum/src/handlers/auth.rs +48 -48
  561. package/templates/stacks/rust-axum/src/handlers/mod.rs +3 -3
  562. package/templates/stacks/rust-axum/src/handlers/users.rs +81 -81
  563. package/templates/stacks/rust-axum/src/handlers/ws.rs +24 -24
  564. package/templates/stacks/rust-axum/src/lib.rs +19 -19
  565. package/templates/stacks/rust-axum/src/llm/mod.rs +1 -1
  566. package/templates/stacks/rust-axum/src/llm/provider.rs +48 -48
  567. package/templates/stacks/rust-axum/src/main.rs.tera +64 -64
  568. package/templates/stacks/rust-axum/src/middleware/auth.rs +20 -20
  569. package/templates/stacks/rust-axum/src/middleware/mod.rs +2 -2
  570. package/templates/stacks/rust-axum/src/middleware/rate_limit.rs +27 -27
  571. package/templates/stacks/rust-axum/src/models/mod.rs +1 -1
  572. package/templates/stacks/rust-axum/src/models/user.rs +13 -13
  573. package/templates/stacks/rust-axum/src/repositories/mod.rs +1 -1
  574. package/templates/stacks/rust-axum/src/repositories/user_repository.rs +62 -62
  575. package/templates/stacks/rust-axum/src/services/auth_service.rs +50 -50
  576. package/templates/stacks/rust-axum/src/services/mod.rs +2 -2
  577. package/templates/stacks/rust-axum/src/services/user_service.rs +53 -53
  578. package/templates/stacks/rust-axum/tests/integration_test.rs.tera +13 -13
  579. package/dist/commands/new.d.ts +0 -16
  580. package/dist/commands/new.d.ts.map +0 -1
  581. package/dist/commands/new.js +0 -104
  582. package/dist/commands/new.js.map +0 -1
@@ -1,166 +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.
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.
@@ -1,159 +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.
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.