synapos 2.5.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/.github/copilot-instructions.md +72 -0
- package/.synapos/.manifest.json +155 -0
- package/.synapos/GUIDE.md +660 -0
- package/.synapos/VERSION +1 -0
- package/.synapos/_memory/company.md +11 -0
- package/.synapos/_memory/preferences.md +15 -0
- package/.synapos/copilot.md +451 -0
- package/.synapos/core/best-practices/_catalog.yaml +56 -0
- package/.synapos/core/best-practices/content/blog-post.md +238 -0
- package/.synapos/core/best-practices/content/copywriting.md +164 -0
- package/.synapos/core/best-practices/content/linkedin-post.md +186 -0
- package/.synapos/core/best-practices/dev/api-design.md +274 -0
- package/.synapos/core/best-practices/dev/code-review.md +138 -0
- package/.synapos/core/best-practices/dev/git-workflow.md +256 -0
- package/.synapos/core/best-practices/dev/testing-strategy.md +213 -0
- package/.synapos/core/best-practices/product/product-spec.md +235 -0
- package/.synapos/core/best-practices/product/technical-writing.md +264 -0
- package/.synapos/core/best-practices/product/user-research.md +242 -0
- package/.synapos/core/commands/bump.md +59 -0
- package/.synapos/core/commands/debug/session.md +100 -0
- package/.synapos/core/commands/migrate/v1-to-v2.md +142 -0
- package/.synapos/core/commands/set-model.md +197 -0
- package/.synapos/core/commands/setup/build-business.md +378 -0
- package/.synapos/core/commands/setup/build-tech.md +374 -0
- package/.synapos/core/commands/setup/discover.md +543 -0
- package/.synapos/core/commands/setup/from-code.md +407 -0
- package/.synapos/core/commands/setup/start.md +201 -0
- package/.synapos/core/copilot-adapter.md +283 -0
- package/.synapos/core/gate-system.md +417 -0
- package/.synapos/core/model-adapter.md +245 -0
- package/.synapos/core/orchestrator.md +794 -0
- package/.synapos/core/pipeline-runner.md +784 -0
- package/.synapos/core/pipelines/pre-execution.yaml +107 -0
- package/.synapos/core/rules/product-agent.mdc +59 -0
- package/.synapos/core/skills-engine.md +207 -0
- package/.synapos/core/versioning.md +218 -0
- package/.synapos/skills/.gitkeep +0 -0
- package/.synapos/skills/brave-search/SKILL.md +130 -0
- package/.synapos/skills/fetch-url/SKILL.md +135 -0
- package/.synapos/skills/filesystem/SKILL.md +162 -0
- package/.synapos/skills/github/SKILL.md +148 -0
- package/.synapos/skills/playwright-browser/SKILL.md +124 -0
- package/.synapos/squad-templates/backend/agents/alexandre-api.agent.md +243 -0
- package/.synapos/squad-templates/backend/agents/bruno-base.agent.md +240 -0
- package/.synapos/squad-templates/backend/agents/daniela-dados.agent.md +267 -0
- package/.synapos/squad-templates/backend/agents/roberto-revisao-be.agent.md +219 -0
- package/.synapos/squad-templates/backend/agents/sergio-seguranca.agent.md +266 -0
- package/.synapos/squad-templates/backend/pipelines/api-development.yaml +83 -0
- package/.synapos/squad-templates/backend/pipelines/bug-fix.yaml +41 -0
- package/.synapos/squad-templates/backend/pipelines/database-migration.yaml +56 -0
- package/.synapos/squad-templates/backend/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/backend/pipelines/steps/01-gate-integridade.md +66 -0
- package/.synapos/squad-templates/backend/pipelines/steps/02-design-api.md +155 -0
- package/.synapos/squad-templates/backend/pipelines/steps/03-checkpoint-contrato.md +44 -0
- package/.synapos/squad-templates/backend/pipelines/steps/04-implementacao.md +113 -0
- package/.synapos/squad-templates/backend/pipelines/steps/05-seguranca.md +100 -0
- package/.synapos/squad-templates/backend/pipelines/steps/06-review.md +80 -0
- package/.synapos/squad-templates/backend/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/backend/pipelines/steps/bfbe-02-diagnostico.md +47 -0
- package/.synapos/squad-templates/backend/pipelines/steps/bfbe-03-fix.md +41 -0
- package/.synapos/squad-templates/backend/pipelines/steps/bfbe-04-review.md +42 -0
- package/.synapos/squad-templates/backend/pipelines/steps/dm-02-schema.md +85 -0
- package/.synapos/squad-templates/backend/pipelines/steps/dm-03-checkpoint.md +30 -0
- package/.synapos/squad-templates/backend/pipelines/steps/dm-04-migration.md +58 -0
- package/.synapos/squad-templates/backend/pipelines/steps/dm-05-review.md +44 -0
- package/.synapos/squad-templates/backend/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/backend/pipelines/steps/qf-03-executar.md +49 -0
- package/.synapos/squad-templates/backend/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/backend/template.yaml +72 -0
- package/.synapos/squad-templates/devops/agents/claudio-containers.agent.md +245 -0
- package/.synapos/squad-templates/devops/agents/igor-infra.agent.md +198 -0
- package/.synapos/squad-templates/devops/agents/osvaldo-observabilidade.agent.md +262 -0
- package/.synapos/squad-templates/devops/agents/patricia-pipeline.agent.md +253 -0
- package/.synapos/squad-templates/devops/pipelines/ci-cd-setup.yaml +93 -0
- package/.synapos/squad-templates/devops/pipelines/infra-provision.yaml +56 -0
- package/.synapos/squad-templates/devops/pipelines/quick-fix.yaml +41 -0
- package/.synapos/squad-templates/devops/pipelines/steps/01-gate-integridade.md +62 -0
- package/.synapos/squad-templates/devops/pipelines/steps/02-infra-design.md +31 -0
- package/.synapos/squad-templates/devops/pipelines/steps/03-containers.md +28 -0
- package/.synapos/squad-templates/devops/pipelines/steps/04-checkpoint.md +20 -0
- package/.synapos/squad-templates/devops/pipelines/steps/05-pipeline-cicd.md +29 -0
- package/.synapos/squad-templates/devops/pipelines/steps/06-observabilidade.md +28 -0
- package/.synapos/squad-templates/devops/pipelines/steps/07-review.md +27 -0
- package/.synapos/squad-templates/devops/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/devops/pipelines/steps/ip-02-design.md +21 -0
- package/.synapos/squad-templates/devops/pipelines/steps/ip-03-iac.md +20 -0
- package/.synapos/squad-templates/devops/pipelines/steps/ip-04-checkpoint.md +22 -0
- package/.synapos/squad-templates/devops/pipelines/steps/ip-05-apply.md +22 -0
- package/.synapos/squad-templates/devops/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/devops/pipelines/steps/qf-03-executar.md +52 -0
- package/.synapos/squad-templates/devops/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/devops/template.yaml +68 -0
- package/.synapos/squad-templates/engineer/agents/leo-engenheiro.agent.md +203 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/01-gate.md +22 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/02-preparacao.md +66 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/03-investigacao.md +110 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/04-checkpoint-contexto.md +24 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/05-arquitetura.md +127 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/06-checkpoint-arquitetura.md +27 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/07-planejamento.md +109 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/08-checkpoint-plano.md +27 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/09-execucao.md +121 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/atualizar-tarefa.md +27 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/visual-spec.md +74 -0
- package/.synapos/squad-templates/engineer/pipelines/feature-development.yaml +107 -0
- package/.synapos/squad-templates/engineer/template.yaml +56 -0
- package/.synapos/squad-templates/frontend/agents/ana-arquitetura-fe.agent.md +245 -0
- package/.synapos/squad-templates/frontend/agents/paulo-performance.agent.md +234 -0
- package/.synapos/squad-templates/frontend/agents/renata-revisao-fe.agent.md +219 -0
- package/.synapos/squad-templates/frontend/agents/rodrigo-react.agent.md +261 -0
- package/.synapos/squad-templates/frontend/agents/tiago-testes-fe.agent.md +229 -0
- package/.synapos/squad-templates/frontend/agents/ursula-ui.agent.md +283 -0
- package/.synapos/squad-templates/frontend/pipelines/bug-fix.yaml +40 -0
- package/.synapos/squad-templates/frontend/pipelines/component-development.yaml +48 -0
- package/.synapos/squad-templates/frontend/pipelines/feature-development.yaml +76 -0
- package/.synapos/squad-templates/frontend/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/01-gate-integridade.md +66 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/02-arquitetura.md +100 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/03-checkpoint-design.md +43 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/04-implementacao.md +114 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/05-review.md +104 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/06-docs.md +51 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/bf-02-diagnostico.md +52 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/bf-03-fix.md +58 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/bf-04-review.md +43 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/cd-02-spec.md +96 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/qf-03-executar.md +45 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/frontend/template.yaml +77 -0
- package/.synapos/squad-templates/fullstack/agents/carlos-coordenador.agent.md +266 -0
- package/.synapos/squad-templates/fullstack/pipelines/bug-fix.yaml +46 -0
- package/.synapos/squad-templates/fullstack/pipelines/integration-feature.yaml +92 -0
- package/.synapos/squad-templates/fullstack/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/01-gate-integridade.md +66 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/02-contrato-api.md +63 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/03-checkpoint-contrato.md +25 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/04-frontend.md +35 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/05-backend.md +36 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/06-integracao.md +47 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/07-review.md +49 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/bf-02-diagnostico.md +34 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/bf-03-fix.md +22 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/bf-04-review.md +22 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/qf-03-executar.md +49 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/fullstack/template.yaml +93 -0
- package/.synapos/squad-templates/ia-dados/agents/diana-dados.agent.md +269 -0
- package/.synapos/squad-templates/ia-dados/agents/larissa-llm.agent.md +255 -0
- package/.synapos/squad-templates/ia-dados/agents/marco-ml.agent.md +227 -0
- package/.synapos/squad-templates/ia-dados/agents/nelson-notebook.agent.md +252 -0
- package/.synapos/squad-templates/ia-dados/pipelines/data-pipeline.yaml +71 -0
- package/.synapos/squad-templates/ia-dados/pipelines/ml-feature.yaml +91 -0
- package/.synapos/squad-templates/ia-dados/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/01-gate-integridade.md +62 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/02-exploracao.md +36 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/03-design.md +25 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/04-checkpoint.md +23 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/05-implementacao.md +26 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/06-avaliacao.md +29 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/07-deploy.md +30 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-02-design.md +21 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-03-checkpoint.md +14 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-04-implementacao.md +19 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-05-qualidade.md +21 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-06-deploy.md +22 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/qf-03-executar.md +53 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/ia-dados/template.yaml +68 -0
- package/.synapos/squad-templates/mobile/agents/felipe-feature.agent.md +234 -0
- package/.synapos/squad-templates/mobile/agents/marina-mobile.agent.md +219 -0
- package/.synapos/squad-templates/mobile/agents/viviane-visual.agent.md +218 -0
- package/.synapos/squad-templates/mobile/pipelines/bug-fix.yaml +47 -0
- package/.synapos/squad-templates/mobile/pipelines/feature-development.yaml +77 -0
- package/.synapos/squad-templates/mobile/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/01-gate-integridade.md +62 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/02-arquitetura.md +35 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/03-design-ux.md +29 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/04-checkpoint.md +20 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/05-implementacao.md +26 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/06-review.md +27 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/bf-02-diagnostico.md +22 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/bf-03-fix.md +23 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/bf-04-review.md +20 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/qf-03-executar.md +49 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/mobile/template.yaml +73 -0
- package/.synapos/squad-templates/produto/agents/ana-analise.agent.md +243 -0
- package/.synapos/squad-templates/produto/agents/eduardo-estrategia.agent.md +258 -0
- package/.synapos/squad-templates/produto/agents/paulo-pesquisa.agent.md +226 -0
- package/.synapos/squad-templates/produto/agents/priscila-produto.agent.md +235 -0
- package/.synapos/squad-templates/produto/agents/tania-tecnica.agent.md +239 -0
- package/.synapos/squad-templates/produto/agents/ursula-ux.agent.md +231 -0
- package/.synapos/squad-templates/produto/pipelines/discovery-spec-handoff.yaml +152 -0
- package/.synapos/squad-templates/produto/pipelines/nova-feature.yaml +77 -0
- package/.synapos/squad-templates/produto/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/produto/pipelines/quick-spec.yaml +60 -0
- package/.synapos/squad-templates/produto/pipelines/refinar-docs.yaml +33 -0
- package/.synapos/squad-templates/produto/pipelines/steps/01-gate-integridade.md +48 -0
- package/.synapos/squad-templates/produto/pipelines/steps/02-contexto-negocio.md +119 -0
- package/.synapos/squad-templates/produto/pipelines/steps/03-personas.md +107 -0
- package/.synapos/squad-templates/produto/pipelines/steps/04-checkpoint-research.md +53 -0
- package/.synapos/squad-templates/produto/pipelines/steps/04b-alinhamento-estrategico.md +92 -0
- package/.synapos/squad-templates/produto/pipelines/steps/05-spec.md +138 -0
- package/.synapos/squad-templates/produto/pipelines/steps/05b-checkpoint-spec.md +60 -0
- package/.synapos/squad-templates/produto/pipelines/steps/06-requisitos.md +118 -0
- package/.synapos/squad-templates/produto/pipelines/steps/06b-checkpoint-requisitos.md +53 -0
- package/.synapos/squad-templates/produto/pipelines/steps/06c-visual-spec.md +59 -0
- package/.synapos/squad-templates/produto/pipelines/steps/07-arquitetura.md +160 -0
- package/.synapos/squad-templates/produto/pipelines/steps/08-handoff.md +130 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-02-validar-requisito.md +73 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-03-verificar-docs.md +69 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-04-spec.md +160 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-05-checkpoint-aprovacao.md +50 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-06-versionar.md +71 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-07-handoff.md +99 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-08-criar-tarefas.md +232 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qf-03-executar.md +49 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qs-02-contexto.md +59 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qs-03-spec.md +67 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qs-05-handoff.md +49 -0
- package/.synapos/squad-templates/produto/pipelines/steps/rf-02-selecionar.md +66 -0
- package/.synapos/squad-templates/produto/pipelines/steps/rf-03-delta.md +73 -0
- package/.synapos/squad-templates/produto/pipelines/steps/rf-04-criar-versao.md +86 -0
- package/.synapos/squad-templates/produto/template.yaml +91 -0
- package/.synapos/squads/.gitkeep +0 -0
- package/README.md +285 -0
- package/bin/synapos.js +331 -0
- package/package.json +26 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: 04-implementacao
|
|
3
|
+
name: "Implementação"
|
|
4
|
+
agent: rodrigo-react
|
|
5
|
+
execution: subagent
|
|
6
|
+
model_tier: powerful
|
|
7
|
+
veto_conditions:
|
|
8
|
+
- "Componente async sem estado de loading tratado"
|
|
9
|
+
- "Componente async sem estado de error tratado"
|
|
10
|
+
- "Componente async sem estado empty tratado"
|
|
11
|
+
- "Prop 'any' sem justificativa no TypeScript"
|
|
12
|
+
- "Lista sem key estável"
|
|
13
|
+
on_reject: 04-implementacao
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Implementação Frontend
|
|
17
|
+
|
|
18
|
+
Você é **Rodrigo React**. Leia seu `.agent.md` para aplicar sua persona e princípios completos.
|
|
19
|
+
|
|
20
|
+
## Contexto disponível
|
|
21
|
+
|
|
22
|
+
- Arquitetura decidida: `docs/architecture-decision.md` ← **leia antes de escrever qualquer código**
|
|
23
|
+
- Memória do squad: `_memory/memories.md` — padrões aprovados anteriormente
|
|
24
|
+
- Objetivo do squad: `squad.yaml → description`
|
|
25
|
+
- **Regras críticas do projeto:** `docs/tech-context/briefing/critical-rules.md` ← aplique todas as regras durante a implementação
|
|
26
|
+
|
|
27
|
+
## Sua missão
|
|
28
|
+
|
|
29
|
+
Implementar a feature exatamente conforme a arquitetura aprovada.
|
|
30
|
+
|
|
31
|
+
## Regras de implementação
|
|
32
|
+
|
|
33
|
+
### Obrigatórias (veto se violadas)
|
|
34
|
+
|
|
35
|
+
**1. Todos os 4 estados em componentes assíncronos:**
|
|
36
|
+
```typescript
|
|
37
|
+
if (isLoading) return <Skeleton />
|
|
38
|
+
if (error) return <ErrorMessage error={error} onRetry={refetch} />
|
|
39
|
+
if (!data || data.length === 0) return <EmptyState />
|
|
40
|
+
return <ConteúdoPrincipal data={data} />
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**2. TypeScript sem `any` não justificado:**
|
|
44
|
+
```typescript
|
|
45
|
+
// ❌ nunca
|
|
46
|
+
const handler = (e: any) => {}
|
|
47
|
+
|
|
48
|
+
// ✅ sempre
|
|
49
|
+
const handler = (e: React.ChangeEvent<HTMLInputElement>) => {}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**3. Keys estáveis em listas:**
|
|
53
|
+
```typescript
|
|
54
|
+
// ❌ nunca em listas dinâmicas
|
|
55
|
+
items.map((item, index) => <Item key={index} />)
|
|
56
|
+
|
|
57
|
+
// ✅ sempre
|
|
58
|
+
items.map((item) => <Item key={item.id} />)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**4. Acessibilidade mínima:**
|
|
62
|
+
- `alt` descritivo em toda `<img>`
|
|
63
|
+
- `aria-label` em ações sem texto visível
|
|
64
|
+
- Focus visible preservado (não remover outline)
|
|
65
|
+
- Labels associados a inputs
|
|
66
|
+
|
|
67
|
+
### Estrutura padrão de um componente
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
// 1. Types
|
|
71
|
+
interface Props { ... }
|
|
72
|
+
|
|
73
|
+
// 2. Componente
|
|
74
|
+
export function ComponentName({ prop1, prop2 }: Props) {
|
|
75
|
+
// 3. Hooks (estado, queries, efeitos)
|
|
76
|
+
const { data, isLoading, error } = useQuery(...)
|
|
77
|
+
|
|
78
|
+
// 4. Handlers (prefixo handle)
|
|
79
|
+
function handleAction() { ... }
|
|
80
|
+
|
|
81
|
+
// 5. Guards (loading, error, empty)
|
|
82
|
+
if (isLoading) return <Skeleton />
|
|
83
|
+
if (error) return <ErrorMessage ... />
|
|
84
|
+
if (!data) return <EmptyState />
|
|
85
|
+
|
|
86
|
+
// 6. Render
|
|
87
|
+
return ( ... )
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Lógica complexa → hook customizado
|
|
92
|
+
|
|
93
|
+
Se o componente tem mais de ~40 linhas de lógica, extraia para hook:
|
|
94
|
+
```typescript
|
|
95
|
+
function useFeatureName() {
|
|
96
|
+
// estado, efeitos, handlers
|
|
97
|
+
return { data, isLoading, error, handleAction }
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Entrega
|
|
102
|
+
|
|
103
|
+
Apresente o código implementado seguindo a estrutura definida em `docs/architecture-decision.md`.
|
|
104
|
+
|
|
105
|
+
Para cada arquivo entregue, indique:
|
|
106
|
+
- **Caminho:** `{caminho relativo ao projeto}`
|
|
107
|
+
- **O que faz:** {1 linha}
|
|
108
|
+
|
|
109
|
+
Ao final, confirme:
|
|
110
|
+
- [ ] Todos os estados tratados (loading, error, empty, data)
|
|
111
|
+
- [ ] TypeScript correto sem `any`
|
|
112
|
+
- [ ] Keys estáveis em listas
|
|
113
|
+
- [ ] Acessibilidade básica
|
|
114
|
+
- [ ] Lógica em hooks, UI em componentes
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: 05-review
|
|
3
|
+
name: "Code Review"
|
|
4
|
+
agent: renata-revisao-fe
|
|
5
|
+
execution: inline
|
|
6
|
+
model_tier: powerful
|
|
7
|
+
output_files:
|
|
8
|
+
- review-notes.md
|
|
9
|
+
veto_conditions:
|
|
10
|
+
- "Review sem categorização BLOCKER/SUGGESTION/QUESTION/PRAISE"
|
|
11
|
+
- "BLOCKER sem fix sugerido"
|
|
12
|
+
on_reject: 04-implementacao
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Code Review Frontend
|
|
16
|
+
|
|
17
|
+
Você é **Renata Revisão**. Leia seu `.agent.md` para aplicar sua persona e princípios completos.
|
|
18
|
+
|
|
19
|
+
## Contexto disponível
|
|
20
|
+
|
|
21
|
+
- Implementação do step anterior (código entregue por Rodrigo React)
|
|
22
|
+
- Arquitetura aprovada: `docs/architecture-decision.md`
|
|
23
|
+
- Memória do squad: `_memory/memories.md`
|
|
24
|
+
|
|
25
|
+
## Sua missão
|
|
26
|
+
|
|
27
|
+
Revisar o código em 4 camadas. Cada comentário categorizado.
|
|
28
|
+
|
|
29
|
+
## Execute o review em camadas
|
|
30
|
+
|
|
31
|
+
### Camada 1 — Corretude (blockers potenciais)
|
|
32
|
+
- [ ] O código faz o que a task pede?
|
|
33
|
+
- [ ] Todos os 4 estados tratados? (loading, error, empty, data)
|
|
34
|
+
- [ ] Memory leaks? (event listeners sem cleanup, subscriptions sem unsubscribe)
|
|
35
|
+
- [ ] Race conditions possíveis?
|
|
36
|
+
- [ ] Dados externos validados antes de usar?
|
|
37
|
+
|
|
38
|
+
### Camada 2 — Qualidade
|
|
39
|
+
- [ ] TypeScript sem `any` não justificado?
|
|
40
|
+
- [ ] Lógica em hooks, UI em componentes?
|
|
41
|
+
- [ ] Props drilling máximo 2 níveis?
|
|
42
|
+
- [ ] Keys estáveis em listas?
|
|
43
|
+
|
|
44
|
+
### Camada 3 — Acessibilidade (blockers)
|
|
45
|
+
- [ ] `alt` descritivo em imagens?
|
|
46
|
+
- [ ] Labels em inputs?
|
|
47
|
+
- [ ] Elementos interativos alcançáveis por teclado?
|
|
48
|
+
- [ ] Focus visible preservado?
|
|
49
|
+
|
|
50
|
+
### Camada 4 — Manutenibilidade
|
|
51
|
+
- [ ] Nomes descritivos?
|
|
52
|
+
- [ ] Sem `console.log` esquecido?
|
|
53
|
+
- [ ] Sem código comentado?
|
|
54
|
+
- [ ] Testes cobrem comportamentos críticos?
|
|
55
|
+
|
|
56
|
+
## Formato obrigatório de cada comentário
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
[BLOCKER] {arquivo}:{linha aproximada}
|
|
60
|
+
{descrição do problema e por que é um problema}
|
|
61
|
+
|
|
62
|
+
Fix sugerido:
|
|
63
|
+
{código ou abordagem}
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
[SUGGESTION] {descrição}
|
|
68
|
+
{por que melhoraria o código}
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
[QUESTION] {pergunta específica}
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
[PRAISE] {o que está bem feito e por quê}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Gerar `docs/review-notes.md`
|
|
80
|
+
|
|
81
|
+
```markdown
|
|
82
|
+
# Review Notes — {feature/task}
|
|
83
|
+
|
|
84
|
+
**Data:** {YYYY-MM-DD}
|
|
85
|
+
**Reviewer:** Renata Revisão
|
|
86
|
+
|
|
87
|
+
## Resumo
|
|
88
|
+
- BLOCKERs: {N}
|
|
89
|
+
- SUGGESTIONs: {N}
|
|
90
|
+
- QUESTIONs: {N}
|
|
91
|
+
- PRASEs: {N}
|
|
92
|
+
|
|
93
|
+
## Comentários
|
|
94
|
+
|
|
95
|
+
{todos os comentários no formato acima}
|
|
96
|
+
|
|
97
|
+
## Decisão
|
|
98
|
+
{Aprovado | Aprovado com ressalvas | Requer correção dos BLOCKERs}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Regra de decisão
|
|
102
|
+
|
|
103
|
+
- **0 BLOCKERs** → Aprovado (pode ter SUGGESTIONs pendentes)
|
|
104
|
+
- **BLOCKERs existem** → Retorna para Rodrigo React corrigir antes de prosseguir
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: 06-docs
|
|
3
|
+
name: "Documentação da Feature"
|
|
4
|
+
agent: ana-arquitetura-fe
|
|
5
|
+
execution: subagent
|
|
6
|
+
model_tier: fast
|
|
7
|
+
gate: GATE-5
|
|
8
|
+
output_files:
|
|
9
|
+
- feature-notes.md
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Documentação da Feature
|
|
13
|
+
|
|
14
|
+
Você é **Ana Arquitetura**. Leia seu `.agent.md`.
|
|
15
|
+
|
|
16
|
+
## Contexto disponível
|
|
17
|
+
|
|
18
|
+
- `docs/architecture-decision.md`
|
|
19
|
+
- `docs/review-notes.md`
|
|
20
|
+
|
|
21
|
+
## Documento a gerar
|
|
22
|
+
|
|
23
|
+
### `docs/feature-notes.md`
|
|
24
|
+
|
|
25
|
+
```markdown
|
|
26
|
+
# Feature Notes: {nome da feature}
|
|
27
|
+
|
|
28
|
+
**Data:** {YYYY-MM-DD}
|
|
29
|
+
**Squad:** {slug}
|
|
30
|
+
|
|
31
|
+
## O que foi implementado
|
|
32
|
+
{resumo em 3-5 bullets do que foi construído}
|
|
33
|
+
|
|
34
|
+
## Decisões técnicas tomadas
|
|
35
|
+
{decisões que não estavam em docs/architecture-decision.md mas emergiram durante a implementação}
|
|
36
|
+
|
|
37
|
+
## Pontos de atenção para manutenção futura
|
|
38
|
+
{o que a próxima pessoa precisa saber antes de mexer neste código}
|
|
39
|
+
|
|
40
|
+
## BLOCKERs resolvidos do review
|
|
41
|
+
{lista dos blockers que foram corrigidos}
|
|
42
|
+
|
|
43
|
+
## SUGGESTIONs pendentes (débito técnico)
|
|
44
|
+
{sugestões do review que ficaram para depois — e por quê}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Registre em `_memory/memories.md` qualquer padrão aprovado nesta sessão que deve ser mantido:
|
|
48
|
+
```markdown
|
|
49
|
+
## Padrão aprovado — {YYYY-MM-DD}
|
|
50
|
+
{descrição do padrão para usar em próximas sessões}
|
|
51
|
+
```
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: atualizar-tarefa
|
|
3
|
+
name: "Atualizar Tarefa"
|
|
4
|
+
execution: checkpoint
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Atualizar Tarefa
|
|
8
|
+
|
|
9
|
+
A implementação foi concluída. Registre o progresso onde as tarefas estão sendo gerenciadas.
|
|
10
|
+
|
|
11
|
+
## Identificar tarefa e plataforma
|
|
12
|
+
|
|
13
|
+
Leia `_memory/memories.md` da sessão atual:
|
|
14
|
+
- `Task:` — descrição do que foi feito
|
|
15
|
+
- `Issue:` — referência da tarefa (número, plataforma, local ou —)
|
|
16
|
+
|
|
17
|
+
Apresente ao usuário:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
21
|
+
SESSÃO CONCLUÍDA
|
|
22
|
+
|
|
23
|
+
Task: {Task da sessão}
|
|
24
|
+
Issue: {Issue registrada}
|
|
25
|
+
|
|
26
|
+
A tarefa foi concluída?
|
|
27
|
+
|
|
28
|
+
✅ Sim — marcar como concluída
|
|
29
|
+
🔄 Parcial — registrar progresso e manter aberta
|
|
30
|
+
⏭️ Pular — não atualizar agora
|
|
31
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Aguarde a seleção. Se **Pular**, encerre aqui.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Executar por plataforma
|
|
39
|
+
|
|
40
|
+
### 📁 Local — `docs/specs/*-tasks.md`
|
|
41
|
+
|
|
42
|
+
Abra o arquivo de tarefas identificado no `Issue:` do memories.md.
|
|
43
|
+
|
|
44
|
+
Localize o item correspondente e marque como concluído:
|
|
45
|
+
- `- [ ]` → `- [x]`
|
|
46
|
+
|
|
47
|
+
Se parcial, adicione nota abaixo do item:
|
|
48
|
+
```markdown
|
|
49
|
+
- [~] RF-{N}: {título}
|
|
50
|
+
> Parcial — {YYYY-MM-DD}: {o que foi feito}. Pendente: {o que falta}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
### 🐙 GitHub Issues
|
|
56
|
+
|
|
57
|
+
**Se concluída:**
|
|
58
|
+
```bash
|
|
59
|
+
# Fechar a issue
|
|
60
|
+
gh issue close {número} --comment "Implementado. Referência: {branch ou PR}"
|
|
61
|
+
|
|
62
|
+
# Ou adicionar label 'done' e fechar
|
|
63
|
+
gh issue edit {número} --add-label "done"
|
|
64
|
+
gh issue close {número}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Se parcial:**
|
|
68
|
+
```bash
|
|
69
|
+
gh issue comment {número} --body "Progresso — {YYYY-MM-DD}: {o que foi implementado}. Pendente: {o que falta}"
|
|
70
|
+
gh issue edit {número} --add-label "in-progress"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
### 📐 Linear
|
|
76
|
+
|
|
77
|
+
**Se concluída:**
|
|
78
|
+
- Se Linear MCP disponível: atualize o status para `Done` / `Completed`
|
|
79
|
+
- Caso contrário, exiba instrução:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
Linear — Atualizar manualmente:
|
|
83
|
+
Issue: {ID registrado no memories.md}
|
|
84
|
+
Novo status: Done
|
|
85
|
+
Comentário: Implementado em {YYYY-MM-DD}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Se parcial:**
|
|
89
|
+
```
|
|
90
|
+
Linear — Atualizar manualmente:
|
|
91
|
+
Issue: {ID}
|
|
92
|
+
Novo status: In Progress
|
|
93
|
+
Comentário: {progresso + pendências}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### 🔲 Jira
|
|
99
|
+
|
|
100
|
+
Exiba instrução:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
Jira — Atualizar manualmente:
|
|
104
|
+
Issue: {ID registrado no memories.md}
|
|
105
|
+
Transição: {Done | In Progress}
|
|
106
|
+
Comentário: {resumo do que foi feito}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Registrar no memories.md
|
|
112
|
+
|
|
113
|
+
Adicione entrada:
|
|
114
|
+
|
|
115
|
+
```markdown
|
|
116
|
+
## Tarefa concluída — {YYYY-MM-DD}
|
|
117
|
+
Task: {descrição}
|
|
118
|
+
Issue: {referência}
|
|
119
|
+
Status: {concluída | parcial}
|
|
120
|
+
{SE PARCIAL:}
|
|
121
|
+
Pendente: {o que falta}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Confirmação
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
✅ Progresso registrado!
|
|
130
|
+
|
|
131
|
+
Task: {descrição}
|
|
132
|
+
Status: {concluída | parcial}
|
|
133
|
+
Plataforma: {local | GitHub #{N} | Linear | Jira | —}
|
|
134
|
+
|
|
135
|
+
{SE CONCLUÍDA E TODAS AS TAREFAS DONE:}
|
|
136
|
+
🎉 Todas as tarefas da feature estão concluídas.
|
|
137
|
+
Próximo passo: verificar handoff em docs/specs/{feature-slug}-handoff.md
|
|
138
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: bf-02-diagnostico
|
|
3
|
+
name: "Diagnóstico e Causa Raiz"
|
|
4
|
+
agent: ana-arquitetura-fe
|
|
5
|
+
execution: inline
|
|
6
|
+
model_tier: powerful
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Diagnóstico de Bug
|
|
10
|
+
|
|
11
|
+
Você é **Ana Arquitetura**. Aplique sua mentalidade sistêmica para encontrar a causa raiz.
|
|
12
|
+
|
|
13
|
+
## Perguntar ao usuário
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
Descreva o bug:
|
|
17
|
+
1. O que deveria acontecer?
|
|
18
|
+
2. O que está acontecendo?
|
|
19
|
+
3. Como reproduzir? (passos)
|
|
20
|
+
4. Em que ambiente aparece? (browser, versão, dispositivo)
|
|
21
|
+
5. Você tem alguma hipótese de causa?
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Analisar e documentar
|
|
25
|
+
|
|
26
|
+
Com base na descrição, apresente:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
DIAGNÓSTICO
|
|
30
|
+
|
|
31
|
+
Comportamento esperado: {...}
|
|
32
|
+
Comportamento atual: {....}
|
|
33
|
+
|
|
34
|
+
Hipótese de causa raiz:
|
|
35
|
+
{sua análise técnica — onde no código provavelmente está o problema}
|
|
36
|
+
|
|
37
|
+
Arquivos suspeitos:
|
|
38
|
+
- {arquivo/componente} — {por quê}
|
|
39
|
+
|
|
40
|
+
Impacto:
|
|
41
|
+
- Usuários afetados: {estimativa}
|
|
42
|
+
- Severidade: Crítico | Alto | Médio | Baixo
|
|
43
|
+
|
|
44
|
+
Abordagem de fix sugerida:
|
|
45
|
+
{1-3 frases descrevendo a solução}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Pergunte:
|
|
49
|
+
```
|
|
50
|
+
[1] Correto — implementar o fix
|
|
51
|
+
[2] Ajustar hipótese — {o que está errado no diagnóstico}
|
|
52
|
+
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: bf-03-fix
|
|
3
|
+
name: "Fix"
|
|
4
|
+
agent: rodrigo-react
|
|
5
|
+
execution: subagent
|
|
6
|
+
model_tier: powerful
|
|
7
|
+
veto_conditions:
|
|
8
|
+
- "Fix sem teste que reproduz o bug antes da correção"
|
|
9
|
+
- "Fix que altera comportamento não relacionado ao bug"
|
|
10
|
+
on_reject: bf-03-fix
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Fix de Bug
|
|
14
|
+
|
|
15
|
+
Você é **Rodrigo React**. Leia seu `.agent.md`.
|
|
16
|
+
|
|
17
|
+
## Contexto disponível
|
|
18
|
+
|
|
19
|
+
- Diagnóstico do bug: saída do step bf-02-diagnostico
|
|
20
|
+
- Memória do squad: `_memory/memories.md`
|
|
21
|
+
|
|
22
|
+
## Regras do fix
|
|
23
|
+
|
|
24
|
+
1. **Mínimo viável** — corrija apenas o que está errado. Não refatore o que não foi pedido
|
|
25
|
+
2. **Teste primeiro** — escreva o teste que reproduz o bug antes de corrigir
|
|
26
|
+
3. **Não quebre outros comportamentos** — valide que o fix não cria regressão
|
|
27
|
+
4. **Explique o porquê** — adicione comentário se a causa raiz não for óbvia
|
|
28
|
+
|
|
29
|
+
## Estrutura de entrega
|
|
30
|
+
|
|
31
|
+
**1. Teste que reproduz o bug (antes do fix):**
|
|
32
|
+
```typescript
|
|
33
|
+
// Descreve o comportamento bugado
|
|
34
|
+
it('deve {comportamento correto} quando {condição do bug}', () => {
|
|
35
|
+
// arrange
|
|
36
|
+
// act
|
|
37
|
+
// assert — esse teste falha antes do fix
|
|
38
|
+
})
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**2. O fix em si:**
|
|
42
|
+
```
|
|
43
|
+
Arquivo: {caminho}
|
|
44
|
+
Mudança: {descrição do que foi alterado}
|
|
45
|
+
{código}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**3. Confirmação que o teste agora passa:**
|
|
49
|
+
```
|
|
50
|
+
✅ Teste: '{descrição}' — passa após o fix
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**4. Impacto zero em outros comportamentos:**
|
|
54
|
+
```
|
|
55
|
+
Verificado que não quebra:
|
|
56
|
+
- {comportamento 1}
|
|
57
|
+
- {comportamento 2}
|
|
58
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: bf-04-review
|
|
3
|
+
name: "Review do Fix"
|
|
4
|
+
agent: renata-revisao-fe
|
|
5
|
+
execution: inline
|
|
6
|
+
model_tier: powerful
|
|
7
|
+
gate: GATE-5
|
|
8
|
+
output_files:
|
|
9
|
+
- bugfix-notes.md
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Review do Fix
|
|
13
|
+
|
|
14
|
+
Você é **Renata Revisão**. Aplique seu framework de review focado em bug fixes.
|
|
15
|
+
|
|
16
|
+
## Verificações específicas para bug fix
|
|
17
|
+
|
|
18
|
+
- [ ] O fix resolve o problema descrito no diagnóstico?
|
|
19
|
+
- [ ] O fix é mínimo? (não toca código não relacionado)
|
|
20
|
+
- [ ] O teste que reproduzia o bug agora passa?
|
|
21
|
+
- [ ] Nenhuma regressão introduzida?
|
|
22
|
+
- [ ] Se a causa raiz não é óbvia, há comentário explicando?
|
|
23
|
+
|
|
24
|
+
## Gerar `docs/bugfix-notes.md`
|
|
25
|
+
|
|
26
|
+
```markdown
|
|
27
|
+
# Bugfix Notes
|
|
28
|
+
|
|
29
|
+
**Data:** {YYYY-MM-DD}
|
|
30
|
+
**Bug:** {descrição do bug}
|
|
31
|
+
|
|
32
|
+
## Causa Raiz
|
|
33
|
+
{diagnóstico confirmado}
|
|
34
|
+
|
|
35
|
+
## Fix Aplicado
|
|
36
|
+
{o que foi alterado e por quê}
|
|
37
|
+
|
|
38
|
+
## Teste de Regressão
|
|
39
|
+
{teste adicionado para prevenir regressão futura}
|
|
40
|
+
|
|
41
|
+
## Review
|
|
42
|
+
{Aprovado | Requer ajuste: {o que}}
|
|
43
|
+
```
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: cd-02-spec
|
|
3
|
+
name: "Spec do Componente"
|
|
4
|
+
agent: ursula-ui
|
|
5
|
+
execution: subagent
|
|
6
|
+
model_tier: powerful
|
|
7
|
+
output_files:
|
|
8
|
+
- component-spec.md
|
|
9
|
+
veto_conditions:
|
|
10
|
+
- "Spec sem todos os estados (default, hover, focus, disabled)"
|
|
11
|
+
- "Sem especificação de acessibilidade"
|
|
12
|
+
- "Sem tokens de design"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Spec do Componente
|
|
16
|
+
|
|
17
|
+
Você é **Úrsula UI**. Leia seu `.agent.md` para aplicar sua persona e princípios completos.
|
|
18
|
+
|
|
19
|
+
## Contexto disponível
|
|
20
|
+
|
|
21
|
+
- Componente a criar: `_memory/memories.md` (última entrada de sessão)
|
|
22
|
+
- Objetivo do squad: `squad.yaml → description`
|
|
23
|
+
|
|
24
|
+
## Documento a gerar
|
|
25
|
+
|
|
26
|
+
### `docs/component-spec.md`
|
|
27
|
+
|
|
28
|
+
```markdown
|
|
29
|
+
# Spec do Componente: {NomeDoComponente}
|
|
30
|
+
|
|
31
|
+
**Data:** {YYYY-MM-DD}
|
|
32
|
+
**Designer:** Úrsula UI
|
|
33
|
+
|
|
34
|
+
## Propósito
|
|
35
|
+
{para que serve, quando usar}
|
|
36
|
+
|
|
37
|
+
## Anatomia
|
|
38
|
+
{elementos internos — descreva em texto ou ASCII}
|
|
39
|
+
[Ícone opcional] [Label] [Elemento secundário opcional]
|
|
40
|
+
|
|
41
|
+
## Variantes
|
|
42
|
+
| Variante | Quando usar |
|
|
43
|
+
|----------|------------|
|
|
44
|
+
| default | estado padrão |
|
|
45
|
+
| ... | ... |
|
|
46
|
+
|
|
47
|
+
## Estados Visuais
|
|
48
|
+
| Estado | Aparência | Comportamento |
|
|
49
|
+
|--------|-----------|---------------|
|
|
50
|
+
| default | {...} | {...} |
|
|
51
|
+
| hover | {...} | transition {Xms} ease |
|
|
52
|
+
| focus | outline {X}px solid {cor}, offset {X}px | visível ao tab |
|
|
53
|
+
| active | {...} | scale 0.98 |
|
|
54
|
+
| disabled | opacity 0.5, cursor not-allowed | não responde a eventos |
|
|
55
|
+
| loading | spinner substituindo ícone | disabled state |
|
|
56
|
+
| error | borda vermelha | {...} |
|
|
57
|
+
|
|
58
|
+
## Tamanhos
|
|
59
|
+
| Tamanho | Height | Padding | Font |
|
|
60
|
+
|---------|--------|---------|------|
|
|
61
|
+
| sm | {X}px | ... | {X}px |
|
|
62
|
+
| md | {X}px | ... | {X}px (padrão) |
|
|
63
|
+
| lg | {X}px | ... | {X}px |
|
|
64
|
+
|
|
65
|
+
## Tokens de Design
|
|
66
|
+
| Propriedade | Token | Valor |
|
|
67
|
+
|-------------|-------|-------|
|
|
68
|
+
| cor fundo | color.{...} | #{hex} |
|
|
69
|
+
| cor texto | color.{...} | #{hex} |
|
|
70
|
+
| borda radius | radius.{...} | {X}px |
|
|
71
|
+
|
|
72
|
+
## Acessibilidade
|
|
73
|
+
- role: {button | link | input | ...}
|
|
74
|
+
- aria-label: {quando sem texto visível}
|
|
75
|
+
- keyboard: {Tab: foco, Enter/Space: ativar, Esc: fechar}
|
|
76
|
+
- Contraste: {ratio} — {AA | AAA}
|
|
77
|
+
- Focus visible: {obrigatório — nunca remover}
|
|
78
|
+
|
|
79
|
+
## Interface TypeScript
|
|
80
|
+
```typescript
|
|
81
|
+
interface {ComponentName}Props {
|
|
82
|
+
// obrigatórias
|
|
83
|
+
// opcionais
|
|
84
|
+
variant?: 'default' | '...'
|
|
85
|
+
size?: 'sm' | 'md' | 'lg'
|
|
86
|
+
disabled?: boolean
|
|
87
|
+
className?: string
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Comportamento Responsivo
|
|
92
|
+
| Breakpoint | Comportamento |
|
|
93
|
+
|-----------|---------------|
|
|
94
|
+
| mobile (< 768px) | {...} |
|
|
95
|
+
| desktop (≥ 768px) | {...} |
|
|
96
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qf-02-contexto
|
|
3
|
+
name: "Contexto Rápido"
|
|
4
|
+
execution: inline
|
|
5
|
+
model_tier: fast
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Contexto Rápido — Quick Fix
|
|
9
|
+
|
|
10
|
+
Colete o contexto mínimo necessário antes de executar.
|
|
11
|
+
|
|
12
|
+
Pergunte ao usuário:
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
O que precisa ser feito?
|
|
16
|
+
(seja específico — isso vai direto para o agent executor)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Com a resposta, apresente um resumo de validação e aguarde confirmação:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
CONTEXTO
|
|
23
|
+
|
|
24
|
+
Objetivo: {o que foi descrito}
|
|
25
|
+
Escopo: {o que está incluído}
|
|
26
|
+
Fora do escopo: {o que NÃO deve ser tocado}
|
|
27
|
+
Risco identificado: {se houver — senão "nenhum"}
|
|
28
|
+
|
|
29
|
+
Prosseguir com este escopo?
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Se confirmado → salve em `docs/quick-fix-contexto.md` e prossiga imediatamente.
|
|
33
|
+
|
|
34
|
+
Se ajuste → colete o novo escopo e salve.
|