nexus-core-v3 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/LICENSE +21 -0
- package/README.md +134 -0
- package/agents/README.md +133 -0
- package/agents/_protocol.md +107 -0
- package/agents/analyst.md +138 -0
- package/agents/architect.md +146 -0
- package/agents/data-engineer.md +170 -0
- package/agents/dev.md +134 -0
- package/agents/devops.md +141 -0
- package/agents/nexus-master.md +147 -0
- package/agents/pm.md +133 -0
- package/agents/po.md +138 -0
- package/agents/qa.md +192 -0
- package/agents/sm.md +122 -0
- package/agents/squad-creator.md +121 -0
- package/agents/ux-design-expert.md +165 -0
- package/artifact-manifest.json +903 -0
- package/bin/nexus.mjs +37 -0
- package/checklists/README.md +49 -0
- package/checklists/architect-checklist.md +47 -0
- package/checklists/change-checklist.md +61 -0
- package/checklists/db-predeploy-checklist.md +57 -0
- package/checklists/design-quality-checklist.md +57 -0
- package/checklists/discovery-checklist.md +36 -0
- package/checklists/foundation-checklist.md +39 -0
- package/checklists/launch-checklist.md +39 -0
- package/checklists/pm-checklist.md +48 -0
- package/checklists/po-master-checklist.md +64 -0
- package/checklists/reality-check-checklist.md +49 -0
- package/checklists/story-dod-checklist.md +52 -0
- package/checklists/story-draft-checklist.md +36 -0
- package/dist/bin/dashboard.html +279 -0
- package/dist/bin/nexus.mjs +20008 -0
- package/dist/constitution.yaml +76 -0
- package/knowledge/README.md +57 -0
- package/knowledge/architecture/architectural-styles-map.md +182 -0
- package/knowledge/architecture/design-patterns-gof.md +192 -0
- package/knowledge/architecture/distributed-patterns-cheatsheet.md +201 -0
- package/knowledge/architecture/saas-subscription-blueprint.md +355 -0
- package/knowledge/architecture/system-design-tradeoffs.md +231 -0
- package/knowledge/architecture/t3-fullstack-typesafe-stack.md +273 -0
- package/knowledge/copy/landing-copy-that-converts.md +168 -0
- package/knowledge/data/postgres-indexing-and-tuning.md +263 -0
- package/knowledge/data/schema-modeling-decisions.md +273 -0
- package/knowledge/data/supabase-rls-patterns.md +316 -0
- package/knowledge/data/zero-downtime-migrations.md +308 -0
- package/knowledge/devops/cicd-pipeline-best-practices.md +318 -0
- package/knowledge/devops/production-dockerfile.md +283 -0
- package/knowledge/devops/twelve-factor-app.md +398 -0
- package/knowledge/engineering/clean-code-principles.md +429 -0
- package/knowledge/engineering/effective-code-review.md +204 -0
- package/knowledge/engineering/testing-strategy-beyond-unit.md +307 -0
- package/knowledge/governance/risk-matrix.md +56 -0
- package/knowledge/integration/mcp-server-selection-matrix.md +235 -0
- package/knowledge/marketing/copy-que-converte.md +43 -0
- package/knowledge/marketing/funil-e-jornada.md +36 -0
- package/knowledge/negocios/proposta-vencedora.md +38 -0
- package/knowledge/negocios/roi-e-unit-economics.md +46 -0
- package/knowledge/pipeline/1-descobrir.md +26 -0
- package/knowledge/pipeline/2-estrategizar.md +26 -0
- package/knowledge/pipeline/3-estruturar.md +27 -0
- package/knowledge/pipeline/4-construir.md +27 -0
- package/knowledge/pipeline/5-endurecer.md +28 -0
- package/knowledge/pipeline/6-lancar.md +27 -0
- package/knowledge/pipeline/7-operar.md +27 -0
- package/knowledge/security/lgpd-conformidade-basica.md +35 -0
- package/knowledge/security/owasp-secure-coding-gates.md +220 -0
- package/knowledge/security/owasp-top10-threat-assessment.md +287 -0
- package/knowledge/security/threat-modeling-stride.md +34 -0
- package/knowledge/web-craft/a11y-audit-checklist.md +251 -0
- package/knowledge/web-craft/accessible-component-patterns.md +383 -0
- package/knowledge/web-craft/anti-ai-look.md +114 -0
- package/knowledge/web-craft/design-system-from-code.md +195 -0
- package/knowledge/web-craft/intrinsic-css-layout.md +420 -0
- package/knowledge/web-craft/style-cloning.md +185 -0
- package/knowledge/web-craft/visual-polish-review.md +183 -0
- package/package.json +55 -0
- package/runbooks/campanha-de-conteudo.md +36 -0
- package/runbooks/feature-em-projeto-existente.md +37 -0
- package/runbooks/mvp-startup.md +38 -0
- package/runbooks/resposta-a-incidente.md +37 -0
- package/squads/exemplo-conteudo/agents/editor-chefe.md +48 -0
- package/squads/exemplo-conteudo/agents/pesquisador.md +44 -0
- package/squads/exemplo-conteudo/agents/redator.md +45 -0
- package/squads/exemplo-conteudo/knowledge/estilo-editorial.md +21 -0
- package/squads/exemplo-conteudo/squad.yaml +19 -0
- package/squads/exemplo-conteudo/tasks/pesquisar-fontes.md +26 -0
- package/squads/exemplo-conteudo/tasks/planejar-pauta.md +27 -0
- package/squads/exemplo-conteudo/tasks/redigir-artigo.md +26 -0
- package/squads/exemplo-conteudo/tasks/revisar-artigo.md +27 -0
- package/squads/marketing/agents/analista.md +56 -0
- package/squads/marketing/agents/chefe-marketing.md +65 -0
- package/squads/marketing/agents/conteudo.md +55 -0
- package/squads/marketing/agents/copy.md +55 -0
- package/squads/marketing/agents/growth.md +56 -0
- package/squads/marketing/agents/social.md +55 -0
- package/squads/marketing/squad.yaml +17 -0
- package/squads/marketing/tasks/aprovar-campanha.md +43 -0
- package/squads/negocios/agents/chefe-negocios.md +65 -0
- package/squads/negocios/agents/financas-roi.md +55 -0
- package/squads/negocios/agents/suporte.md +55 -0
- package/squads/negocios/agents/vendas-proposta.md +56 -0
- package/squads/negocios/squad.yaml +17 -0
- package/squads/negocios/tasks/aprovar-proposta.md +40 -0
- package/squads/security/agents/appsec-reviewer.md +59 -0
- package/squads/security/agents/chefe-seguranca.md +65 -0
- package/squads/security/agents/compliance-auditor.md +60 -0
- package/squads/security/agents/threat-modeler.md +60 -0
- package/squads/security/squad.yaml +20 -0
- package/squads/security/tasks/aprovar-gate-seguranca.md +42 -0
- package/squads/security/tasks/emitir-parecer-conformidade.md +42 -0
- package/tasks/README.md +72 -0
- package/tasks/accessibility-wcag-checklist.md +69 -0
- package/tasks/advanced-elicitation.md +42 -0
- package/tasks/analyze-performance.md +54 -0
- package/tasks/analyze-project-structure.md +59 -0
- package/tasks/apply-qa-fixes.md +57 -0
- package/tasks/architect-analyze-impact.md +62 -0
- package/tasks/archive-squad.md +52 -0
- package/tasks/audit-codebase.md +53 -0
- package/tasks/build-component.md +61 -0
- package/tasks/calculate-roi.md +63 -0
- package/tasks/ci-cd-configuration.md +51 -0
- package/tasks/collect-visual-evidence.md +62 -0
- package/tasks/compose-molecule.md +57 -0
- package/tasks/consolidate-patterns.md +54 -0
- package/tasks/create-brownfield-prd.md +54 -0
- package/tasks/create-competitor-analysis.md +42 -0
- package/tasks/create-deep-research-prompt.md +62 -0
- package/tasks/create-doc.md +62 -0
- package/tasks/create-epic.md +49 -0
- package/tasks/create-front-end-spec.md +56 -0
- package/tasks/create-migration-plan.md +57 -0
- package/tasks/create-next-story.md +66 -0
- package/tasks/create-prd.md +53 -0
- package/tasks/create-project-brief.md +47 -0
- package/tasks/create-rls-policies.md +59 -0
- package/tasks/create-schema.md +57 -0
- package/tasks/create-service.md +55 -0
- package/tasks/create-squad.md +100 -0
- package/tasks/create-suite.md +62 -0
- package/tasks/db-apply-migration.md +56 -0
- package/tasks/db-domain-modeling.md +57 -0
- package/tasks/db-dry-run.md +50 -0
- package/tasks/db-env-check.md +57 -0
- package/tasks/db-load-csv.md +54 -0
- package/tasks/db-policy-apply.md +58 -0
- package/tasks/db-rollback.md +51 -0
- package/tasks/db-run-sql.md +61 -0
- package/tasks/db-seed.md +52 -0
- package/tasks/db-smoke-test.md +51 -0
- package/tasks/db-snapshot.md +48 -0
- package/tasks/db-verify-order.md +49 -0
- package/tasks/deliberate.md +46 -0
- package/tasks/design-indexes.md +59 -0
- package/tasks/dev-develop-story.md +61 -0
- package/tasks/document-project.md +59 -0
- package/tasks/execute-checklist.md +57 -0
- package/tasks/execute-epic-plan.md +52 -0
- package/tasks/execute-subtask.md +51 -0
- package/tasks/extend-pattern.md +63 -0
- package/tasks/extend-squad.md +60 -0
- package/tasks/extract-patterns.md +64 -0
- package/tasks/extract-tokens.md +59 -0
- package/tasks/facilitate-brainstorming-session.md +42 -0
- package/tasks/generate-ai-frontend-prompt.md +57 -0
- package/tasks/generate-documentation.md +60 -0
- package/tasks/generate-migration-strategy.md +57 -0
- package/tasks/generate-shock-report.md +56 -0
- package/tasks/mcp-management.md +66 -0
- package/tasks/orchestrate.md +50 -0
- package/tasks/perform-market-research.md +42 -0
- package/tasks/plan-create-context.md +57 -0
- package/tasks/plan-create-implementation.md +58 -0
- package/tasks/po-close-story.md +60 -0
- package/tasks/po-manage-story-backlog.md +59 -0
- package/tasks/po-pull-story.md +60 -0
- package/tasks/po-sync-story.md +59 -0
- package/tasks/pr-automation.md +50 -0
- package/tasks/pre-push-quality-gate.md +54 -0
- package/tasks/push.md +53 -0
- package/tasks/qa-browser-console-check.md +52 -0
- package/tasks/qa-create-fix-request.md +58 -0
- package/tasks/qa-evidence-requirements.md +55 -0
- package/tasks/qa-false-positive-detection.md +55 -0
- package/tasks/qa-fix-issues.md +55 -0
- package/tasks/qa-gate.md +53 -0
- package/tasks/qa-migration-validation.md +58 -0
- package/tasks/qa-nfr-assess.md +45 -0
- package/tasks/qa-review-story.md +56 -0
- package/tasks/qa-risk-profile.md +45 -0
- package/tasks/qa-security-checklist.md +64 -0
- package/tasks/qa-test-design.md +47 -0
- package/tasks/qa-trace-requirements.md +48 -0
- package/tasks/release-management.md +53 -0
- package/tasks/repository-cleanup.md +61 -0
- package/tasks/route.md +44 -0
- package/tasks/run-tests.md +50 -0
- package/tasks/security-audit.md +54 -0
- package/tasks/setup-database.md +60 -0
- package/tasks/setup-design-system.md +60 -0
- package/tasks/shard-doc.md +60 -0
- package/tasks/spec-assess-complexity.md +55 -0
- package/tasks/spec-critique.md +64 -0
- package/tasks/spec-gather-requirements.md +48 -0
- package/tasks/spec-research-dependencies.md +42 -0
- package/tasks/spec-write-spec.md +50 -0
- package/tasks/test-as-user.md +52 -0
- package/tasks/ux-create-wireframe.md +54 -0
- package/tasks/ux-user-research.md +55 -0
- package/tasks/validate-next-story.md +61 -0
- package/tasks/validate-squad.md +55 -0
- package/tasks/verify-subtask.md +52 -0
- package/tasks/version-management.md +45 -0
- package/templates/README.md +47 -0
- package/templates/architecture-tmpl.md +115 -0
- package/templates/competitor-analysis-tmpl.md +87 -0
- package/templates/epic-tmpl.md +83 -0
- package/templates/front-end-spec-tmpl.md +110 -0
- package/templates/market-research-tmpl.md +98 -0
- package/templates/migration-plan-tmpl.md +92 -0
- package/templates/prd-tmpl.md +95 -0
- package/templates/project-brief-tmpl.md +100 -0
- package/templates/qa-verdict-tmpl.md +73 -0
- package/templates/rls-policies-tmpl.md +93 -0
- package/templates/schema-design-tmpl.md +107 -0
- package/templates/spec-tmpl.md +88 -0
- package/templates/squad/agent-dna-tmpl.md +72 -0
- package/templates/squad/chief-dna-tmpl.md +98 -0
- package/templates/squad/squad-task-tmpl.md +50 -0
- package/templates/squad/squad-yaml-tmpl.md +47 -0
- package/templates/story-tmpl.md +63 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-review-story
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Review completo de uma story com decisão de gate
|
|
5
|
+
inputs: [story]
|
|
6
|
+
outputs: [seção "QA Results" da story, decisão de gate, fix-request (se FAIL/CONCERNS)]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Review completo de uma story com decisão de gate
|
|
12
|
+
|
|
13
|
+
**Objetivo:** auditar uma story marcada `Ready for Review` em todos os eixos de risco e emitir uma
|
|
14
|
+
decisão de gate fundamentada — escrevendo SOMENTE a seção "QA Results" da story.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A story existe e está em `Ready for Review`. Se estiver em `Draft`/`InProgress`, **pare** e
|
|
18
|
+
reporte — não reviso o que o @dev ainda não declarou pronto.
|
|
19
|
+
- A story tem ACs e seção de Testing. Sem o contrato, não há barra a julgar: devolvo ao @sm/@po.
|
|
20
|
+
|
|
21
|
+
## Passos
|
|
22
|
+
|
|
23
|
+
1. **Entendo o contrato.** Leio a story COMPLETA — ACs, escopo, Dev Notes, Testing, File List. Defino
|
|
24
|
+
o que "pronto" significa AQUI antes de julgar qualquer linha.
|
|
25
|
+
2. **Perfilo o risco** (`qa-risk-profile`). Mapeio probabilidade × impacto por área para decidir onde
|
|
26
|
+
mergulho fundo e onde sou concisa. Profundidade segue o sinal de risco, não o humor.
|
|
27
|
+
3. **Scan automatizado PRIMEIRO** (`*code-review`, CodeRabbit). Roda antes da análise manual,
|
|
28
|
+
self-healing de no máximo 2 iterações para CRITICAL/HIGH. Não começo o manual antes do scan fechar.
|
|
29
|
+
4. **Caço o que falha em produção**, com profundidade proporcional ao risco: segurança
|
|
30
|
+
(`qa-security-checklist`), NFRs (`qa-nfr-assess`), migrations (`qa-migration-validation`), console
|
|
31
|
+
do browser (`qa-browser-console-check`).
|
|
32
|
+
5. **Rastreio requisito → teste** (`qa-trace-requirements`). Toda AC ganha seu Given-When-Then. AC
|
|
33
|
+
órfã vira gap registrado, com severidade.
|
|
34
|
+
6. **Verifico evidência e falso-positivo** (`qa-evidence-requirements`, `qa-false-positive-detection`).
|
|
35
|
+
"Corrigido" sem teste de regressão é hipótese, não fato.
|
|
36
|
+
7. **Emito o gate** (`qa-gate`): PASS / CONCERNS / FAIL / WAIVED, com fundamentação rastreável a AC,
|
|
37
|
+
NFR ou CON. Escrevo a decisão na seção "QA Results" da story — nada mais.
|
|
38
|
+
8. **Roteio a saída.** FAIL/CONCERNS → gero o fix-request (`qa-create-fix-request`) e devolvo ao @dev
|
|
39
|
+
com o defeito preciso. PASS e pronto pra subir → @devops. Nunca subo nada eu mesma.
|
|
40
|
+
|
|
41
|
+
## Critério de pronto (DoD)
|
|
42
|
+
|
|
43
|
+
- [ ] Story lida por inteiro e contrato ("pronto") definido antes do julgamento
|
|
44
|
+
- [ ] Scan automatizado rodado e fechado antes da análise manual
|
|
45
|
+
- [ ] Todos os eixos de risco cobertos com profundidade proporcional ao risco
|
|
46
|
+
- [ ] Toda AC rastreada a teste; gaps registrados com severidade
|
|
47
|
+
- [ ] Decisão de gate emitida com fundamentação rastreável
|
|
48
|
+
- [ ] Apenas a seção "QA Results" foi escrita — nenhuma outra seção tocada
|
|
49
|
+
- [ ] Saída roteada: @dev (fix-request) ou @devops (subida)
|
|
50
|
+
|
|
51
|
+
## Falha / recuperação
|
|
52
|
+
|
|
53
|
+
- **Scan automatizado mantém CRITICAL após 2 iterações** → registro e o gate não pode ser PASS.
|
|
54
|
+
- **Story sem ACs ou sem Testing** → HALT, devolvo ao @sm/@po; não invento o contrato.
|
|
55
|
+
- **Evidência ausente para um "funciona"** → CONCERNS no mínimo; não aprovo no escuro.
|
|
56
|
+
- **Achado exige correção de código** → gero fix-request e delego ao @dev; não conserto eu mesma.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-risk-profile
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Gerar a matriz de risco da story
|
|
5
|
+
inputs: [story]
|
|
6
|
+
outputs: [matriz de risco (probabilidade × impacto), áreas priorizadas para review]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Gerar a matriz de risco da story
|
|
12
|
+
|
|
13
|
+
**Objetivo:** mapear onde a story pode falhar em produção — por probabilidade × impacto — para que o
|
|
14
|
+
review mergulhe fundo onde o risco aponta e seja conciso onde não aponta.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A story existe e tem ACs e escopo legíveis. Sem escopo, **pare**: não há área a perfilar.
|
|
18
|
+
|
|
19
|
+
## Passos
|
|
20
|
+
|
|
21
|
+
1. **Decomponho a story em áreas de mudança** (módulos, fluxos, dados, integrações). Cada área é uma
|
|
22
|
+
linha da matriz.
|
|
23
|
+
2. **Pontuo probabilidade** de cada área (1=raro … 5=quase certo) com base em sinais concretos:
|
|
24
|
+
complexidade, novidade da tecnologia, acoplamento, histórico de bugs na área.
|
|
25
|
+
3. **Pontuo impacto** de cada área (1=cosmético … 5=catastrófico): dado sensível, caminho crítico,
|
|
26
|
+
irreversibilidade, alcance de usuários afetados.
|
|
27
|
+
4. **Calculo o score** (probabilidade × impacto) e classifico: ALTO (>=12), MÉDIO (6–11), BAIXO (<6).
|
|
28
|
+
5. **Priorizo o escrutínio.** Áreas ALTO recebem review profundo (segurança, NFR, regressão); BAIXO
|
|
29
|
+
recebe checagem proporcional. Caminho crítico e dado sensível nunca caem para checagem trivial.
|
|
30
|
+
6. **Registro a matriz** como insumo para `qa-review-story` e `qa-gate`. Cada score rastreia à AC/área
|
|
31
|
+
correspondente — sem inventar risco fora do escopo da story.
|
|
32
|
+
|
|
33
|
+
## Critério de pronto (DoD)
|
|
34
|
+
|
|
35
|
+
- [ ] Toda área de mudança da story tem uma linha na matriz
|
|
36
|
+
- [ ] Probabilidade e impacto pontuados com sinal concreto, não palpite
|
|
37
|
+
- [ ] Score calculado e classificado (ALTO/MÉDIO/BAIXO)
|
|
38
|
+
- [ ] Áreas priorizadas para a profundidade do review
|
|
39
|
+
- [ ] Cada risco rastreia a uma AC/área da story
|
|
40
|
+
|
|
41
|
+
## Falha / recuperação
|
|
42
|
+
|
|
43
|
+
- **Escopo da story ambíguo demais para perfilar** → registro a lacuna e devolvo ao @sm/@po.
|
|
44
|
+
- **Área de alto risco sem AC que a cubra** → registro como gap de cobertura para o gate, não invento
|
|
45
|
+
o requisito.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-security-checklist
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Scan de segurança de 8 pontos
|
|
5
|
+
inputs: [story, diff]
|
|
6
|
+
outputs: [achados de segurança rastreados, entrada na seção QA Results]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Scan de segurança de 8 pontos
|
|
12
|
+
|
|
13
|
+
**Objetivo:** varrer a mudança da story contra as 8 classes de vulnerabilidade mais comuns e
|
|
14
|
+
registrar cada achado com severidade rastreável a uma AC/NFR — antes que vire incidente em produção.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A story existe e tem ACs. Se não houver contrato a rastrear, **pare** — eu não invento critério de
|
|
18
|
+
segurança fora da story/spec.
|
|
19
|
+
- O `diff` da mudança está disponível (commit local do @dev). Sem código para inspecionar, não há scan.
|
|
20
|
+
- O scan automatizado (`*code-review`) já rodou. Eu não refaço à mão o que a máquina pega de graça.
|
|
21
|
+
|
|
22
|
+
## Passos
|
|
23
|
+
|
|
24
|
+
1. **Defina o perímetro de risco.** Liste o que a story toca: entrada de usuário, autenticação,
|
|
25
|
+
dados sensíveis, chamadas externas. O eixo de maior risco recebe o mergulho mais profundo.
|
|
26
|
+
2. **Percorra os 8 pontos**, marcando cada um PASS / CONCERNS / FAIL com evidência (linha/arquivo):
|
|
27
|
+
a. **Injeção** — SQL/NoSQL/command: toda query usa parâmetro/prepared statement? Nenhuma
|
|
28
|
+
concatenação de input cru.
|
|
29
|
+
b. **XSS** — todo dado renderizado é escapado/sanitizado? Nenhum `dangerouslySetInnerHTML` sem
|
|
30
|
+
sanitização.
|
|
31
|
+
c. **Secrets hardcoded** — nenhuma chave/token/senha no código ou em log. Tudo via env/cofre.
|
|
32
|
+
d. **AuthN/AuthZ** — o endpoint verifica identidade E permissão? Nenhuma rota sensível sem guarda.
|
|
33
|
+
e. **Validação de input** — todo input é validado em tipo/tamanho/range no servidor (não só no
|
|
34
|
+
cliente).
|
|
35
|
+
f. **Exposição de dado sensível** — nenhum PII/credencial em resposta, log ou mensagem de erro.
|
|
36
|
+
g. **Dependências** — nenhuma lib com CVE conhecida introduzida pela mudança.
|
|
37
|
+
h. **Configuração insegura** — CORS, headers, defaults permissivos, debug ligado em prod.
|
|
38
|
+
3. **Rastreie cada achado** a uma AC ou NFR. Achado sem âncora no contrato vira nota, não bloqueio —
|
|
39
|
+
mas exposição de secret/PII é FAIL independentemente, por ser risco real.
|
|
40
|
+
4. **Atribua severidade** por probabilidade × impacto: CRITICAL/HIGH bloqueiam; MEDIUM/LOW viram
|
|
41
|
+
CONCERNS documentado.
|
|
42
|
+
5. **Escreva o resultado** SOMENTE na seção "QA Results" da story: pontos avaliados, achados, severidade
|
|
43
|
+
e evidência. Não toco em mais nada da story.
|
|
44
|
+
6. **Roteie a saída.** Achado CRITICAL/HIGH → `*create-fix-request` para o @dev com o defeito preciso.
|
|
45
|
+
Limpo → alimenta o `*gate`.
|
|
46
|
+
|
|
47
|
+
## Critério de pronto (DoD)
|
|
48
|
+
|
|
49
|
+
- [ ] Os 8 pontos avaliados, cada um com veredito e evidência
|
|
50
|
+
- [ ] Cada achado rastreia a uma AC/NFR ou é risco real autoevidente (secret/PII)
|
|
51
|
+
- [ ] Severidade atribuída por probabilidade × impacto
|
|
52
|
+
- [ ] Resultado escrito só na seção QA Results
|
|
53
|
+
- [ ] CRITICAL/HIGH roteado ao @dev via fix-request
|
|
54
|
+
|
|
55
|
+
## Falha / recuperação
|
|
56
|
+
|
|
57
|
+
- **Diff indisponível ou parcial** → HALT, reporto que não posso assegurar segurança sem ver o código
|
|
58
|
+
completo. Não aprovo no escuro.
|
|
59
|
+
- **Achado CRITICAL (secret/injeção)** → FAIL imediato, fix-request ao @dev. Não dou PASS por pressão
|
|
60
|
+
de prazo.
|
|
61
|
+
- **A correção exige tocar infra/config externa** (CORS, secret store) → delego ao @devops; eu aponto,
|
|
62
|
+
ele opera o ambiente.
|
|
63
|
+
- **A mudança não tem teste de segurança para o caminho corrigido** → registro como gap no gate; risco
|
|
64
|
+
sem regressão é hipótese, não fato.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-test-design
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Desenhar os cenários de teste da story
|
|
5
|
+
inputs: [story]
|
|
6
|
+
outputs: [conjunto de cenários de teste em Given-When-Then, por nível e prioridade]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Desenhar os cenários de teste da story
|
|
12
|
+
|
|
13
|
+
**Objetivo:** produzir o conjunto de cenários que prova cada AC e cobre os caminhos de falha — em
|
|
14
|
+
Given-When-Then, priorizados por risco e distribuídos pelo nível certo (unit/integração/e2e).
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A story existe, com ACs e seção de Testing. Sem ACs, **pare**: não há o que provar.
|
|
18
|
+
- O risco já foi perfilado (`qa-risk-profile`), para priorizar onde a cobertura precisa ser densa.
|
|
19
|
+
|
|
20
|
+
## Passos
|
|
21
|
+
|
|
22
|
+
1. **Mapeio um cenário por AC**, no mínimo, em Given-When-Then. Caminho feliz é o piso, não o teto.
|
|
23
|
+
2. **Adiciono cenários de borda e falha** onde o risco aponta: input inválido, limite, concorrência,
|
|
24
|
+
estado parcial, erro de dependência. Áreas ALTO recebem mais cenários; BAIXO recebe o proporcional.
|
|
25
|
+
3. **Escolho o nível certo** para cada cenário (REUSE > ADAPT > CREATE de fixtures): unit para lógica
|
|
26
|
+
pura, integração para contratos entre módulos, e2e só onde o fluxo do usuário exige. Não testo no
|
|
27
|
+
nível caro o que o barato cobre.
|
|
28
|
+
4. **Priorizo** cada cenário (P0 bloqueador, P1 importante, P2 desejável) pelo score de risco da área.
|
|
29
|
+
5. **Verifico cobertura:** toda AC tem ao menos um cenário; nenhum cenário inventa requisito fora da
|
|
30
|
+
story. Lacunas viram gap registrado para o gate.
|
|
31
|
+
6. **Entrego o desenho** como insumo para `create-suite` (implementação da suíte) e para
|
|
32
|
+
`qa-trace-requirements` (rastreabilidade).
|
|
33
|
+
|
|
34
|
+
## Critério de pronto (DoD)
|
|
35
|
+
|
|
36
|
+
- [ ] Cada AC coberta por pelo menos um cenário em Given-When-Then
|
|
37
|
+
- [ ] Cenários de borda/falha presentes onde o risco aponta
|
|
38
|
+
- [ ] Cada cenário no nível certo (unit/integração/e2e), sem redundância cara
|
|
39
|
+
- [ ] Cenários priorizados (P0/P1/P2) pelo risco
|
|
40
|
+
- [ ] Nenhum cenário inventa requisito fora da story; gaps registrados
|
|
41
|
+
|
|
42
|
+
## Falha / recuperação
|
|
43
|
+
|
|
44
|
+
- **AC ambígua/intestável** → registro a lacuna e devolvo ao @sm/@po; não desenho teste para um
|
|
45
|
+
requisito que não existe.
|
|
46
|
+
- **Cobertura impossível no nível disponível** → registro como CONCERNS e proponho o nível necessário
|
|
47
|
+
ao gate.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-trace-requirements
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Mapear cada AC para teste (rastreabilidade)
|
|
5
|
+
inputs: [story]
|
|
6
|
+
outputs: [matriz de rastreabilidade AC→teste, lista de gaps com severidade]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Mapear cada AC para teste (rastreabilidade)
|
|
12
|
+
|
|
13
|
+
**Objetivo:** provar que toda AC da story tem teste que a verifica em Given-When-Then — e nomear cada
|
|
14
|
+
buraco (AC sem teste) com severidade, em vez de fechar os olhos.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A story existe, com ACs explícitas. Sem ACs, **pare**: não há requisito a rastrear.
|
|
18
|
+
- Existem testes (na File List / suíte) a mapear. Se não há suíte, o resultado é uma matriz cheia de
|
|
19
|
+
gaps — e isso já é o achado.
|
|
20
|
+
|
|
21
|
+
## Passos
|
|
22
|
+
|
|
23
|
+
1. **Listo cada AC** da story como linha da matriz de rastreabilidade.
|
|
24
|
+
2. **Para cada AC, localizo o(s) teste(s)** que a verificam e descrevo o vínculo em Given-When-Then
|
|
25
|
+
(dado o estado, quando a ação, então o resultado esperado que prova a AC).
|
|
26
|
+
3. **Marco a cobertura** por AC: COBERTA (teste verde rastreado), PARCIAL (só caminho feliz, falta
|
|
27
|
+
borda/falha), ÓRFÃ (nenhum teste).
|
|
28
|
+
4. **Registro cada gap** (PARCIAL/ÓRFÃ) com severidade derivada do risco da AC: ÓRFÃ em área ALTO é
|
|
29
|
+
bloqueador; PARCIAL em área BAIXO é dívida.
|
|
30
|
+
5. **Confirmo o inverso:** todo teste rastreia a alguma AC. Teste que não prova nada da story é ruído
|
|
31
|
+
— registro, mas não inflo a cobertura com ele.
|
|
32
|
+
6. **Entrego a matriz** como insumo direto para `qa-gate` — a rastreabilidade é o que separa "achei
|
|
33
|
+
bonito" de "provei que atende".
|
|
34
|
+
|
|
35
|
+
## Critério de pronto (DoD)
|
|
36
|
+
|
|
37
|
+
- [ ] Toda AC é uma linha da matriz com status de cobertura
|
|
38
|
+
- [ ] Cada vínculo AC→teste descrito em Given-When-Then
|
|
39
|
+
- [ ] Todo gap (PARCIAL/ÓRFÃ) registrado com severidade derivada do risco
|
|
40
|
+
- [ ] Inverso confirmado: testes sem AC identificados
|
|
41
|
+
- [ ] Matriz entregue como insumo para o gate
|
|
42
|
+
|
|
43
|
+
## Falha / recuperação
|
|
44
|
+
|
|
45
|
+
- **AC intestável como escrita** → registro a lacuna e devolvo ao @sm/@po; não invento o teste de um
|
|
46
|
+
requisito ambíguo.
|
|
47
|
+
- **AC órfã em área de alto risco** → marco como bloqueador para o gate (não pode ser PASS) e roteio
|
|
48
|
+
fix-request ao @dev para criar o teste faltante.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: release-management
|
|
3
|
+
agent: devops
|
|
4
|
+
title: Criar release versionada
|
|
5
|
+
inputs: [versão alvo, diff desde a última tag]
|
|
6
|
+
outputs: [changelog, tag, GitHub release, caminho de rollback]
|
|
7
|
+
elicit: true
|
|
8
|
+
modes: [interactive]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Criar release versionada
|
|
12
|
+
|
|
13
|
+
**Objetivo:** publicar uma release versionada — changelog gerado, tag semântica e GitHub release —
|
|
14
|
+
após confirmação humana, com o caminho de reversão claro. Release é exclusiva do @devops.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A branch base (`main`/`master`) está verde: gate de qualidade passou e está sincronizada com o
|
|
18
|
+
remoto. Se há trabalho não auditado, **pare** e rode o `pre-push-quality-gate`.
|
|
19
|
+
- A versão alvo respeita SemVer e foi confirmada via `*version-check` (ver `version-management`). Sem
|
|
20
|
+
bump confirmado, **pare**.
|
|
21
|
+
|
|
22
|
+
## Passos
|
|
23
|
+
|
|
24
|
+
1. **Detecte o contexto do repositório** — remoto, branch base e a última tag (`git describe --tags`).
|
|
25
|
+
Nunca assuma repo fixo.
|
|
26
|
+
2. **Reúna o diff desde a última tag** (`git log {ultima-tag}..HEAD`) — a fonte do changelog. Tudo
|
|
27
|
+
rastreia a commits/stories reais; sem invenção de itens de release.
|
|
28
|
+
3. **Gere o changelog** agrupando por tipo (feat, fix, breaking) a partir dos conventional commits.
|
|
29
|
+
4. **Confirme o bump semântico.** MAJOR se há breaking change no diff; MINOR para feature compatível;
|
|
30
|
+
PATCH para fix. Se a versão alvo não bate com o diff, sinalize a divergência.
|
|
31
|
+
5. **Revele a release proposta.** Mostre versão, changelog e a tag a criar.
|
|
32
|
+
6. **[ELICITAÇÃO] Peça o "ok" explícito.** Release é irreversível na prática — exige confirmação humana.
|
|
33
|
+
7. **Crie a tag** (`git tag -a v{versão}`) e a **GitHub release** (`gh release create`) com o changelog
|
|
34
|
+
como corpo. Empurre a tag para o remoto.
|
|
35
|
+
8. **Reporte e deixe o rollback claro.** Devolvo a URL da release e o caminho de reversão (deletar tag
|
|
36
|
+
local/remota e a release pelo `gh` caso publicada por engano).
|
|
37
|
+
|
|
38
|
+
## Critério de pronto (DoD)
|
|
39
|
+
|
|
40
|
+
- [ ] Última tag detectada e diff coletado dinamicamente
|
|
41
|
+
- [ ] Changelog gerado a partir dos commits reais (sem invenção)
|
|
42
|
+
- [ ] Bump semântico coerente com o diff e confirmado
|
|
43
|
+
- [ ] Confirmação humana obtida antes de tagear/publicar
|
|
44
|
+
- [ ] Tag criada, release publicada e URL reportada com caminho de rollback
|
|
45
|
+
|
|
46
|
+
## Falha / recuperação
|
|
47
|
+
|
|
48
|
+
- **Bump diverge do diff** (ex.: PATCH com breaking change) → paro e re-confirmo a versão; SemVer é lei.
|
|
49
|
+
- **Branch base não está verde** → não faço release; volto ao gate.
|
|
50
|
+
- **Usuário não confirma** → não crio tag nem release.
|
|
51
|
+
- **Tag já existe** → não sobrescrevo; reporto o conflito e proponho a próxima versão.
|
|
52
|
+
- **Release publicada por engano** → executo o rollback documentado (deletar tag remota + release),
|
|
53
|
+
com novo "ok" do usuário.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: repository-cleanup
|
|
3
|
+
agent: devops
|
|
4
|
+
title: Limpar o repositório — branches e artefatos obsoletos
|
|
5
|
+
inputs: [repositório, objetivo de limpeza]
|
|
6
|
+
outputs: [branches removidas, artefatos removidos, relatório de limpeza]
|
|
7
|
+
elicit: true
|
|
8
|
+
modes: [interactive]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Limpar o repositório — branches e artefatos obsoletos
|
|
12
|
+
|
|
13
|
+
**Objetivo:** identificar branches já mergeadas, branches velhas e artefatos obsoletos, apresentá-los
|
|
14
|
+
ao usuário e remover apenas o que ele aprovar — mantendo o repositório limpo sem nunca apagar trabalho
|
|
15
|
+
vivo.
|
|
16
|
+
|
|
17
|
+
**Pré-condições:**
|
|
18
|
+
- O diretório é um repositório git com remoto detectável. Se for greenfield (sem git), **pare** e
|
|
19
|
+
recomende `*environment-bootstrap` antes de qualquer limpeza.
|
|
20
|
+
- A árvore de trabalho está limpa (sem mudanças não-commitadas que possam se perder). Se houver
|
|
21
|
+
pendências, **pare** e peça para o @dev commitar ou stashar antes.
|
|
22
|
+
|
|
23
|
+
## Passos
|
|
24
|
+
|
|
25
|
+
1. **Detecto o contexto do repositório.** Remoto, branch atual e branch protegida (`main`/`master`).
|
|
26
|
+
Nunca assumo um repo fixo — detecto dinamicamente.
|
|
27
|
+
2. **Atualizo o estado remoto** com `git fetch --all --prune`, para que branches já deletadas no
|
|
28
|
+
remoto não apareçam como vivas localmente.
|
|
29
|
+
3. **Classifico os candidatos** em três grupos, sem apagar nada ainda:
|
|
30
|
+
a. **branches locais já mergeadas** na protegida (`git branch --merged`), exceto a protegida e a atual;
|
|
31
|
+
b. **branches stale** (sem commits há um limite que confirmo com o usuário, ex.: 30 dias);
|
|
32
|
+
c. **artefatos obsoletos** (build, caches, logs) que rastreiam a uma story/objetivo de limpeza —
|
|
33
|
+
nunca arquivos de escopo desconhecido.
|
|
34
|
+
4. **PONTO DE ELICITAÇÃO — apresento a lista e espero o "ok".** Mostro cada candidato com o motivo
|
|
35
|
+
(mergeada / stale / artefato) e o destino (local, remoto ou ambos). **Não removo nada sem a
|
|
36
|
+
aprovação explícita do usuário** — delete é destrutivo e pede confirmação humana.
|
|
37
|
+
5. **Removo só o aprovado.** Branch local: `git branch -d` (nunca `-D` sem aprovação extra, pois `-d`
|
|
38
|
+
recusa branch não-mergeada como salvaguarda). Branch remota: `git push origin --delete {branch}` —
|
|
39
|
+
essa é operação de remoto, **exclusiva minha** (@devops). Artefatos: removo do disco e, se
|
|
40
|
+
versionados por engano, do índice.
|
|
41
|
+
6. **NUNCA toco na protegida.** `main`/`master` jamais entra na lista de delete — nem local, nem remota.
|
|
42
|
+
7. **Reporto e deixo o rollback claro.** Listo o que foi removido. Branch local recém-deletada é
|
|
43
|
+
recuperável pelo `reflog`; informo o SHA de cada branch removida para que o usuário possa
|
|
44
|
+
restaurá-la (`git branch {nome} {sha}`) se precisar.
|
|
45
|
+
|
|
46
|
+
## Critério de pronto (DoD)
|
|
47
|
+
|
|
48
|
+
- [ ] `git fetch --prune` executado; estado remoto sincronizado
|
|
49
|
+
- [ ] Candidatos classificados (mergeadas / stale / artefatos) e apresentados ao usuário
|
|
50
|
+
- [ ] Apenas itens explicitamente aprovados foram removidos
|
|
51
|
+
- [ ] Branch protegida (`main`/`master`) intocada
|
|
52
|
+
- [ ] Relatório de limpeza entregue com os SHAs para rollback
|
|
53
|
+
|
|
54
|
+
## Falha / recuperação
|
|
55
|
+
|
|
56
|
+
- **Usuário não aprova nenhum item** → encerro sem remover nada; limpeza é opcional, não obrigatória.
|
|
57
|
+
- **Branch parece mergeada mas o `-d` recusa** → respeito a salvaguarda, sinalizo ao usuário e só uso
|
|
58
|
+
`-D` com aprovação explícita extra — não forço delete de trabalho não-integrado.
|
|
59
|
+
- **Delete de branch remota falha** (permissão/branch protegida no GitHub) → reporto o erro, não
|
|
60
|
+
insisto, e deixo a branch como estava.
|
|
61
|
+
- **Item removido por engano** → recupero via `reflog`/SHA registrado no relatório antes de encerrar.
|
package/tasks/route.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: route
|
|
3
|
+
agent: nexus-master
|
|
4
|
+
title: Rotear — despachar uma tarefa de dono único
|
|
5
|
+
inputs: [tarefa]
|
|
6
|
+
outputs: [tarefa despachada ao agente dono]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Rotear — despachar uma tarefa de dono único
|
|
12
|
+
|
|
13
|
+
**Objetivo:** entregar uma tarefa de dono único ao agente certo, sem decompor nem deliberar — quando
|
|
14
|
+
o trabalho é claramente de uma lane só.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A tarefa tem **um dono óbvio** (ex.: "valida essa story" → @po; "desenha o schema" →
|
|
18
|
+
@data-engineer). Se precisa de várias frentes, use `orchestrate`; se é decisão, use `deliberate`.
|
|
19
|
+
|
|
20
|
+
## Passos
|
|
21
|
+
|
|
22
|
+
1. **Identifico o dono** pela matriz de autoridade: implementação→@dev, teste/gate→@qa,
|
|
23
|
+
arquitetura→@architect, PRD/epic→@pm, criar story→@sm, validar story→@po, banco→@data-engineer,
|
|
24
|
+
UX→@ux-design-expert, pesquisa→@analyst, git push/PR/release/MCP→@devops (exclusivo).
|
|
25
|
+
2. **Verifico a autoridade.** Operação exclusiva (subida, PR, MCP) **sempre** vai pro @devops — nem eu
|
|
26
|
+
nem ninguém fura isso.
|
|
27
|
+
3. **Despacho com contexto mínimo suficiente:** o quê, o critério de pronto, e os links que o dono
|
|
28
|
+
precisa. Não despejo contexto irrelevante.
|
|
29
|
+
4. **Acompanho o handoff.** Quando o dono entrega, roteio o próximo passo da cadeia (ex.: @sm cria →
|
|
30
|
+
@po valida → @dev implementa → @qa gate → @devops sobe).
|
|
31
|
+
|
|
32
|
+
## Critério de pronto (DoD)
|
|
33
|
+
|
|
34
|
+
- [ ] Dono correto identificado pela matriz de autoridade
|
|
35
|
+
- [ ] Operação exclusiva roteada ao @devops (nunca contornada)
|
|
36
|
+
- [ ] Tarefa despachada com critério de pronto e contexto mínimo
|
|
37
|
+
- [ ] Próximo passo da cadeia roteado no handoff
|
|
38
|
+
|
|
39
|
+
## Falha / recuperação
|
|
40
|
+
|
|
41
|
+
- **A tarefa não tem dono único** → não é roteamento; troco para `orchestrate` (várias frentes) ou
|
|
42
|
+
`deliberate` (decisão).
|
|
43
|
+
- **Dois agentes parecem donos** → eu medeio: defino a fronteira (ex.: @architect decide a tecnologia
|
|
44
|
+
de banco, @data-engineer implementa o schema) e roteio cada parte ao seu dono.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: run-tests
|
|
3
|
+
agent: dev
|
|
4
|
+
title: Rodar lint + toda a suíte de testes
|
|
5
|
+
inputs: [projeto/escopo opcional]
|
|
6
|
+
outputs: [resultado de lint, resultado da suíte, veredito verde/vermelho]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [yolo, interactive]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Rodar lint + toda a suíte de testes
|
|
12
|
+
|
|
13
|
+
**Objetivo:** executar a validação completa do projeto — lint e a suíte inteira de testes — e emitir
|
|
14
|
+
um veredito honesto de verde/vermelho, sem pular nada "por eficiência".
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- As dependências do projeto estão instaladas e os scripts de lint/teste estão definidos. Se um
|
|
18
|
+
script não existe, **pare** e reporto — não invento comando de teste.
|
|
19
|
+
|
|
20
|
+
## Passos
|
|
21
|
+
|
|
22
|
+
1. **Identifico os comandos do projeto** (lint, typecheck, testes) a partir da configuração do
|
|
23
|
+
projeto. Não presumo o runner: leio o que o projeto declara.
|
|
24
|
+
2. **Rodo o lint.** Registro o resultado. Limpo → sigo. Com erros → registro cada erro (eles contam
|
|
25
|
+
no veredito final).
|
|
26
|
+
3. **Rodo o typecheck** (se o projeto tem). 0 erros → sigo. Caso contrário, registro.
|
|
27
|
+
4. **Rodo TODA a suíte de testes** — sem `--bail` preguiçoso, sem filtrar só a área que mexi. Regressão
|
|
28
|
+
se pega rodando o conjunto inteiro. Capturo aprovados, falhos e pulados.
|
|
29
|
+
5. **Emito o veredito:**
|
|
30
|
+
- **Verde:** lint limpo, typecheck 0, suíte 100% passando (sem pulados silenciosos).
|
|
31
|
+
- **Vermelho:** qualquer lint/typecheck com erro ou qualquer teste falhando — listo exatamente o
|
|
32
|
+
que quebrou, com o arquivo e a mensagem.
|
|
33
|
+
6. **Reporto o resultado** de forma rastreável. Se vermelho e estou num loop de implementação, volto
|
|
34
|
+
ao código; não marco nada `[x]` com a suíte vermelha.
|
|
35
|
+
|
|
36
|
+
## Critério de pronto (DoD)
|
|
37
|
+
|
|
38
|
+
- [ ] Lint executado, resultado registrado
|
|
39
|
+
- [ ] Typecheck executado (quando existe), resultado registrado
|
|
40
|
+
- [ ] Suíte COMPLETA executada — não um subconjunto
|
|
41
|
+
- [ ] Veredito verde/vermelho emitido, com a lista exata do que quebrou (se vermelho)
|
|
42
|
+
|
|
43
|
+
## Falha / recuperação
|
|
44
|
+
|
|
45
|
+
- **Um script de teste/lint não existe** → HALT e reporto; não improviso o comando.
|
|
46
|
+
- **A suíte trava/pendura** → reporto o teste que pendura; não dou por verde uma suíte que não
|
|
47
|
+
terminou.
|
|
48
|
+
- **Testes pulados silenciosamente** → trato como sinal amarelo: reporto os pulados; suíte com pulados
|
|
49
|
+
não declarados não é "verde de verdade".
|
|
50
|
+
- **Vermelho** → reporto o que quebrou e devolvo ao loop de implementação; não marco pronto.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: security-audit
|
|
3
|
+
agent: data-engineer
|
|
4
|
+
title: Auditoria de segurança e qualidade do banco
|
|
5
|
+
inputs: [scope, story]
|
|
6
|
+
outputs: [relatório de achados por severidade, lista de remediações]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Auditoria de segurança e qualidade do banco
|
|
12
|
+
|
|
13
|
+
**Objetivo:** auditar o banco no escopo pedido (`rls`, `schema` ou `full`) e emitir achados por
|
|
14
|
+
severidade — cobertura de RLS, integridade do schema e exposição de segredos — com remediação clara.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- O `scope` é `rls`, `schema` ou `full`. Se ambíguo, default para `full`.
|
|
18
|
+
- Acesso de leitura ao catálogo do banco (`pg_catalog`/`information_schema`). Esta é uma auditoria de
|
|
19
|
+
leitura — não altera nada.
|
|
20
|
+
|
|
21
|
+
## Passos
|
|
22
|
+
|
|
23
|
+
1. **Cobertura de RLS** (escopo `rls`/`full`): liste tabelas em schemas expostos sem `rowsecurity`
|
|
24
|
+
habilitado, e tabelas com RLS ligada mas sem política (negam tudo silenciosamente). Cada tabela
|
|
25
|
+
pública sem RLS é achado CRÍTICO.
|
|
26
|
+
2. **Integridade do schema** (escopo `schema`/`full`): toda tabela tem PK? FKs declaradas têm índice
|
|
27
|
+
de suporte? Baseline presente (`id`/`created_at`/`updated_at`)? Colunas que deveriam ser `NOT NULL`
|
|
28
|
+
estão? CHECK constraints onde a regra de domínio exige?
|
|
29
|
+
3. **Exposição de privilégio:** funções `SECURITY DEFINER` sem `search_path` fixo, GRANTs amplos a
|
|
30
|
+
`public`/`anon`, uso de service role onde RLS bastaria. Redijo qualquer segredo que apareça —
|
|
31
|
+
nunca ecoo token/senha completo.
|
|
32
|
+
4. **Classifique cada achado** por severidade: CRÍTICO (tabela pública sem RLS, vazamento de
|
|
33
|
+
privilégio), ALTO (FK sem índice, baseline ausente em tabela quente), MÉDIO/BAIXO (convenção,
|
|
34
|
+
débito menor).
|
|
35
|
+
5. **Proponha remediação por achado** rastreável: o quê, por quê, e o comando/migration sugerido —
|
|
36
|
+
sem aplicar nada nesta task (auditoria observa; correção é outra task).
|
|
37
|
+
6. **Emita o relatório** ordenado por severidade, com contagem por nível e o veredito geral.
|
|
38
|
+
|
|
39
|
+
## Critério de pronto (DoD)
|
|
40
|
+
|
|
41
|
+
- [ ] Cobertura de RLS verificada em todas as tabelas do escopo
|
|
42
|
+
- [ ] Integridade do schema checada (PK, FK+índice, baseline, NOT NULL, CHECK)
|
|
43
|
+
- [ ] Exposição de privilégio avaliada; segredos redigidos
|
|
44
|
+
- [ ] Cada achado tem severidade e remediação rastreável
|
|
45
|
+
- [ ] Relatório emitido; nada alterado no banco
|
|
46
|
+
|
|
47
|
+
## Falha / recuperação
|
|
48
|
+
|
|
49
|
+
- **Achado CRÍTICO (tabela pública sem RLS / vazamento)** → marco como bloqueador e roteio a
|
|
50
|
+
remediação (`db-policy-apply` / migration) antes de qualquer subida.
|
|
51
|
+
- **Sem acesso ao catálogo** → **pare** e reporte a lacuna de permissão; auditoria parcial não vale
|
|
52
|
+
como veredito.
|
|
53
|
+
- **Remediação exige migration** → entrego o plano; a aplicação segue o fluxo snapshot → dry-run →
|
|
54
|
+
apply, e o push é do @devops.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: setup-database
|
|
3
|
+
agent: data-engineer
|
|
4
|
+
title: Configurar o projeto de banco de dados
|
|
5
|
+
inputs: [tipo de banco (supabase/postgresql/mysql…), variáveis de ambiente]
|
|
6
|
+
outputs: [estrutura do projeto de banco, .env validado, conexão verificada]
|
|
7
|
+
elicit: true
|
|
8
|
+
modes: [interactive]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Configurar o projeto de banco de dados
|
|
12
|
+
|
|
13
|
+
**Objetivo:** deixar o projeto de banco pronto para receber schema e migrations — estrutura de
|
|
14
|
+
diretórios, ambiente validado e conexão verificada — com segurança desde a configuração.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- O tipo de banco está definido ou será elicitado (PostgreSQL/Supabase por padrão). A escolha de
|
|
18
|
+
tecnologia, se ainda em aberto, é do @architect — eu configuro o que foi decidido.
|
|
19
|
+
- Há acesso às credenciais de conexão (ou ao cofre/`.env` onde elas vivem).
|
|
20
|
+
|
|
21
|
+
## Passos
|
|
22
|
+
|
|
23
|
+
1. **Confirme o tipo de banco e o ambiente alvo** (PONTO DE ELICITAÇÃO — exige confirmação do
|
|
24
|
+
usuário): qual engine? qual ambiente (local/staging/produção)? Eu não presumo produção nem
|
|
25
|
+
sobrescrevo ambiente sem o usuário dizer.
|
|
26
|
+
2. **Crie a estrutura do projeto de banco** sob `docs/data-models/` (config) e `docs/data/` (docs):
|
|
27
|
+
diretórios para migrations, seeds, snapshots e políticas. Estrutura previsível é o que as tasks
|
|
28
|
+
`db-*` esperam.
|
|
29
|
+
3. **Valide as variáveis de ambiente** (equivalente a `db-env-check`): host, porta, database, user,
|
|
30
|
+
credencial, modo SSL. Em produção, exijo Pooler com `sslmode=require`. Variável faltando = pare.
|
|
31
|
+
4. **Verifique a conexão** com um teste leve (ping/`SELECT 1`). Sem conexão verificada, não declaro o
|
|
32
|
+
setup pronto.
|
|
33
|
+
5. **Garanta o tratamento de segredo:** confirme que credenciais estão em `.env`/cofre e nunca em
|
|
34
|
+
código versionado; redijo qualquer segredo em logs. Service role, se presente, fica marcado como
|
|
35
|
+
sensível.
|
|
36
|
+
6. **Crie um snapshot baseline inicial** (via `db-snapshot`) se já houver schema existente — ponto de
|
|
37
|
+
rollback antes de qualquer trabalho futuro.
|
|
38
|
+
7. **Documente o setup** em `docs/data/setup.md`: tipo de banco, ambiente, estrutura criada e
|
|
39
|
+
pré-requisitos para as próximas tasks (`create-schema`, `create-migration-plan`).
|
|
40
|
+
|
|
41
|
+
## Critério de pronto (DoD)
|
|
42
|
+
|
|
43
|
+
- [ ] Tipo de banco e ambiente confirmados pelo usuário no ponto de elicitação
|
|
44
|
+
- [ ] Estrutura de diretórios criada (migrations, seeds, snapshots, políticas)
|
|
45
|
+
- [ ] Variáveis de ambiente validadas; produção com Pooler + `sslmode=require`
|
|
46
|
+
- [ ] Conexão verificada (`SELECT 1` ou equivalente)
|
|
47
|
+
- [ ] Segredos fora do versionamento e redigidos em logs
|
|
48
|
+
- [ ] Snapshot baseline criado se havia schema preexistente
|
|
49
|
+
- [ ] `docs/data/setup.md` escrito
|
|
50
|
+
|
|
51
|
+
## Falha / recuperação
|
|
52
|
+
|
|
53
|
+
- **Variável de ambiente ou credencial faltando** → paro e reporto exatamente qual; não invento valor
|
|
54
|
+
nem assumo default de produção.
|
|
55
|
+
- **Conexão falha** → não declaro pronto; reporto o erro (com segredo redigido) e escalo a infra ao
|
|
56
|
+
@devops se for caso de rede/provisionamento.
|
|
57
|
+
- **Provisionamento de infra/MCP/secrets remotos** → delego ao @devops; configuração de
|
|
58
|
+
infraestrutura e MCP é exclusiva dele, eu não toco.
|
|
59
|
+
- **Escolha de engine ainda em aberto** → escalo ao @architect antes de configurar; não decido
|
|
60
|
+
tecnologia de sistema.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: setup-design-system
|
|
3
|
+
agent: ux-design-expert
|
|
4
|
+
title: Inicializar a estrutura do design system
|
|
5
|
+
inputs: [design tokens, story/spec de design system]
|
|
6
|
+
outputs: [estrutura Atomic Design inicializada, docs/design-system/]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Inicializar a estrutura do design system
|
|
12
|
+
|
|
13
|
+
**Objetivo:** criar o esqueleto do design system seguindo Atomic Design (átomo → molécula →
|
|
14
|
+
organismo → template → página), já cabeado aos design tokens, para que cada componente novo nasça
|
|
15
|
+
consistente e sem valor hardcoded.
|
|
16
|
+
|
|
17
|
+
**Pré-condições:**
|
|
18
|
+
- Os design tokens já existem (`extract-tokens` rodou) em `docs/design-system/tokens/`. Sem
|
|
19
|
+
tokens, **pare**: estrutura sem fonte de verdade vira hardcode disfarçado.
|
|
20
|
+
- Existe story/spec que pede o design system. Sem rastro, elicito — não invento arquitetura.
|
|
21
|
+
- A decisão de stack de frontend (framework/bibliotecas) já é da Aria (@architect). Se ainda não
|
|
22
|
+
houver, **delego a decisão técnica** antes de cabear a estrutura a um framework.
|
|
23
|
+
|
|
24
|
+
## Passos
|
|
25
|
+
|
|
26
|
+
1. **Confirmo a stack** decidida pelo @architect (ex.: framework de componente, formato de estilo).
|
|
27
|
+
Eu não escolho stack sozinha — trago a lente de UX e uso a decisão dele.
|
|
28
|
+
2. **Crio a árvore Atomic Design** em `docs/design-system/`:
|
|
29
|
+
- `tokens/` (já existente, da extração)
|
|
30
|
+
- `atoms/` (componentes atômicos)
|
|
31
|
+
- `molecules/` (composições de átomos)
|
|
32
|
+
- `organisms/` (composições de moléculas)
|
|
33
|
+
- `templates/` e `pages/` (estrutura de layout)
|
|
34
|
+
- `docs/` (pattern library gerada depois)
|
|
35
|
+
3. **Cabeio os tokens** ao ponto de entrada do design system (import/registro dos tokens como fonte
|
|
36
|
+
de cor/espaçamento/tipografia), de forma que nenhum componente futuro precise de hex solto.
|
|
37
|
+
4. **Defino as convenções mínimas**: padrão de nomenclatura, estrutura de cada componente
|
|
38
|
+
(componente + teste + tokens + a11y), e o índice de exportação. Documento isso num `README` da
|
|
39
|
+
pasta para quem construir depois seguir.
|
|
40
|
+
5. **Crio o checklist de qualidade do componente** como referência (passa em WCAG AA, usa só tokens,
|
|
41
|
+
tem teste) apontando para `accessibility-wcag-checklist` — todo átomo nasce contra esse critério.
|
|
42
|
+
6. **Registro os arquivos criados** na File List da story.
|
|
43
|
+
7. **Roteio.** Estrutura pronta habilita `build-component` e `compose-molecule`. Integração na
|
|
44
|
+
aplicação além do design system é do @dev; subida é do @devops.
|
|
45
|
+
|
|
46
|
+
## Critério de pronto (DoD)
|
|
47
|
+
|
|
48
|
+
- [ ] Árvore Atomic Design criada em `docs/design-system/` (atoms → pages + docs)
|
|
49
|
+
- [ ] Tokens cabeados como fonte única; nenhum ponto exige valor hardcoded
|
|
50
|
+
- [ ] Convenções de nomenclatura/estrutura e índice de exportação documentados no README
|
|
51
|
+
- [ ] Checklist de qualidade do componente referenciado (a11y + tokens + teste)
|
|
52
|
+
- [ ] Stack confirmada com o @architect (não decidida por mim); File List atualizada
|
|
53
|
+
|
|
54
|
+
## Falha / recuperação
|
|
55
|
+
|
|
56
|
+
- **Tokens ausentes** → HALT; volto à `extract-tokens` antes de montar a estrutura.
|
|
57
|
+
- **Stack de frontend indefinida** → delego a decisão à Aria (@architect) e pauso o setup até ter a
|
|
58
|
+
resposta — não escolho framework sozinha.
|
|
59
|
+
- **Estrutura já existe parcialmente** → não sobrescrevo; reconcilio com o que há e registro o que
|
|
60
|
+
foi adicionado, sem destruir trabalho anterior.
|