@dewtech/dare-cli 2.17.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -3
- package/dist/__tests__/confidence.test.d.ts +2 -0
- package/dist/__tests__/confidence.test.d.ts.map +1 -0
- package/dist/__tests__/confidence.test.js +73 -0
- package/dist/__tests__/confidence.test.js.map +1 -0
- package/dist/__tests__/datamodel.test.d.ts +2 -0
- package/dist/__tests__/datamodel.test.d.ts.map +1 -0
- package/dist/__tests__/datamodel.test.js +131 -0
- package/dist/__tests__/datamodel.test.js.map +1 -0
- package/dist/__tests__/dna-detector.test.d.ts +2 -0
- package/dist/__tests__/dna-detector.test.d.ts.map +1 -0
- package/dist/__tests__/dna-detector.test.js +97 -0
- package/dist/__tests__/dna-detector.test.js.map +1 -0
- package/dist/__tests__/dna-facts.test.d.ts +2 -0
- package/dist/__tests__/dna-facts.test.d.ts.map +1 -0
- package/dist/__tests__/dna-facts.test.js +44 -0
- package/dist/__tests__/dna-facts.test.js.map +1 -0
- package/dist/__tests__/graph-renderer.test.d.ts +2 -0
- package/dist/__tests__/graph-renderer.test.d.ts.map +1 -0
- package/dist/__tests__/graph-renderer.test.js +85 -0
- package/dist/__tests__/graph-renderer.test.js.map +1 -0
- package/dist/__tests__/migration.test.d.ts +2 -0
- package/dist/__tests__/migration.test.d.ts.map +1 -0
- package/dist/__tests__/migration.test.js +77 -0
- package/dist/__tests__/migration.test.js.map +1 -0
- package/dist/__tests__/module-detector.test.d.ts +2 -0
- package/dist/__tests__/module-detector.test.d.ts.map +1 -0
- package/dist/__tests__/module-detector.test.js +83 -0
- package/dist/__tests__/module-detector.test.js.map +1 -0
- package/dist/__tests__/refine.test.js +49 -49
- package/dist/__tests__/reverse-facts.test.d.ts +2 -0
- package/dist/__tests__/reverse-facts.test.d.ts.map +1 -0
- package/dist/__tests__/reverse-facts.test.js +78 -0
- package/dist/__tests__/reverse-facts.test.js.map +1 -0
- package/dist/__tests__/review.test.js +38 -38
- package/dist/__tests__/validate.test.js +65 -65
- package/dist/bin/dare.js +32 -3
- package/dist/bin/dare.js.map +1 -1
- package/dist/commands/blueprint.js +122 -122
- package/dist/commands/dag.d.ts.map +1 -1
- package/dist/commands/dag.js +43 -79
- package/dist/commands/dag.js.map +1 -1
- package/dist/commands/dna.d.ts +3 -0
- package/dist/commands/dna.d.ts.map +1 -0
- package/dist/commands/dna.js +69 -0
- package/dist/commands/dna.js.map +1 -0
- package/dist/commands/migrate.d.ts +3 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +101 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/new.d.ts +16 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +103 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/reverse.d.ts +3 -0
- package/dist/commands/reverse.d.ts.map +1 -0
- package/dist/commands/reverse.js +201 -0
- package/dist/commands/reverse.js.map +1 -0
- package/dist/commands/welcome.d.ts +14 -0
- package/dist/commands/welcome.d.ts.map +1 -0
- package/dist/commands/welcome.js +29 -0
- package/dist/commands/welcome.js.map +1 -0
- package/dist/skills/commands/add.d.ts +23 -0
- package/dist/skills/commands/add.d.ts.map +1 -0
- package/dist/skills/commands/add.js +206 -0
- package/dist/skills/commands/add.js.map +1 -0
- package/dist/skills/commands/info.d.ts +14 -0
- package/dist/skills/commands/info.d.ts.map +1 -0
- package/dist/skills/commands/info.js +99 -0
- package/dist/skills/commands/info.js.map +1 -0
- package/dist/skills/commands/list.d.ts +19 -0
- package/dist/skills/commands/list.d.ts.map +1 -0
- package/dist/skills/commands/list.js +163 -0
- package/dist/skills/commands/list.js.map +1 -0
- package/dist/skills/commands/publish.d.ts +56 -0
- package/dist/skills/commands/publish.d.ts.map +1 -0
- package/dist/skills/commands/publish.js +272 -0
- package/dist/skills/commands/publish.js.map +1 -0
- package/dist/skills/commands/remove.d.ts +19 -0
- package/dist/skills/commands/remove.d.ts.map +1 -0
- package/dist/skills/commands/remove.js +96 -0
- package/dist/skills/commands/remove.js.map +1 -0
- package/dist/skills/commands/update.d.ts +31 -0
- package/dist/skills/commands/update.d.ts.map +1 -0
- package/dist/skills/commands/update.js +132 -0
- package/dist/skills/commands/update.js.map +1 -0
- package/dist/skills/index.d.ts +22 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +33 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/manifest.d.ts +54 -0
- package/dist/skills/manifest.d.ts.map +1 -0
- package/dist/skills/manifest.js +162 -0
- package/dist/skills/manifest.js.map +1 -0
- package/dist/skills/registry-local.d.ts +67 -0
- package/dist/skills/registry-local.d.ts.map +1 -0
- package/dist/skills/registry-local.js +130 -0
- package/dist/skills/registry-local.js.map +1 -0
- package/dist/skills/registry-mock.json +109 -0
- package/dist/skills/registry-remote.d.ts +110 -0
- package/dist/skills/registry-remote.d.ts.map +1 -0
- package/dist/skills/registry-remote.js +246 -0
- package/dist/skills/registry-remote.js.map +1 -0
- package/dist/skills/registry.d.ts +49 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +94 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/skills/tests/manifest.spec.d.ts +8 -0
- package/dist/skills/tests/manifest.spec.d.ts.map +1 -0
- package/dist/skills/tests/manifest.spec.js +176 -0
- package/dist/skills/tests/manifest.spec.js.map +1 -0
- package/dist/skills/tests/publish.spec.d.ts +12 -0
- package/dist/skills/tests/publish.spec.d.ts.map +1 -0
- package/dist/skills/tests/publish.spec.js +276 -0
- package/dist/skills/tests/publish.spec.js.map +1 -0
- package/dist/skills/tests/registry-local.spec.d.ts +8 -0
- package/dist/skills/tests/registry-local.spec.d.ts.map +1 -0
- package/dist/skills/tests/registry-local.spec.js +231 -0
- package/dist/skills/tests/registry-local.spec.js.map +1 -0
- package/dist/skills/tests/registry.spec.d.ts +7 -0
- package/dist/skills/tests/registry.spec.d.ts.map +1 -0
- package/dist/skills/tests/registry.spec.js +58 -0
- package/dist/skills/tests/registry.spec.js.map +1 -0
- package/dist/skills/tests/remote-registry.spec.d.ts +9 -0
- package/dist/skills/tests/remote-registry.spec.d.ts.map +1 -0
- package/dist/skills/tests/remote-registry.spec.js +357 -0
- package/dist/skills/tests/remote-registry.spec.js.map +1 -0
- package/dist/skills/tests/update.spec.d.ts +9 -0
- package/dist/skills/tests/update.spec.d.ts.map +1 -0
- package/dist/skills/tests/update.spec.js +166 -0
- package/dist/skills/tests/update.spec.js.map +1 -0
- package/dist/utils/banner.d.ts +28 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +77 -0
- package/dist/utils/banner.js.map +1 -0
- package/dist/utils/banner.spec.d.ts +5 -0
- package/dist/utils/banner.spec.d.ts.map +1 -0
- package/dist/utils/banner.spec.js +253 -0
- package/dist/utils/banner.spec.js.map +1 -0
- package/dist/utils/confidence.d.ts +41 -0
- package/dist/utils/confidence.d.ts.map +1 -0
- package/dist/utils/confidence.js +101 -0
- package/dist/utils/confidence.js.map +1 -0
- package/dist/utils/datamodel.d.ts +41 -0
- package/dist/utils/datamodel.d.ts.map +1 -0
- package/dist/utils/datamodel.js +535 -0
- package/dist/utils/datamodel.js.map +1 -0
- package/dist/utils/dna-detector.d.ts +61 -0
- package/dist/utils/dna-detector.d.ts.map +1 -0
- package/dist/utils/dna-detector.js +354 -0
- package/dist/utils/dna-detector.js.map +1 -0
- package/dist/utils/dna-facts.d.ts +13 -0
- package/dist/utils/dna-facts.d.ts.map +1 -0
- package/dist/utils/dna-facts.js +109 -0
- package/dist/utils/dna-facts.js.map +1 -0
- package/dist/utils/excalidraw-renderer.d.ts +11 -71
- package/dist/utils/excalidraw-renderer.d.ts.map +1 -1
- package/dist/utils/excalidraw-renderer.js +29 -162
- package/dist/utils/excalidraw-renderer.js.map +1 -1
- package/dist/utils/graph-renderer.d.ts +115 -0
- package/dist/utils/graph-renderer.d.ts.map +1 -0
- package/dist/utils/graph-renderer.js +216 -0
- package/dist/utils/graph-renderer.js.map +1 -0
- package/dist/utils/migration.d.ts +64 -0
- package/dist/utils/migration.d.ts.map +1 -0
- package/dist/utils/migration.js +183 -0
- package/dist/utils/migration.js.map +1 -0
- package/dist/utils/module-detector.d.ts +46 -0
- package/dist/utils/module-detector.d.ts.map +1 -0
- package/dist/utils/module-detector.js +348 -0
- package/dist/utils/module-detector.js.map +1 -0
- package/dist/utils/project-generator.js +252 -252
- package/dist/utils/reverse-facts.d.ts +50 -0
- package/dist/utils/reverse-facts.d.ts.map +1 -0
- package/dist/utils/reverse-facts.js +291 -0
- package/dist/utils/reverse-facts.js.map +1 -0
- package/dist/utils/stack-bootstrap.js +371 -371
- package/package.json +8 -3
- package/templates/DARE-dag-example.yaml +280 -280
- package/templates/UPDATE-MANIFEST.json +48 -48
- package/templates/backend/node-nestjs/.env.example +9 -9
- package/templates/backend/node-nestjs/nest-cli.json +8 -8
- package/templates/backend/node-nestjs/package.json +50 -50
- package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
- package/templates/backend/node-nestjs/src/app.module.ts +15 -15
- package/templates/backend/node-nestjs/src/app.service.ts +8 -8
- package/templates/backend/node-nestjs/src/main.ts +24 -24
- package/templates/backend/node-nestjs/tsconfig.json +21 -21
- package/templates/backend/php-laravel/.env.example +22 -22
- package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
- package/templates/backend/php-laravel/composer.json +40 -40
- package/templates/backend/python-fastapi/.env.example +4 -4
- package/templates/backend/python-fastapi/app/api/router.py +8 -8
- package/templates/backend/python-fastapi/app/core/config.py +20 -20
- package/templates/backend/python-fastapi/main.py +35 -35
- package/templates/backend/python-fastapi/requirements.txt +13 -13
- package/templates/backend/rust-axum/.env.example +3 -3
- package/templates/backend/rust-axum/Cargo.toml +23 -23
- package/templates/backend/rust-axum/src/errors.rs +30 -30
- package/templates/backend/rust-axum/src/main.rs +32 -32
- package/templates/backend/rust-axum/src/routes.rs +6 -6
- package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
- package/templates/frontend/leptos-csr/Cargo.toml +16 -16
- package/templates/frontend/leptos-csr/Trunk.toml +10 -10
- package/templates/frontend/leptos-csr/index.html +11 -11
- package/templates/frontend/leptos-csr/src/lib.rs +20 -20
- package/templates/frontend/leptos-csr/style/main.scss +19 -19
- package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
- package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
- package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
- package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
- package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
- package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
- package/templates/frontend/react/index.html +12 -12
- package/templates/frontend/react/package.json +35 -35
- package/templates/frontend/react/src/App.tsx +25 -25
- package/templates/frontend/react/src/main.tsx +9 -9
- package/templates/frontend/vue/package.json +32 -32
- package/templates/frontend/vue/src/App.vue +7 -7
- package/templates/frontend/vue/src/main.ts +10 -10
- package/templates/frontend/vue/src/router/index.ts +14 -14
- package/templates/frontend/vue/src/views/HomeView.vue +6 -6
- package/templates/hooks/pre-commit-dare-validate +24 -24
- package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -0
- package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -0
- package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -0
- package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
- package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -0
- package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -0
- package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -0
- package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -0
- package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -0
- package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -0
- package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -0
- package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -0
- package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -0
- package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -114
- package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -0
- package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -111
- package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -0
- package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
- package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -0
- package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -265
- package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -0
- package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -0
- package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -0
- package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -0
- package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -0
- package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -0
- package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
- package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -141
- package/templates/ide/claude/.claude/commands/dare-ax.md +131 -0
- package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -134
- package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -0
- package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -151
- package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
- package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -0
- package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
- package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
- package/templates/ide/claude/.claude/commands/dare-dna.md +75 -0
- package/templates/ide/claude/.claude/commands/dare-docker.md +207 -0
- package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
- package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -0
- package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -0
- package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -0
- package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -0
- package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -0
- package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -0
- package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -0
- package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -0
- package/templates/ide/claude/.claude/commands/dare-refine.md +145 -145
- package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -0
- package/templates/ide/claude/.claude/commands/dare-review.md +113 -113
- package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
- package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
- package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
- package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
- package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -0
- package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -0
- package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -0
- package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -0
- package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -0
- package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -0
- package/templates/ide/claude/.claude/settings.example.json +35 -35
- package/templates/ide/claude/CLAUDE.md +146 -146
- package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/claude/templates/DESIGN-template.md +129 -129
- package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -141
- package/templates/ide/cursor/.cursor/commands/dag-viz.md +139 -0
- package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +86 -86
- package/templates/ide/cursor/.cursor/commands/generate-design.md +35 -35
- package/templates/ide/cursor/.cursor/commands/generate-tasks.md +184 -184
- package/templates/ide/cursor/.cursor/commands/refine-task.md +107 -107
- package/templates/ide/cursor/.cursor/commands/review-task.md +91 -91
- package/templates/ide/cursor/.cursor/commands/run-dag.md +110 -110
- package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -0
- package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -0
- package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -0
- package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
- package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -0
- package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -0
- package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -0
- package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -0
- package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -0
- package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -0
- package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -0
- package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -0
- package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -0
- package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -0
- package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -0
- package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -0
- package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -0
- package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -0
- package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
- package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
- package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
- package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
- package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -141
- package/templates/shared/docker-compose.yml +41 -41
- package/dist/__tests__/dag-runner/adapters.test.d.ts +0 -2
- package/dist/__tests__/dag-runner/adapters.test.d.ts.map +0 -1
- package/dist/__tests__/dag-runner/adapters.test.js +0 -134
- package/dist/__tests__/dag-runner/adapters.test.js.map +0 -1
- package/dist/dag-runner/adapters/antigravity.d.ts +0 -6
- package/dist/dag-runner/adapters/antigravity.d.ts.map +0 -1
- package/dist/dag-runner/adapters/antigravity.js +0 -54
- package/dist/dag-runner/adapters/antigravity.js.map +0 -1
- package/dist/dag-runner/adapters/claude.d.ts +0 -6
- package/dist/dag-runner/adapters/claude.d.ts.map +0 -1
- package/dist/dag-runner/adapters/claude.js +0 -48
- package/dist/dag-runner/adapters/claude.js.map +0 -1
- package/dist/dag-runner/adapters/cursor.d.ts +0 -6
- package/dist/dag-runner/adapters/cursor.d.ts.map +0 -1
- package/dist/dag-runner/adapters/cursor.js +0 -58
- package/dist/dag-runner/adapters/cursor.js.map +0 -1
- package/dist/dag-runner/adapters/index.d.ts +0 -46
- package/dist/dag-runner/adapters/index.d.ts.map +0 -1
- package/dist/dag-runner/adapters/index.js +0 -55
- package/dist/dag-runner/adapters/index.js.map +0 -1
- package/dist/dag-runner/utils/timeout.d.ts +0 -27
- package/dist/dag-runner/utils/timeout.d.ts.map +0 -1
- package/dist/dag-runner/utils/timeout.js +0 -55
- package/dist/dag-runner/utils/timeout.js.map +0 -1
|
@@ -1,209 +1,209 @@
|
|
|
1
|
-
# /dare-rust-workspace
|
|
2
|
-
|
|
3
|
-
Decisão e migração de Cargo workspace multi-crate para projetos Rust/Axum.
|
|
4
|
-
Cobre dois cenários:
|
|
5
|
-
|
|
6
|
-
- **Cenário A — Design/Blueprint:** decidir desde o início se o projeto
|
|
7
|
-
nasce single-crate ou workspace.
|
|
8
|
-
- **Cenário B — Migração:** propor plano de PRs incrementais para
|
|
9
|
-
transformar um projeto single-crate maduro em workspace.
|
|
10
|
-
|
|
11
|
-
## Como usar
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
/dare-rust-workspace # análise contextual (lê BLUEPRINT/src/)
|
|
15
|
-
/dare-rust-workspace --design # foco em decisão para projeto novo
|
|
16
|
-
/dare-rust-workspace --migrate # foco em plano de migração
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## O que fazer
|
|
20
|
-
|
|
21
|
-
### 1) Detectar o cenário
|
|
22
|
-
|
|
23
|
-
- Se existe `DARE/BLUEPRINT.md` mas o `src/` ainda não existe ou tem < 5
|
|
24
|
-
arquivos → Cenário A (decisão)
|
|
25
|
-
- Se `src/` tem > 30 arquivos `.rs` ou múltiplas subpastas top-level →
|
|
26
|
-
Cenário B (migração)
|
|
27
|
-
- Caso intermediário (15–30 arquivos) → mostrar os critérios e perguntar
|
|
28
|
-
ao usuário
|
|
29
|
-
|
|
30
|
-
### 2) Cenário A — Decisão na fase Design/Blueprint
|
|
31
|
-
|
|
32
|
-
Aplique os critérios:
|
|
33
|
-
|
|
34
|
-
**Comece single-crate quando TODOS forem verdadeiros:**
|
|
35
|
-
- Apenas 1 binário (HTTP server)
|
|
36
|
-
- < 30 arquivos `.rs` esperados
|
|
37
|
-
- 1–2 sistemas externos (DB; ou DB + cache)
|
|
38
|
-
- Equipe ≤ 2 devs
|
|
39
|
-
- Sem deploy independente para subcomponentes
|
|
40
|
-
|
|
41
|
-
**Comece workspace quando QUALQUER for verdadeiro:**
|
|
42
|
-
- ≥ 2 binários previstos (API + worker; API + admin)
|
|
43
|
-
- ≥ 3 sistemas externos (PG + Redis + Rabbit + Qdrant + Neo4j…)
|
|
44
|
-
- Deploy independente desejado (workers em pods separados)
|
|
45
|
-
- Fronteiras arquiteturais críticas (domain puro; SDK publicável)
|
|
46
|
-
- Equipe ≥ 3 devs em paralelo
|
|
47
|
-
|
|
48
|
-
**Layout recomendado para workspace** (use `<p>` como prefixo do projeto):
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
projeto/
|
|
52
|
-
├── Cargo.toml # workspace root
|
|
53
|
-
├── crates/
|
|
54
|
-
│ ├── <p>-domain/ (lib) # entities puras
|
|
55
|
-
│ ├── <p>-config/ (lib)
|
|
56
|
-
│ ├── <p>-db/ (lib)
|
|
57
|
-
│ ├── <p>-cache/ (lib)
|
|
58
|
-
│ ├── <p>-queue/ (lib)
|
|
59
|
-
│ ├── <p>-services/ (lib) # business logic
|
|
60
|
-
│ ├── <p>-integrators/ (lib) # clientes externos
|
|
61
|
-
│ ├── <p>-api/ (bin+lib) # HTTP server
|
|
62
|
-
│ ├── <p>-worker-<X>/ (bin) # 1 binário por worker
|
|
63
|
-
│ └── <p>-e2e/ (tests)
|
|
64
|
-
└── xtask/ # scripts em Rust
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**`Cargo.toml` raiz:**
|
|
68
|
-
```toml
|
|
69
|
-
[workspace]
|
|
70
|
-
resolver = "2"
|
|
71
|
-
members = ["crates/<p>-domain", "crates/<p>-services", "crates/<p>-api", ...]
|
|
72
|
-
|
|
73
|
-
[workspace.package]
|
|
74
|
-
version = "0.1.0"
|
|
75
|
-
edition = "2021"
|
|
76
|
-
rust-version = "1.80"
|
|
77
|
-
|
|
78
|
-
[workspace.dependencies]
|
|
79
|
-
tokio = { version = "1.40", features = ["full"] }
|
|
80
|
-
axum = { version = "0.7", features = ["macros"] }
|
|
81
|
-
sqlx = { version = "0.8", features = ["runtime-tokio", "postgres", "uuid", "chrono", "migrate"] }
|
|
82
|
-
serde = { version = "1.0", features = ["derive"] }
|
|
83
|
-
thiserror = "1.0"
|
|
84
|
-
anyhow = "1.0"
|
|
85
|
-
tracing = "0.1"
|
|
86
|
-
uuid = { version = "1.10", features = ["v4", "serde"] }
|
|
87
|
-
chrono = { version = "0.4", features = ["serde"] }
|
|
88
|
-
|
|
89
|
-
[profile.release]
|
|
90
|
-
opt-level = 3
|
|
91
|
-
lto = "thin"
|
|
92
|
-
codegen-units = 1
|
|
93
|
-
strip = true
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Cada crate filho usa `<dep> = { workspace = true }` para herdar versão.
|
|
97
|
-
|
|
98
|
-
**Diagrama no BLUEPRINT.md (Mermaid):**
|
|
99
|
-
```mermaid
|
|
100
|
-
graph TD
|
|
101
|
-
api[<p>-api]
|
|
102
|
-
worker[<p>-worker-flow]
|
|
103
|
-
services[<p>-services]
|
|
104
|
-
domain[<p>-domain]
|
|
105
|
-
db[<p>-db]
|
|
106
|
-
api --> services
|
|
107
|
-
worker --> services
|
|
108
|
-
services --> db
|
|
109
|
-
services --> domain
|
|
110
|
-
db --> domain
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
Regra de seta: domain no fundo (ninguém depende para baixo), services no
|
|
114
|
-
meio (depende de domain/db, nunca de api), binários no topo.
|
|
115
|
-
|
|
116
|
-
### 3) Cenário B — Plano de migração em 4 PRs
|
|
117
|
-
|
|
118
|
-
Migração **nunca é big-bang**. Cada PR passa build/test/clippy no fim e é
|
|
119
|
-
deployável.
|
|
120
|
-
|
|
121
|
-
**PR 1 — Workers** (mais isolados, menor risco):
|
|
122
|
-
```
|
|
123
|
-
src/workers/ → crates/<p>-worker-<X>/
|
|
124
|
-
├── Cargo.toml
|
|
125
|
-
└── src/main.rs
|
|
126
|
-
```
|
|
127
|
-
- Cada `tokio::spawn(worker_x)` do `main.rs` da API vira binário próprio.
|
|
128
|
-
- API para de spawn workers; workers sobem como processo independente.
|
|
129
|
-
- `docker-compose.yml` ganha service novo por worker.
|
|
130
|
-
- Em k8s: Deployment próprio com scaling independente.
|
|
131
|
-
|
|
132
|
-
**PR 2 — Integrators** (clientes externos):
|
|
133
|
-
```
|
|
134
|
-
src/integrators/{llm, neo4j, qdrant}.rs → crates/<p>-integrators/src/lib.rs
|
|
135
|
-
```
|
|
136
|
-
- Tudo que fala com mundo externo (LLM, Stripe, Meta, DB externo) vira lib.
|
|
137
|
-
- API e workers importam via `path = "../<p>-integrators"`.
|
|
138
|
-
- Crate é folha do grafo — NÃO depende de domain/services.
|
|
139
|
-
|
|
140
|
-
**PR 3 — Domain** (entidades puras):
|
|
141
|
-
```
|
|
142
|
-
src/models/ \
|
|
143
|
-
src/dto/ → crates/<p>-domain/src/lib.rs
|
|
144
|
-
src/error.rs /
|
|
145
|
-
```
|
|
146
|
-
- `<p>-domain` tem deps **mínimas**: `serde`, `uuid`, `chrono`, `thiserror`.
|
|
147
|
-
- Nada de axum, sqlx, redis. Build do domain falha se alguém tentar.
|
|
148
|
-
- Outros crates passam a usar `<p>-domain` em vez de `crate::models::`.
|
|
149
|
-
|
|
150
|
-
**PR 4 — API e workspace root:**
|
|
151
|
-
```
|
|
152
|
-
Cargo.toml raiz → [workspace] puro
|
|
153
|
-
src/ (resto) → crates/<p>-api/src/
|
|
154
|
-
```
|
|
155
|
-
- `Cargo.toml` raiz só com `[workspace]` + `[workspace.package]` +
|
|
156
|
-
`[workspace.dependencies]` + `[profile.*]`.
|
|
157
|
-
- API vai pra `crates/<p>-api/`.
|
|
158
|
-
- Todas as deps centralizadas no root.
|
|
159
|
-
|
|
160
|
-
### 4) Validação após cada PR
|
|
161
|
-
|
|
162
|
-
```bash
|
|
163
|
-
cargo build --workspace --all-targets
|
|
164
|
-
cargo test --workspace
|
|
165
|
-
cargo clippy --workspace --all-targets -- -D warnings
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
Mais smoke E2E do projeto. Se algum falhar, PR está incompleto.
|
|
169
|
-
|
|
170
|
-
### 5) Tradução de imports
|
|
171
|
-
|
|
172
|
-
| Antes (single-crate) | Depois (workspace) |
|
|
173
|
-
|----------------------|--------------------|
|
|
174
|
-
| `use crate::models::User;` | `use <p>_domain::User;` |
|
|
175
|
-
| `use crate::services::auth::login;` | `use <p>_services::auth::login;` |
|
|
176
|
-
| `use crate::integrators::llm::Gemini;` | `use <p>_integrators::llm::Gemini;` |
|
|
177
|
-
| `use crate::handlers::health::router;` | *fica igual — mesmo crate* |
|
|
178
|
-
|
|
179
|
-
Hifens (Cargo) viram underlines (Rust idents).
|
|
180
|
-
|
|
181
|
-
### 6) Antipatterns para alertar o usuário
|
|
182
|
-
|
|
183
|
-
| Antipattern | Por quê |
|
|
184
|
-
|-------------|---------|
|
|
185
|
-
| Big-bang (1 PR mexe em tudo) | Impossível revisar/reverter |
|
|
186
|
-
| Crate `common`/`shared`/`utils` | Vira lixeira; viola SRP |
|
|
187
|
-
| Crate por arquivo | 50 crates de 100 linhas → parar build |
|
|
188
|
-
| Refactor + migração no mesmo PR | Bug fica escondido |
|
|
189
|
-
| Mover testes em PR separado | Crate sem test = bug em standby |
|
|
190
|
-
| Esquecer atualizar `xtask`/CI | Pipeline quebra |
|
|
191
|
-
|
|
192
|
-
### 7) Quando NÃO migrar
|
|
193
|
-
|
|
194
|
-
- Projeto < 30 arquivos, 1 binário, 1 dev
|
|
195
|
-
- Sprint crítico em curso (migração é refactor estrutural)
|
|
196
|
-
- Sem sinais reais de dor (build < 5s, sem conflitos)
|
|
197
|
-
|
|
198
|
-
## Saída esperada
|
|
199
|
-
|
|
200
|
-
Para Cenário A: atualizar `DARE/BLUEPRINT.md` com a estrutura de crates
|
|
201
|
-
(diagrama + tabela de responsabilidades + `Cargo.toml` workspace).
|
|
202
|
-
|
|
203
|
-
Para Cenário B: gerar arquivo `DARE/MIGRATION-PLAN.md` com:
|
|
204
|
-
- Sintomas detectados (linhas de código, arquivos, etc.)
|
|
205
|
-
- 4 PRs em ordem com diff de pastas
|
|
206
|
-
- Critério de aceite por PR
|
|
207
|
-
- Estimativa de esforço
|
|
208
|
-
|
|
209
|
-
$ARGUMENTS
|
|
1
|
+
# /dare-rust-workspace
|
|
2
|
+
|
|
3
|
+
Decisão e migração de Cargo workspace multi-crate para projetos Rust/Axum.
|
|
4
|
+
Cobre dois cenários:
|
|
5
|
+
|
|
6
|
+
- **Cenário A — Design/Blueprint:** decidir desde o início se o projeto
|
|
7
|
+
nasce single-crate ou workspace.
|
|
8
|
+
- **Cenário B — Migração:** propor plano de PRs incrementais para
|
|
9
|
+
transformar um projeto single-crate maduro em workspace.
|
|
10
|
+
|
|
11
|
+
## Como usar
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
/dare-rust-workspace # análise contextual (lê BLUEPRINT/src/)
|
|
15
|
+
/dare-rust-workspace --design # foco em decisão para projeto novo
|
|
16
|
+
/dare-rust-workspace --migrate # foco em plano de migração
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## O que fazer
|
|
20
|
+
|
|
21
|
+
### 1) Detectar o cenário
|
|
22
|
+
|
|
23
|
+
- Se existe `DARE/BLUEPRINT.md` mas o `src/` ainda não existe ou tem < 5
|
|
24
|
+
arquivos → Cenário A (decisão)
|
|
25
|
+
- Se `src/` tem > 30 arquivos `.rs` ou múltiplas subpastas top-level →
|
|
26
|
+
Cenário B (migração)
|
|
27
|
+
- Caso intermediário (15–30 arquivos) → mostrar os critérios e perguntar
|
|
28
|
+
ao usuário
|
|
29
|
+
|
|
30
|
+
### 2) Cenário A — Decisão na fase Design/Blueprint
|
|
31
|
+
|
|
32
|
+
Aplique os critérios:
|
|
33
|
+
|
|
34
|
+
**Comece single-crate quando TODOS forem verdadeiros:**
|
|
35
|
+
- Apenas 1 binário (HTTP server)
|
|
36
|
+
- < 30 arquivos `.rs` esperados
|
|
37
|
+
- 1–2 sistemas externos (DB; ou DB + cache)
|
|
38
|
+
- Equipe ≤ 2 devs
|
|
39
|
+
- Sem deploy independente para subcomponentes
|
|
40
|
+
|
|
41
|
+
**Comece workspace quando QUALQUER for verdadeiro:**
|
|
42
|
+
- ≥ 2 binários previstos (API + worker; API + admin)
|
|
43
|
+
- ≥ 3 sistemas externos (PG + Redis + Rabbit + Qdrant + Neo4j…)
|
|
44
|
+
- Deploy independente desejado (workers em pods separados)
|
|
45
|
+
- Fronteiras arquiteturais críticas (domain puro; SDK publicável)
|
|
46
|
+
- Equipe ≥ 3 devs em paralelo
|
|
47
|
+
|
|
48
|
+
**Layout recomendado para workspace** (use `<p>` como prefixo do projeto):
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
projeto/
|
|
52
|
+
├── Cargo.toml # workspace root
|
|
53
|
+
├── crates/
|
|
54
|
+
│ ├── <p>-domain/ (lib) # entities puras
|
|
55
|
+
│ ├── <p>-config/ (lib)
|
|
56
|
+
│ ├── <p>-db/ (lib)
|
|
57
|
+
│ ├── <p>-cache/ (lib)
|
|
58
|
+
│ ├── <p>-queue/ (lib)
|
|
59
|
+
│ ├── <p>-services/ (lib) # business logic
|
|
60
|
+
│ ├── <p>-integrators/ (lib) # clientes externos
|
|
61
|
+
│ ├── <p>-api/ (bin+lib) # HTTP server
|
|
62
|
+
│ ├── <p>-worker-<X>/ (bin) # 1 binário por worker
|
|
63
|
+
│ └── <p>-e2e/ (tests)
|
|
64
|
+
└── xtask/ # scripts em Rust
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**`Cargo.toml` raiz:**
|
|
68
|
+
```toml
|
|
69
|
+
[workspace]
|
|
70
|
+
resolver = "2"
|
|
71
|
+
members = ["crates/<p>-domain", "crates/<p>-services", "crates/<p>-api", ...]
|
|
72
|
+
|
|
73
|
+
[workspace.package]
|
|
74
|
+
version = "0.1.0"
|
|
75
|
+
edition = "2021"
|
|
76
|
+
rust-version = "1.80"
|
|
77
|
+
|
|
78
|
+
[workspace.dependencies]
|
|
79
|
+
tokio = { version = "1.40", features = ["full"] }
|
|
80
|
+
axum = { version = "0.7", features = ["macros"] }
|
|
81
|
+
sqlx = { version = "0.8", features = ["runtime-tokio", "postgres", "uuid", "chrono", "migrate"] }
|
|
82
|
+
serde = { version = "1.0", features = ["derive"] }
|
|
83
|
+
thiserror = "1.0"
|
|
84
|
+
anyhow = "1.0"
|
|
85
|
+
tracing = "0.1"
|
|
86
|
+
uuid = { version = "1.10", features = ["v4", "serde"] }
|
|
87
|
+
chrono = { version = "0.4", features = ["serde"] }
|
|
88
|
+
|
|
89
|
+
[profile.release]
|
|
90
|
+
opt-level = 3
|
|
91
|
+
lto = "thin"
|
|
92
|
+
codegen-units = 1
|
|
93
|
+
strip = true
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Cada crate filho usa `<dep> = { workspace = true }` para herdar versão.
|
|
97
|
+
|
|
98
|
+
**Diagrama no BLUEPRINT.md (Mermaid):**
|
|
99
|
+
```mermaid
|
|
100
|
+
graph TD
|
|
101
|
+
api[<p>-api]
|
|
102
|
+
worker[<p>-worker-flow]
|
|
103
|
+
services[<p>-services]
|
|
104
|
+
domain[<p>-domain]
|
|
105
|
+
db[<p>-db]
|
|
106
|
+
api --> services
|
|
107
|
+
worker --> services
|
|
108
|
+
services --> db
|
|
109
|
+
services --> domain
|
|
110
|
+
db --> domain
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Regra de seta: domain no fundo (ninguém depende para baixo), services no
|
|
114
|
+
meio (depende de domain/db, nunca de api), binários no topo.
|
|
115
|
+
|
|
116
|
+
### 3) Cenário B — Plano de migração em 4 PRs
|
|
117
|
+
|
|
118
|
+
Migração **nunca é big-bang**. Cada PR passa build/test/clippy no fim e é
|
|
119
|
+
deployável.
|
|
120
|
+
|
|
121
|
+
**PR 1 — Workers** (mais isolados, menor risco):
|
|
122
|
+
```
|
|
123
|
+
src/workers/ → crates/<p>-worker-<X>/
|
|
124
|
+
├── Cargo.toml
|
|
125
|
+
└── src/main.rs
|
|
126
|
+
```
|
|
127
|
+
- Cada `tokio::spawn(worker_x)` do `main.rs` da API vira binário próprio.
|
|
128
|
+
- API para de spawn workers; workers sobem como processo independente.
|
|
129
|
+
- `docker-compose.yml` ganha service novo por worker.
|
|
130
|
+
- Em k8s: Deployment próprio com scaling independente.
|
|
131
|
+
|
|
132
|
+
**PR 2 — Integrators** (clientes externos):
|
|
133
|
+
```
|
|
134
|
+
src/integrators/{llm, neo4j, qdrant}.rs → crates/<p>-integrators/src/lib.rs
|
|
135
|
+
```
|
|
136
|
+
- Tudo que fala com mundo externo (LLM, Stripe, Meta, DB externo) vira lib.
|
|
137
|
+
- API e workers importam via `path = "../<p>-integrators"`.
|
|
138
|
+
- Crate é folha do grafo — NÃO depende de domain/services.
|
|
139
|
+
|
|
140
|
+
**PR 3 — Domain** (entidades puras):
|
|
141
|
+
```
|
|
142
|
+
src/models/ \
|
|
143
|
+
src/dto/ → crates/<p>-domain/src/lib.rs
|
|
144
|
+
src/error.rs /
|
|
145
|
+
```
|
|
146
|
+
- `<p>-domain` tem deps **mínimas**: `serde`, `uuid`, `chrono`, `thiserror`.
|
|
147
|
+
- Nada de axum, sqlx, redis. Build do domain falha se alguém tentar.
|
|
148
|
+
- Outros crates passam a usar `<p>-domain` em vez de `crate::models::`.
|
|
149
|
+
|
|
150
|
+
**PR 4 — API e workspace root:**
|
|
151
|
+
```
|
|
152
|
+
Cargo.toml raiz → [workspace] puro
|
|
153
|
+
src/ (resto) → crates/<p>-api/src/
|
|
154
|
+
```
|
|
155
|
+
- `Cargo.toml` raiz só com `[workspace]` + `[workspace.package]` +
|
|
156
|
+
`[workspace.dependencies]` + `[profile.*]`.
|
|
157
|
+
- API vai pra `crates/<p>-api/`.
|
|
158
|
+
- Todas as deps centralizadas no root.
|
|
159
|
+
|
|
160
|
+
### 4) Validação após cada PR
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
cargo build --workspace --all-targets
|
|
164
|
+
cargo test --workspace
|
|
165
|
+
cargo clippy --workspace --all-targets -- -D warnings
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Mais smoke E2E do projeto. Se algum falhar, PR está incompleto.
|
|
169
|
+
|
|
170
|
+
### 5) Tradução de imports
|
|
171
|
+
|
|
172
|
+
| Antes (single-crate) | Depois (workspace) |
|
|
173
|
+
|----------------------|--------------------|
|
|
174
|
+
| `use crate::models::User;` | `use <p>_domain::User;` |
|
|
175
|
+
| `use crate::services::auth::login;` | `use <p>_services::auth::login;` |
|
|
176
|
+
| `use crate::integrators::llm::Gemini;` | `use <p>_integrators::llm::Gemini;` |
|
|
177
|
+
| `use crate::handlers::health::router;` | *fica igual — mesmo crate* |
|
|
178
|
+
|
|
179
|
+
Hifens (Cargo) viram underlines (Rust idents).
|
|
180
|
+
|
|
181
|
+
### 6) Antipatterns para alertar o usuário
|
|
182
|
+
|
|
183
|
+
| Antipattern | Por quê |
|
|
184
|
+
|-------------|---------|
|
|
185
|
+
| Big-bang (1 PR mexe em tudo) | Impossível revisar/reverter |
|
|
186
|
+
| Crate `common`/`shared`/`utils` | Vira lixeira; viola SRP |
|
|
187
|
+
| Crate por arquivo | 50 crates de 100 linhas → parar build |
|
|
188
|
+
| Refactor + migração no mesmo PR | Bug fica escondido |
|
|
189
|
+
| Mover testes em PR separado | Crate sem test = bug em standby |
|
|
190
|
+
| Esquecer atualizar `xtask`/CI | Pipeline quebra |
|
|
191
|
+
|
|
192
|
+
### 7) Quando NÃO migrar
|
|
193
|
+
|
|
194
|
+
- Projeto < 30 arquivos, 1 binário, 1 dev
|
|
195
|
+
- Sprint crítico em curso (migração é refactor estrutural)
|
|
196
|
+
- Sem sinais reais de dor (build < 5s, sem conflitos)
|
|
197
|
+
|
|
198
|
+
## Saída esperada
|
|
199
|
+
|
|
200
|
+
Para Cenário A: atualizar `DARE/BLUEPRINT.md` com a estrutura de crates
|
|
201
|
+
(diagrama + tabela de responsabilidades + `Cargo.toml` workspace).
|
|
202
|
+
|
|
203
|
+
Para Cenário B: gerar arquivo `DARE/MIGRATION-PLAN.md` com:
|
|
204
|
+
- Sintomas detectados (linhas de código, arquivos, etc.)
|
|
205
|
+
- 4 PRs em ordem com diff de pastas
|
|
206
|
+
- Critério de aceite por PR
|
|
207
|
+
- Estimativa de esforço
|
|
208
|
+
|
|
209
|
+
$ARGUMENTS
|