@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
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Camada semântica da engenharia reversa (Fase 0 / brownfield). Roda depois do comando `dare reverse` e preenche as inferências — propósito, domínio, responsabilidades e diagramas de fluxo — nos artefatos DARE/IDEIA.md e DARE/REVERSE/module-*.md.
|
|
3
|
+
globs: DARE/IDEIA.md,DARE/REVERSE/**
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Reverse — Engenharia Reversa (Fase 0)
|
|
8
|
+
|
|
9
|
+
Esta skill é a **camada semântica** da engenharia reversa. Ela roda **depois** do comando
|
|
10
|
+
`dare reverse`, que já varreu o código e gerou os esqueletos determinísticos. Sua função é
|
|
11
|
+
**preencher as inferências** que o CLI não faz: propósito, domínio, responsabilidades e os
|
|
12
|
+
**diagramas de fluxo** ("como a coisa funciona").
|
|
13
|
+
|
|
14
|
+
> Pré-requisito: rodar `dare reverse` antes (gera `DARE/IDEIA.md`, `DARE/REVERSE/module-*.md`
|
|
15
|
+
> e `DARE/REVERSE/reverse-facts.json`). Se não existirem, peça para rodar `dare reverse` primeiro.
|
|
16
|
+
|
|
17
|
+
## Quando usar
|
|
18
|
+
|
|
19
|
+
- O usuário quer entender / documentar um projeto **legado** antes de adotar o DARE.
|
|
20
|
+
- Acabou de rodar `dare reverse` e os artefatos têm seções `<!-- AGENT: ... -->` em aberto.
|
|
21
|
+
- O objetivo é gerar uma **pré-arquitetura** (`IDEIA.md`) que depois vira `DESIGN.md`.
|
|
22
|
+
|
|
23
|
+
## Marcação de confiança (obrigatória)
|
|
24
|
+
|
|
25
|
+
Ao preencher cada `<!-- AGENT -->`, marque **cada afirmação** com seu nível de confiança + evidência:
|
|
26
|
+
|
|
27
|
+
- `- 🟢 <claim>. ` + `` `arquivo:linha` `` — **CONFIRMED**: evidência direta no código.
|
|
28
|
+
- `- 🟡 <claim>. ` + `` `arquivo:linha` `` — **INFERRED**: padrão/dedução; pode estar errado.
|
|
29
|
+
- `- 🔴 <claim>. → ver gaps.md` — **GAP**: não determinável pelo código.
|
|
30
|
+
|
|
31
|
+
Regra: só 🟢 com evidência direta; na dúvida, 🟡; sem base, 🔴 (registre em `gaps.md`). Os fatos
|
|
32
|
+
estruturais (caminho, LOC, deps) já vêm pré-marcados 🟢 pelo CLI — **não os altere**.
|
|
33
|
+
|
|
34
|
+
## O que fazer
|
|
35
|
+
|
|
36
|
+
### 1. Carregar os fatos (não re-varrer tudo)
|
|
37
|
+
|
|
38
|
+
- Leia `DARE/REVERSE/reverse-facts.json` — fonte de fatos determinística (stack, módulos, LOC,
|
|
39
|
+
grafo de dependências). **Confie nela** para o inventário.
|
|
40
|
+
- Para cada módulo, abra **2-5 arquivos representativos** (entrypoints, controllers, services,
|
|
41
|
+
models) — o suficiente para inferir responsabilidade e fluxo. Não leia o módulo inteiro.
|
|
42
|
+
|
|
43
|
+
### 2. Preencher `DARE/IDEIA.md`
|
|
44
|
+
|
|
45
|
+
Substitua cada bloco `<!-- AGENT: ... -->`:
|
|
46
|
+
|
|
47
|
+
- **Propósito Inferido** — 2-4 frases: o que o software faz e por quê.
|
|
48
|
+
- **Domínio & Conceitos** — entidades de negócio + glossário.
|
|
49
|
+
- **Modelo de Dados (reconstruído)** — entidades, campos-chave, relacionamentos.
|
|
50
|
+
- **Superfície de API** — endpoints inferidos de rotas/controllers.
|
|
51
|
+
- **Fluxo do Sistema** — um `flowchart TD` Mermaid do caminho principal de request/dados
|
|
52
|
+
atravessando os módulos.
|
|
53
|
+
- **⚠️ Incertezas / Gaps** — o que NÃO deu pra inferir + perguntas objetivas para o humano.
|
|
54
|
+
|
|
55
|
+
**Não toque** no Mapa de Módulos nem na tabela (determinísticos, gerados pelo CLI).
|
|
56
|
+
|
|
57
|
+
### 3. Preencher cada `DARE/REVERSE/module-*.md`
|
|
58
|
+
|
|
59
|
+
- **Responsabilidade** — papel do módulo no sistema (1-3 frases).
|
|
60
|
+
- **Superfície Pública** — o que expõe (funções/classes/endpoints/tipos).
|
|
61
|
+
- **Como Funciona (fluxo)** — um `sequenceDiagram` Mermaid do fluxo típico
|
|
62
|
+
(entrypoint → service → repository → DB/externo).
|
|
63
|
+
- **Dependências & Acoplamento** — comente o acoplamento e riscos (circular, hotspot HIGH).
|
|
64
|
+
|
|
65
|
+
### 4. Apresentar ao usuário
|
|
66
|
+
|
|
67
|
+
Resumo: propósito inferido, nº de módulos, principais incertezas. Reforce que o `IDEIA.md` é um
|
|
68
|
+
**rascunho a validar** antes de promover a DESIGN.
|
|
69
|
+
|
|
70
|
+
## Passo final — Gaps, Questions e Reviewer
|
|
71
|
+
|
|
72
|
+
1. **`gaps.md`** — consolide os 🔴 classificados por severidade (crítico/moderado/cosmético/fora-escopo) + tratamento.
|
|
73
|
+
2. **`questions.md`** — perguntas objetivas ao humano.
|
|
74
|
+
3. **Reviewer** — releia os arquivos-chave e rebaixe claims sem evidência (🟢→🟡 ou 🟡→🔴).
|
|
75
|
+
4. **Rode `dare reverse --report`** — gera `confidence-report.md` + `traceability/code-spec-matrix.md` (índice determinístico).
|
|
76
|
+
|
|
77
|
+
## Modo `--deep` (Fase 3)
|
|
78
|
+
|
|
79
|
+
Se `dare reverse --deep` foi usado, complete os artefatos extras em `DARE/REVERSE/`:
|
|
80
|
+
- **`erd.md`** — entidades extraídas pelo CLI (🟢); complete relações não-explícitas (🟡).
|
|
81
|
+
- **`domain-rules.md`** — regras de negócio (validações, invariantes, cálculos), 🟢/🟡/🔴.
|
|
82
|
+
- **`state-machines.md`** — `stateDiagram-v2` por entidade/fluxo (estados/transições reais).
|
|
83
|
+
- **`permissions.md`** — papéis, recursos e regras de autorização.
|
|
84
|
+
- **`c4/c4-context.md`** e **`c4/c4-container.md`** — atores/externos e containers (component = mapa de módulos).
|
|
85
|
+
|
|
86
|
+
## Regras de ouro
|
|
87
|
+
|
|
88
|
+
1. **Não invente** — fluxo não-claro vira 🔴 (gap), não chute.
|
|
89
|
+
2. **Fidelidade ao código real** — descreva o que o código faz, não o que deveria fazer.
|
|
90
|
+
3. **Diagramas enxutos** — legibilidade acima de exaustividade.
|
|
91
|
+
4. **Não re-varra** — os fatos já estão em `reverse-facts.json`.
|
|
92
|
+
5. **Preserve o determinístico** — nunca edite o Mapa de Módulos/tabela/grafo do CLI.
|
|
93
|
+
|
|
94
|
+
## Antipatterns
|
|
95
|
+
|
|
96
|
+
| AP | Antipattern | Por quê |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| AP-01 | Inventar endpoints/entidades inexistentes | Polui a pré-arquitetura com ficção |
|
|
99
|
+
| AP-02 | Reescrever a tabela de módulos do CLI | Quebra a fonte determinística |
|
|
100
|
+
| AP-03 | `sequenceDiagram` gigante e ilegível | Anula o propósito do diagrama |
|
|
101
|
+
| AP-04 | Pular a seção de Incertezas | Remove o ponto de validação humana |
|
|
102
|
+
| AP-05 | Ler o projeto inteiro arquivo a arquivo | Desperdiça contexto; os fatos já estão no JSON |
|
|
103
|
+
| AP-06 | Marcar tudo 🟢 sem evidência `file:line` | Infla a confiança e engana o humano |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
Skill MIT — parte do DARE Method. Fase 0 (brownfield). Pareia com o comando `dare reverse`.
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Guia DARE para desenvolvimento Leptos (Rust + WASM) — decisão CSR vs Fullstack, idioms 0.7, antipatterns, tipos compartilhados server+WASM com cfg_attr, workspace misto WASM+nativo, templates de tasks.
|
|
3
|
+
globs: **/*.rs,Cargo.toml,.cargo/config.toml,Trunk.toml,Leptos.toml
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Rust/Leptos DARE
|
|
8
|
+
|
|
9
|
+
Você é um especialista em Leptos 0.7+ (framework reativo Rust → WASM). Esta skill cobre **decisão de variante, idioms obrigatórios, antipatterns clássicos e estruturação de tipos compartilhados** entre server e WASM.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. Decisão de variante: CSR vs Fullstack
|
|
14
|
+
|
|
15
|
+
| Critério | CSR (trunk) | Fullstack (cargo-leptos) |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| SEO necessário | ❌ | ✅ |
|
|
18
|
+
| Time-to-interactive crítico | ❌ | ✅ |
|
|
19
|
+
| Dashboard interno / admin | ✅ | ✅ |
|
|
20
|
+
| Backend Axum existente | indiferente | ✅ integração direta |
|
|
21
|
+
| Simplicidade de deploy | ✅ arquivos estáticos | ⚠️ binário Axum |
|
|
22
|
+
| Server functions (`#[server]`) | ❌ não existe | ✅ |
|
|
23
|
+
|
|
24
|
+
**Regra de ouro:**
|
|
25
|
+
- Atrás de login e SEO não importa → **CSR**
|
|
26
|
+
- Precisa SEO, carregamento inicial rápido, server functions → **Fullstack**
|
|
27
|
+
- Já tem Axum no monorepo → **Fullstack** (workspace unificado)
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 2. Ferramentas — nunca misturar
|
|
32
|
+
|
|
33
|
+
| Variante | Build | Dev | Test |
|
|
34
|
+
|---|---|---|---|
|
|
35
|
+
| CSR | `trunk build --release` | `trunk serve` | `cargo test --workspace` |
|
|
36
|
+
| Fullstack | `cargo leptos build --release` | `cargo leptos watch` | `cargo test --workspace` |
|
|
37
|
+
|
|
38
|
+
> ⚠️ `cargo leptos test` **não existe**. Use `cargo test --workspace`.
|
|
39
|
+
> ⚠️ Não use `trunk` para fullstack nem `cargo leptos` para CSR.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 3. Idioms obrigatórios Leptos 0.7
|
|
44
|
+
|
|
45
|
+
### Estado reativo
|
|
46
|
+
|
|
47
|
+
```rust
|
|
48
|
+
let (count, set_count) = signal(0);
|
|
49
|
+
let doubled = move || count.get() * 2; // derived (memo inline)
|
|
50
|
+
|
|
51
|
+
// Estado complexo / compartilhado:
|
|
52
|
+
let count = RwSignal::new(0);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Dados assíncronos
|
|
56
|
+
|
|
57
|
+
```rust
|
|
58
|
+
// ✅ Resource — fetch declarativo, integra com Suspense
|
|
59
|
+
let user = Resource::new(|| user_id(), |id| async move { fetch_user(id).await });
|
|
60
|
+
|
|
61
|
+
view! {
|
|
62
|
+
<Suspense fallback=|| view! { <p>"Loading..."</p> }>
|
|
63
|
+
{move || user.get().map(|u| view! { <p>{u.name}</p> })}
|
|
64
|
+
</Suspense>
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// ❌ Effect que faz fetch — re-executa em todo render
|
|
68
|
+
Effect::new(move |_| { spawn_local(async { fetch_user(id).await }); });
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Mutações
|
|
72
|
+
|
|
73
|
+
```rust
|
|
74
|
+
let save = Action::new(|input: &String| {
|
|
75
|
+
let input = input.clone();
|
|
76
|
+
async move { api::save(input).await }
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
view! {
|
|
80
|
+
<button on:click=move |_| save.dispatch("hello".to_string())>"Save"</button>
|
|
81
|
+
<Show when=move || save.pending().get()><p>"Saving..."</p></Show>
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Renderização condicional e listas
|
|
86
|
+
|
|
87
|
+
```rust
|
|
88
|
+
view! {
|
|
89
|
+
<Show when=move || logged_in.get() fallback=|| view! { <Login/> }>
|
|
90
|
+
<Dashboard/>
|
|
91
|
+
</Show>
|
|
92
|
+
|
|
93
|
+
<For
|
|
94
|
+
each=move || items.get()
|
|
95
|
+
key=|item| item.id
|
|
96
|
+
children=move |item| view! { <ItemRow item=item/> }
|
|
97
|
+
/>
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Server functions (fullstack only)
|
|
102
|
+
|
|
103
|
+
```rust
|
|
104
|
+
#[server(SaveUser, "/api")]
|
|
105
|
+
pub async fn save_user(name: String) -> Result<User, ServerFnError> {
|
|
106
|
+
db::create_user(name).await.map_err(Into::into)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
let save = ServerAction::<SaveUser>::new();
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 4. Tipos compartilhados server + WASM
|
|
115
|
+
|
|
116
|
+
```rust
|
|
117
|
+
// crates/<p>-domain/src/lib.rs
|
|
118
|
+
use serde::{Deserialize, Serialize};
|
|
119
|
+
|
|
120
|
+
#[cfg_attr(feature = "ssr", derive(sqlx::FromRow))] // só no server
|
|
121
|
+
#[derive(Clone, Debug, Serialize, Deserialize)] // server + WASM
|
|
122
|
+
pub struct SecurityEvent {
|
|
123
|
+
pub id: uuid::Uuid,
|
|
124
|
+
pub attack_type: String,
|
|
125
|
+
pub risk_score: f32,
|
|
126
|
+
pub blocked: bool,
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
```toml
|
|
131
|
+
# Cargo.toml do crate domain
|
|
132
|
+
[dependencies]
|
|
133
|
+
serde = { version = "1.0", features = ["derive"] }
|
|
134
|
+
uuid = { version = "1.10", features = ["v4", "serde"] }
|
|
135
|
+
|
|
136
|
+
[dependencies.sqlx]
|
|
137
|
+
version = "0.8"
|
|
138
|
+
features = ["postgres", "runtime-tokio", "uuid"]
|
|
139
|
+
optional = true
|
|
140
|
+
|
|
141
|
+
[features]
|
|
142
|
+
ssr = ["dep:sqlx"]
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
> O crate domain compila duas vezes: x86 (server, com sqlx) e wasm32 (client, sem sqlx). `cfg_attr` garante que `sqlx::FromRow` só aparece no server build.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 5. Workspace misto (WASM + nativo)
|
|
150
|
+
|
|
151
|
+
```toml
|
|
152
|
+
# Cargo.toml do workspace
|
|
153
|
+
[workspace]
|
|
154
|
+
resolver = "2"
|
|
155
|
+
members = [
|
|
156
|
+
"crates/<p>-core", # lib nativa (x86)
|
|
157
|
+
"crates/<p>-server", # bin nativo — Axum
|
|
158
|
+
"crates/<p>-web", # bin+lib WASM — Leptos
|
|
159
|
+
"crates/<p>-cli", # bin nativo
|
|
160
|
+
]
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
```toml
|
|
164
|
+
# crates/<p>-web/Cargo.toml
|
|
165
|
+
[features]
|
|
166
|
+
default = []
|
|
167
|
+
hydrate = ["leptos/hydrate"]
|
|
168
|
+
ssr = [
|
|
169
|
+
"dep:axum",
|
|
170
|
+
"dep:leptos_axum",
|
|
171
|
+
"dep:tokio",
|
|
172
|
+
"leptos/ssr",
|
|
173
|
+
]
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
> ⚠️ **Antipattern crítico:** `[build] target = "wasm32-unknown-unknown"` no `.cargo/config.toml` raiz quebra todos os crates nativos. `cargo leptos` e `trunk` gerenciam o target WASM internamente — não interfira.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 6. Antipatterns
|
|
181
|
+
|
|
182
|
+
| Antipattern | Por quê | Alternativa |
|
|
183
|
+
|---|---|---|
|
|
184
|
+
| `wasm_bindgen` direto | Bypassa abstrações Leptos | APIs do Leptos (`web_sys` via feature) |
|
|
185
|
+
| `panic!` em componentes | Derruba app sem `ErrorBoundary` | `Result<_, ServerFnError>` + `ErrorBoundary` |
|
|
186
|
+
| `Effect` que faz fetch | Re-executa a cada render | `Resource::new()` |
|
|
187
|
+
| `tokio::spawn` no client | `tokio` não existe no WASM | `spawn_local()` ou server function |
|
|
188
|
+
| `std::thread` no client | Não existe no WASM | Signals para paralelismo reativo |
|
|
189
|
+
| `cargo leptos test` | Comando inválido | `cargo test --workspace` |
|
|
190
|
+
| `[build] target` global | Quebra crates nativos | Sem target global; cargo-leptos gerencia |
|
|
191
|
+
| Múltiplos signals correlacionados | Render extra desnecessário | Derived signal (`move \|\| (a.get(), b.get())`) |
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 7. Templates de tasks DARE
|
|
196
|
+
|
|
197
|
+
Cole no `DARE/dare-dag.yaml`:
|
|
198
|
+
|
|
199
|
+
```yaml
|
|
200
|
+
- id: leptos-001
|
|
201
|
+
title: "Workspace, AppShell e Router base"
|
|
202
|
+
description: |
|
|
203
|
+
Cargo workspace com resolver = "2".
|
|
204
|
+
App component com leptos_router::Router.
|
|
205
|
+
Layout base (header, main, footer). Rota "/" → HomePage.
|
|
206
|
+
Ralph Loop: cargo leptos build --release + cargo test --workspace + cargo clippy
|
|
207
|
+
depends_on: []
|
|
208
|
+
|
|
209
|
+
- id: leptos-002
|
|
210
|
+
title: "Form com Action + server function"
|
|
211
|
+
description: |
|
|
212
|
+
#[server] fn para processar o form.
|
|
213
|
+
ActionForm ou Action manual.
|
|
214
|
+
Validar input no server (ServerFnError em erro).
|
|
215
|
+
Pending state com Action::pending() signal.
|
|
216
|
+
depends_on: [leptos-001]
|
|
217
|
+
|
|
218
|
+
- id: leptos-003
|
|
219
|
+
title: "Lista paginada com Resource + Suspense"
|
|
220
|
+
description: |
|
|
221
|
+
Resource recebendo página como signal.
|
|
222
|
+
Envolver em Suspense com fallback loading.
|
|
223
|
+
ErrorBoundary para erros de fetch.
|
|
224
|
+
Paginação com For + key por ID.
|
|
225
|
+
depends_on: [leptos-001]
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 8. Stack canônica
|
|
231
|
+
|
|
232
|
+
| Camada | Cliente (WASM) | Server (Fullstack) |
|
|
233
|
+
|---|---|---|
|
|
234
|
+
| Framework | Leptos 0.7+ | Leptos 0.7 + leptos_axum |
|
|
235
|
+
| Roteamento | leptos_router | (compartilhado) |
|
|
236
|
+
| Estado server | Resource + Server Functions | sqlx + Axum |
|
|
237
|
+
| Estilo | Tailwind | — |
|
|
238
|
+
| Build | cargo-leptos / trunk | cargo-leptos |
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 9. Aplicação por fase DARE
|
|
243
|
+
|
|
244
|
+
### Design
|
|
245
|
+
- Decidir CSR vs Fullstack (tabela §1) e justificar
|
|
246
|
+
- Listar componentes e server functions
|
|
247
|
+
- Listar tipos compartilhados → crate `<p>-domain`
|
|
248
|
+
|
|
249
|
+
### Blueprint
|
|
250
|
+
- Tabela de componentes (nome, props, signals)
|
|
251
|
+
- Lista de server functions com assinatura
|
|
252
|
+
- Tipos no crate domain com features ssr/hydrate
|
|
253
|
+
|
|
254
|
+
### Tasks
|
|
255
|
+
- Use os templates de §7
|
|
256
|
+
|
|
257
|
+
### Execute
|
|
258
|
+
- Ralph Loop validation:
|
|
259
|
+
```bash
|
|
260
|
+
cargo leptos build --release # ou trunk build --release
|
|
261
|
+
cargo test --workspace
|
|
262
|
+
cargo clippy --workspace --all-targets -- -D warnings
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Checklist final
|
|
268
|
+
|
|
269
|
+
- [ ] Variante decidida (CSR ou Fullstack) e justificada no DESIGN.md
|
|
270
|
+
- [ ] Workspace com `resolver = "2"` e crates separados
|
|
271
|
+
- [ ] `<p>-domain` com tipos compartilhados e features `ssr`
|
|
272
|
+
- [ ] Components usam Resource (não Effect) para fetch
|
|
273
|
+
- [ ] Mutations usam Action / ServerAction
|
|
274
|
+
- [ ] Server functions com `Result<_, ServerFnError>`
|
|
275
|
+
- [ ] ErrorBoundary em torno de componentes assíncronos
|
|
276
|
+
- [ ] Sem `[build] target` global no `.cargo/config.toml`
|
|
277
|
+
- [ ] `cargo test --workspace` (não `cargo leptos test`)
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
Skill licenciada MIT — parte do DARE Method v3.
|