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,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: po-sync-story
|
|
3
|
+
agent: po
|
|
4
|
+
title: Sincronizar uma story com a ferramenta de PM (push de metadados)
|
|
5
|
+
inputs: [story, ferramenta (clickup|github|jira|local)]
|
|
6
|
+
outputs: [story refletida na ferramenta de PM, mapa de IDs atualizado]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Sincronizar uma story com a ferramenta de PM (push de metadados)
|
|
12
|
+
|
|
13
|
+
**Objetivo:** refletir o estado de uma story de `docs/stories/` na ferramenta de gestão de projeto
|
|
14
|
+
configurada (ClickUp / GitHub Issues / Jira / local), mantendo título, status, ACs e File List
|
|
15
|
+
consistentes nos dois lados.
|
|
16
|
+
|
|
17
|
+
**Pré-condições:**
|
|
18
|
+
- A story existe em `docs/stories/` e a ferramenta de PM alvo está configurada em `.nexus/`. Se não
|
|
19
|
+
houver provider configurado, **pare** e reporte — não invento integração.
|
|
20
|
+
- A operação é de **metadados de story** (título, status, descrição, ACs, checklist). Operações de
|
|
21
|
+
git remoto e gestão de repositório **não** entram aqui.
|
|
22
|
+
|
|
23
|
+
## Passos
|
|
24
|
+
|
|
25
|
+
1. **Leia a story** em `docs/stories/` e extraia os campos sincronizáveis: título, status, ACs,
|
|
26
|
+
File List, prioridade, epic de origem.
|
|
27
|
+
2. **Identifique o provider** alvo (`clickup` | `github` | `jira` | `local`) a partir da config em
|
|
28
|
+
`.nexus/`. Recupere o ID externo da story, se já sincronizada antes.
|
|
29
|
+
3. **Detecte divergências** entre a story local e o item remoto: o que mudou de cada lado desde a
|
|
30
|
+
última sincronização (status, ACs, descrição).
|
|
31
|
+
4. **Aplique a sincronização local→remoto** (esta task é push de metadados): crie o item se não
|
|
32
|
+
existir, ou atualize os campos divergentes no item existente. Marque os ACs como checklist na
|
|
33
|
+
ferramenta quando suportado.
|
|
34
|
+
5. **Persista o mapa de IDs** (story local ↔ ID externo) em `.nexus/` para que o próximo
|
|
35
|
+
`*sync-story` / `*pull-story` saiba a correspondência.
|
|
36
|
+
6. **Registre no Change Log da story** a data da sincronização e o destino.
|
|
37
|
+
7. **Não opere git remoto.** Mesmo aqui, eu sincronizo **metadados de story** — não faço `git push`,
|
|
38
|
+
não abro PR, não mexo em MCP. Qualquer subida de código ou integração de repositório é
|
|
39
|
+
**exclusiva do `@devops`**, sem exceção.
|
|
40
|
+
|
|
41
|
+
## Critério de pronto (DoD)
|
|
42
|
+
|
|
43
|
+
- [ ] Campos sincronizáveis extraídos da story
|
|
44
|
+
- [ ] Provider identificado e ID externo recuperado (ou item criado)
|
|
45
|
+
- [ ] Divergências detectadas antes de aplicar
|
|
46
|
+
- [ ] Metadados refletidos local→remoto (campos + checklist de ACs quando suportado)
|
|
47
|
+
- [ ] Mapa de IDs (local ↔ externo) persistido em `.nexus/`
|
|
48
|
+
- [ ] Change Log da story atualizado com data e destino da sync
|
|
49
|
+
- [ ] Nenhuma operação de git remoto / PR / MCP executada (delegada ao @devops)
|
|
50
|
+
|
|
51
|
+
## Falha / recuperação
|
|
52
|
+
|
|
53
|
+
- **Provider de PM não configurado** → paro e reporto; não invento credenciais nem integração.
|
|
54
|
+
- **Conflito de edição** (story e item remoto mudaram o mesmo campo) → não sobrescrevo cegamente;
|
|
55
|
+
sinalizo o conflito e peço a decisão antes de aplicar.
|
|
56
|
+
- **A operação exigiu push de código / PR / configuração de MCP** → fora do meu escopo; delego ao
|
|
57
|
+
@devops.
|
|
58
|
+
- **Falha de autenticação na ferramenta** → reporto o erro com contexto; gestão de credenciais/MCP é
|
|
59
|
+
do @devops.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: pr-automation
|
|
3
|
+
agent: devops
|
|
4
|
+
title: Abrir Pull Request com descrição gerada
|
|
5
|
+
inputs: [story, branch atual, veredito do pre-push-quality-gate]
|
|
6
|
+
outputs: [PR aberto, URL do PR, status checks verificados]
|
|
7
|
+
elicit: true
|
|
8
|
+
modes: [interactive]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Abrir Pull Request com descrição gerada
|
|
12
|
+
|
|
13
|
+
**Objetivo:** abrir um PR da branch atual com descrição gerada a partir da story, após o gate verde e a
|
|
14
|
+
confirmação humana — e verificar os status checks. Criação e merge de PR são exclusivos do @devops.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- O `pre-push-quality-gate` deu **PASS** e a branch já está no remoto (via `*push`). Se não está
|
|
18
|
+
publicada, **pare** e rode `*push` antes.
|
|
19
|
+
- A branch atual NÃO é `main`/`master` — PR sai de feature branch. Se estou na branch base, **pare**.
|
|
20
|
+
|
|
21
|
+
## Passos
|
|
22
|
+
|
|
23
|
+
1. **Detecte o contexto do repositório** — remoto, branch base (default do repo) e branch atual. Nunca
|
|
24
|
+
assuma repo fixo.
|
|
25
|
+
2. **Gere a descrição do PR a partir da story** — título no padrão conventional com o id da story;
|
|
26
|
+
corpo com resumo, ACs atendidos e File List. Sem invenção: tudo rastreia à story/spec.
|
|
27
|
+
3. **Revele o PR proposto.** Mostre título, branch base ← branch atual e o corpo gerado ao usuário.
|
|
28
|
+
4. **[ELICITAÇÃO] Peça o "ok" explícito** para abrir o PR. Criar PR é operação de remoto — exige
|
|
29
|
+
confirmação humana.
|
|
30
|
+
5. **Abra o PR** (`gh pr create`) contra a branch base detectada, com o título e corpo aprovados.
|
|
31
|
+
6. **Verifique os status checks** (`gh pr view --json statusCheckRollup`). Se algum check vermelho,
|
|
32
|
+
sinalize — o PR fica aberto mas não recomendo merge sobre check falho.
|
|
33
|
+
7. **Reporte.** Devolvo a URL do PR e o estado dos checks. Merge é operação separada e só com nova
|
|
34
|
+
confirmação humana — eu nunca faço merge automático.
|
|
35
|
+
|
|
36
|
+
## Critério de pronto (DoD)
|
|
37
|
+
|
|
38
|
+
- [ ] Branch publicada no remoto antes de abrir o PR
|
|
39
|
+
- [ ] Descrição gerada a partir da story (título conventional + corpo rastreável)
|
|
40
|
+
- [ ] Confirmação humana obtida antes de `gh pr create`
|
|
41
|
+
- [ ] PR aberto contra a branch base detectada dinamicamente
|
|
42
|
+
- [ ] Status checks verificados e reportados; URL do PR devolvida
|
|
43
|
+
|
|
44
|
+
## Falha / recuperação
|
|
45
|
+
|
|
46
|
+
- **Gate não está PASS ou branch não publicada** → não abro PR; volto ao gate/`*push`.
|
|
47
|
+
- **Usuário não confirma** → não crio o PR.
|
|
48
|
+
- **Status check vermelho** → reporto, não recomendo merge; devolvo ao @dev se o check é de qualidade.
|
|
49
|
+
- **PR já existe para a branch** → não duplico; reporto o PR existente e seu estado.
|
|
50
|
+
- **Pedido de merge sem confirmação humana** → recuso; merge é irreversível e pede "ok" explícito.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: pre-push-quality-gate
|
|
3
|
+
agent: devops
|
|
4
|
+
title: Gate de qualidade pré-push
|
|
5
|
+
inputs: [story, branch atual]
|
|
6
|
+
outputs: [veredito do gate (PASS/FAIL), relatório de gate]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Gate de qualidade pré-push
|
|
12
|
+
|
|
13
|
+
**Objetivo:** rodar todos os gates de qualidade (lint, typecheck, test, build, revisão automatizada) e
|
|
14
|
+
emitir um veredito objetivo — PASS libera a subida; FAIL devolve ao dono do conserto. Nada vermelho
|
|
15
|
+
chega à porta de saída.
|
|
16
|
+
|
|
17
|
+
**Pré-condições:**
|
|
18
|
+
- Existe trabalho a subir: branch com commits locais à frente do remoto. Se não há nada novo, **pare**
|
|
19
|
+
e reporte "nada a subir".
|
|
20
|
+
- A story está em `Ready for Review`/`Done` com gate de QA aprovado. Se a story não passou pelo
|
|
21
|
+
quality gate do @qa, **pare** e devolva ao @qa antes de tocar nos gates de push.
|
|
22
|
+
|
|
23
|
+
## Passos
|
|
24
|
+
|
|
25
|
+
1. **Detecte o contexto do repositório** — remoto, modo (framework-dev vs project-dev) e branch atual.
|
|
26
|
+
Nunca assuma um repo fixo. Se for greenfield (sem git), **pare** e recomende `*environment-bootstrap`.
|
|
27
|
+
2. **Varra por segredos** no diff a subir (`git diff origin/{branch}...HEAD`): credencial, token, chave
|
|
28
|
+
ou `.env`. Qualquer match → FAIL imediato, antes de qualquer outro gate. O que vaza pra `main` não volta.
|
|
29
|
+
3. **Rode lint.** Vermelho → registre os erros e marque o gate como FAIL.
|
|
30
|
+
4. **Rode typecheck.** Qualquer erro de tipo → FAIL.
|
|
31
|
+
5. **Rode a suíte de testes.** Um teste falho → FAIL. Suíte verde é pré-requisito da subida.
|
|
32
|
+
6. **Rode build.** Falha de build → FAIL.
|
|
33
|
+
7. **Rode a revisão automatizada de código** na mudança a subir. Classifique os achados:
|
|
34
|
+
CRITICAL → bloqueia (FAIL); HIGH → sinalizo e recomendo correção; MEDIUM/LOW → documento, não bloqueio.
|
|
35
|
+
8. **Emita o veredito.** PASS somente se: sem segredos, lint limpo, typecheck 0, suíte verde, build ok e
|
|
36
|
+
sem CRITICAL. Caso contrário FAIL, com o relatório do que reprovou.
|
|
37
|
+
9. **Roteie.** PASS → libera para `*push`/`*create-pr` (com confirmação humana). FAIL → devolvo ao @dev
|
|
38
|
+
o relatório de correção; se o que falta é o gate de story, devolvo ao @qa. Eu não corrijo o código.
|
|
39
|
+
|
|
40
|
+
## Critério de pronto (DoD)
|
|
41
|
+
|
|
42
|
+
- [ ] Varredura de segredos executada — diff limpo de credenciais/`.env`
|
|
43
|
+
- [ ] lint, typecheck, test e build executados, todos verdes
|
|
44
|
+
- [ ] Revisão automatizada rodada e achados classificados (sem CRITICAL aberto)
|
|
45
|
+
- [ ] Veredito explícito emitido (PASS ou FAIL) com relatório
|
|
46
|
+
- [ ] Em FAIL, story devolvida ao dono do conserto (@dev ou @qa) — não subi nada
|
|
47
|
+
|
|
48
|
+
## Falha / recuperação
|
|
49
|
+
|
|
50
|
+
- **Qualquer gate vermelho** → veredito FAIL, push bloqueado, relatório devolvido a @dev. Pressa não fura gate.
|
|
51
|
+
- **CRITICAL da revisão** → FAIL; devolvo a @dev e não libero a subida.
|
|
52
|
+
- **Segredo no diff** → FAIL imediato; oriento a remover do histórico antes de qualquer push.
|
|
53
|
+
- **Ferramenta de gate indisponível** (lint/build não configurado) → registro a lacuna e escalo; não
|
|
54
|
+
declaro PASS sobre um gate que não rodou.
|
package/tasks/push.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: push
|
|
3
|
+
agent: devops
|
|
4
|
+
title: Subir ao remoto (git push)
|
|
5
|
+
inputs: [story, branch atual, veredito do pre-push-quality-gate]
|
|
6
|
+
outputs: [commits no remoto, confirmação de push, caminho de rollback]
|
|
7
|
+
elicit: true
|
|
8
|
+
modes: [interactive]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Subir ao remoto (git push)
|
|
12
|
+
|
|
13
|
+
**Objetivo:** executar `git push` para o remoto detectado, somente após o gate verde e a confirmação
|
|
14
|
+
humana explícita — com o caminho de reversão claro. Eu sou o único guardião da porta de saída.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- O `pre-push-quality-gate` deu **PASS**. Sem PASS, **pare** e rode o gate antes — não subo sobre gate
|
|
18
|
+
não verificado.
|
|
19
|
+
- Existe branch com commits locais à frente do remoto. Se não há diferença, **pare** e reporte.
|
|
20
|
+
|
|
21
|
+
## Passos
|
|
22
|
+
|
|
23
|
+
1. **Detecte o contexto do repositório** — URL do remoto, branch atual e tracking. Nunca assuma repo
|
|
24
|
+
fixo. Se for greenfield (sem git), **pare** e recomende `*environment-bootstrap`.
|
|
25
|
+
2. **Confirme o gate.** O `pre-push-quality-gate` foi PASS para este HEAD? Se o HEAD mudou desde o gate,
|
|
26
|
+
re-rode o gate — não subo um estado não auditado.
|
|
27
|
+
3. **Revele o destino.** Mostre ao usuário: branch local → remoto/branch alvo, número de commits, e o
|
|
28
|
+
resumo do diff (`git log --oneline origin/{branch}..HEAD`).
|
|
29
|
+
4. **[ELICITAÇÃO] Peça o "ok" explícito.** Apresento o resumo do gate (o que passou, o que avisou) e o
|
|
30
|
+
destino. Só avanço com a confirmação humana — push é irreversível na prática.
|
|
31
|
+
5. **Bloqueie force na branch protegida.** Se o pedido for `--force` sobre `main`/`master`, **recuse**:
|
|
32
|
+
histórico de branch protegida não se reescreve.
|
|
33
|
+
6. **Execute o push.** `git push` para o remoto/branch confirmado (com `-u` se a branch ainda não tem
|
|
34
|
+
upstream). Para feature branch sem PR, sinalize que `*create-pr` é o próximo passo.
|
|
35
|
+
7. **Reporte e deixe o rollback claro.** Devolvo o resultado (branch atualizada, hash subido) e o
|
|
36
|
+
caminho de reversão (ex.: o hash anterior do remoto para um eventual revert). Operação registrada.
|
|
37
|
+
|
|
38
|
+
## Critério de pronto (DoD)
|
|
39
|
+
|
|
40
|
+
- [ ] Gate pre-push confirmado como PASS para o HEAD subido
|
|
41
|
+
- [ ] Destino do push revelado (branch, nº de commits, resumo do diff)
|
|
42
|
+
- [ ] Confirmação humana explícita obtida antes de empurrar
|
|
43
|
+
- [ ] Push executado para o remoto detectado dinamicamente
|
|
44
|
+
- [ ] Resultado reportado com caminho de rollback explícito
|
|
45
|
+
|
|
46
|
+
## Falha / recuperação
|
|
47
|
+
|
|
48
|
+
- **Gate não está PASS** → não subo; devolvo ao `pre-push-quality-gate`.
|
|
49
|
+
- **Usuário não confirma** → cancelo o push, nada vai ao remoto.
|
|
50
|
+
- **Push rejeitado (non-fast-forward)** → reporto, oriento sincronizar (`git pull --rebase`) e
|
|
51
|
+
re-rodar o gate; nunca resolvo com `--force` em branch protegida.
|
|
52
|
+
- **Segredo descoberto após o push** → escalo imediato: oriento revogar a credencial e limpar o
|
|
53
|
+
histórico; segredo vazado não se desfaz só com revert.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-browser-console-check
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Checagem do console do browser
|
|
5
|
+
inputs: [story, app rodando]
|
|
6
|
+
outputs: [evidência de console limpo, entrada na seção QA Results]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Checagem do console do browser
|
|
12
|
+
|
|
13
|
+
**Objetivo:** confirmar com evidência que a mudança de UI da story não introduz erros, warnings ou
|
|
14
|
+
falhas de rede no console do browser — "funciona na minha tela" não é evidência; console limpo é.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A story tem componente de UI/front. Se a mudança é puramente backend, esta task não se aplica.
|
|
18
|
+
- O app sobe localmente (URL conhecida). Sem app rodando, não há console para inspecionar.
|
|
19
|
+
|
|
20
|
+
## Passos
|
|
21
|
+
|
|
22
|
+
1. **Suba e navegue.** Abra o app na rota afetada pela story usando automação de browser. Reproduza o
|
|
23
|
+
fluxo descrito nas ACs — não só a tela inicial, o caminho inteiro da feature.
|
|
24
|
+
2. **Capture o console.** Colete as mensagens do console durante o fluxo: erros, warnings, exceptions
|
|
25
|
+
não tratadas. Console limpo significa zero erro e zero warning novo introduzido pela mudança.
|
|
26
|
+
3. **Inspecione a rede.** Verifique as requisições: nenhuma 4xx/5xx inesperada, nenhuma chamada
|
|
27
|
+
pendente travada, nenhum recurso 404. Falha de rede silenciosa é defeito.
|
|
28
|
+
4. **Tire a evidência.** Screenshot do estado final + o log de console capturado. Sem o artefato, o
|
|
29
|
+
"limpo" é palavra, não prova — e palavra não passa no meu gate.
|
|
30
|
+
5. **Triagem dos achados.** Erro/exception → FAIL. Warning novo relevante → CONCERNS. Ruído de
|
|
31
|
+
terceiros pré-existente e não relacionado → registro mas não bloqueio.
|
|
32
|
+
6. **Escreva o resultado** SOMENTE na seção "QA Results": fluxo testado, console (limpo/sujo),
|
|
33
|
+
achados de rede, com a evidência anexada.
|
|
34
|
+
7. **Roteie.** Erro de console rastreável à mudança → `*create-fix-request` ao @dev com o stack/linha.
|
|
35
|
+
|
|
36
|
+
## Critério de pronto (DoD)
|
|
37
|
+
|
|
38
|
+
- [ ] Fluxo das ACs reproduzido no browser, não só a tela inicial
|
|
39
|
+
- [ ] Console capturado: zero erro/warning novo introduzido
|
|
40
|
+
- [ ] Rede inspecionada: sem 4xx/5xx/404 inesperados
|
|
41
|
+
- [ ] Evidência anexada (screenshot + log de console)
|
|
42
|
+
- [ ] Resultado escrito só na seção QA Results e roteado
|
|
43
|
+
|
|
44
|
+
## Falha / recuperação
|
|
45
|
+
|
|
46
|
+
- **App não sobe localmente** → HALT, reporto o bloqueio de ambiente; não aprovo UI que não consigo
|
|
47
|
+
rodar.
|
|
48
|
+
- **Erro de console rastreável à mudança** → FAIL; fix-request ao @dev com stack trace e passo de
|
|
49
|
+
reprodução.
|
|
50
|
+
- **Falha de rede (5xx) em chamada da feature** → FAIL; aponto o endpoint e devolvo ao @dev.
|
|
51
|
+
- **A causa está em infra/ambiente, não no código** → registro e delego ao @devops; eu aponto, ele
|
|
52
|
+
opera o ambiente.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-create-fix-request
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Gerar o QA_FIX_REQUEST para o @dev
|
|
5
|
+
inputs: [story, achados do gate]
|
|
6
|
+
outputs: [QA_FIX_REQUEST rastreável, roteamento ao @dev]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Gerar o QA_FIX_REQUEST para o @dev
|
|
12
|
+
|
|
13
|
+
**Objetivo:** converter os achados de um gate FAIL/CONCERNS num pedido de correção preciso e acionável
|
|
14
|
+
para o @dev — defeito por defeito, com causa, evidência e critério de aceite da correção. Eu aponto;
|
|
15
|
+
o conserto é dele.
|
|
16
|
+
|
|
17
|
+
**Pré-condições:**
|
|
18
|
+
- Existe um veredito de gate (`*review`/`*gate`) com pelo menos um achado FAIL ou CONCERNS. Sem
|
|
19
|
+
achado, não há fix-request — não invento defeito.
|
|
20
|
+
- Cada achado já rastreia a uma AC/NFR/CON ou risco real autoevidente. Achado sem âncora não vira
|
|
21
|
+
pedido de correção.
|
|
22
|
+
|
|
23
|
+
## Passos
|
|
24
|
+
|
|
25
|
+
1. **Selecione os achados acionáveis.** Pegue do gate os FAIL e os CONCERNS que pedem correção.
|
|
26
|
+
Ordene por severidade (CRITICAL → HIGH → MEDIUM → LOW) — o @dev ataca o que mais pesa primeiro.
|
|
27
|
+
2. **Descreva cada defeito com precisão.** Para cada achado: o quê (sintoma), onde (arquivo/linha),
|
|
28
|
+
por quê (causa-raiz, não sintoma) e a evidência (log/teste/screenshot/stack). Defeito vago é
|
|
29
|
+
retrabalho garantido.
|
|
30
|
+
3. **Defina o critério de aceite da correção.** Diga o que torna o defeito resolvido: qual teste de
|
|
31
|
+
regressão precisa existir e passar, qual comportamento deve mudar. O @dev sabe exatamente quando
|
|
32
|
+
parou.
|
|
33
|
+
4. **Anexe a rastreabilidade.** Ligue cada defeito à AC/NFR/CON que ele viola. Isso prova que não é
|
|
34
|
+
preferência minha — é o contrato sendo cobrado.
|
|
35
|
+
5. **Escreva o QA_FIX_REQUEST** como artefato da story (na seção QA Results / fix-request), sem tocar
|
|
36
|
+
em ACs, escopo, status ou Dev Record — esses são intocáveis para mim.
|
|
37
|
+
6. **Roteie ao @dev.** Entrego o fix-request e devolvo a story ao @dev para correção. Eu **não**
|
|
38
|
+
escrevo o código que conserta — juiz não é réu. Quando ele devolver, eu re-reviso.
|
|
39
|
+
|
|
40
|
+
## Critério de pronto (DoD)
|
|
41
|
+
|
|
42
|
+
- [ ] Cada achado acionável virou um item de defeito ordenado por severidade
|
|
43
|
+
- [ ] Cada defeito tem: sintoma, local, causa-raiz e evidência
|
|
44
|
+
- [ ] Cada defeito tem critério de aceite (teste de regressão exigido)
|
|
45
|
+
- [ ] Cada defeito rastreia a uma AC/NFR/CON ou risco real
|
|
46
|
+
- [ ] Escrito só na seção QA Results; story devolvida ao @dev
|
|
47
|
+
- [ ] Eu não escrevi nenhum código de produção
|
|
48
|
+
|
|
49
|
+
## Falha / recuperação
|
|
50
|
+
|
|
51
|
+
- **Um achado não rastreia a contrato nem risco real** → não entra no fix-request; eu não bloqueio por
|
|
52
|
+
preferência estética.
|
|
53
|
+
- **O @dev devolve a correção** → re-reviso (encadeio `*false-positive-check` e `*evidence-check`)
|
|
54
|
+
antes de reabrir o gate. Não dou PASS sem verificar a correção.
|
|
55
|
+
- **A correção exige escopo fora do @dev** (schema, infra, UI) → roteio o item ao dono certo
|
|
56
|
+
(@data-engineer, @devops, @ux-design-expert) em vez de empilhar tudo no @dev.
|
|
57
|
+
- **Tentei reverter ao @dev mais de uma vez sem convergir** → escalo ao @nexus-master em vez de
|
|
58
|
+
iterar no escuro indefinidamente.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-evidence-requirements
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Verificação de QA baseada em evidência
|
|
5
|
+
inputs: [story]
|
|
6
|
+
outputs: [veredito de suficiência de evidência, entrada na seção QA Results]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Verificação de QA baseada em evidência
|
|
12
|
+
|
|
13
|
+
**Objetivo:** confirmar que toda afirmação de "pronto/funciona" na story está sustentada por evidência
|
|
14
|
+
verificável — teste verde, log, screenshot, console limpo — e não por palavra. Sem evidência, não
|
|
15
|
+
aconteceu.
|
|
16
|
+
|
|
17
|
+
**Pré-condições:**
|
|
18
|
+
- A story está em review (status pós-implementação). Se ainda está em Draft/InProgress, não há o que
|
|
19
|
+
auditar.
|
|
20
|
+
- A story tem ACs e seção de Testing. Sem contrato, não há padrão de evidência a exigir.
|
|
21
|
+
|
|
22
|
+
## Passos
|
|
23
|
+
|
|
24
|
+
1. **Liste as afirmações.** Extraia da story tudo que se declara feito: cada AC marcada, cada item de
|
|
25
|
+
Completion Notes, cada "corrigido/validado". Cada uma é uma alegação que precisa de prova.
|
|
26
|
+
2. **Case alegação ↔ evidência.** Para cada afirmação, localize a prova: o teste que a cobre (e está
|
|
27
|
+
verde), o log, o screenshot, a saída de console. Alegação sem prova é buraco nomeado, não fechado.
|
|
28
|
+
3. **Verifique a qualidade da prova.** O teste de fato exercita o AC (não é asserção vazia)? O
|
|
29
|
+
screenshot mostra o estado certo? O log é da execução real, não copiado? Prova fraca = sem prova.
|
|
30
|
+
4. **Confirme a rastreabilidade.** Toda AC mapeia a pelo menos um teste em Given-When-Then. AC órfã
|
|
31
|
+
entra como gap com severidade — não fecho os olhos para o que não foi coberto.
|
|
32
|
+
5. **Pontue a suficiência.** Cobertura completa com prova forte → PASS. Lacunas em área de baixo risco
|
|
33
|
+
→ CONCERNS documentado. Lacuna em caminho crítico/dado sensível → FAIL.
|
|
34
|
+
6. **Escreva o resultado** SOMENTE na seção "QA Results": tabela alegação→evidência, gaps com
|
|
35
|
+
severidade, e o veredito de suficiência.
|
|
36
|
+
7. **Roteie.** Gaps que bloqueiam → `*create-fix-request` ao @dev pedindo a evidência ausente
|
|
37
|
+
(teste, log, screenshot).
|
|
38
|
+
|
|
39
|
+
## Critério de pronto (DoD)
|
|
40
|
+
|
|
41
|
+
- [ ] Todas as afirmações de "pronto/funciona" listadas
|
|
42
|
+
- [ ] Cada alegação casada com evidência verificável (ou marcada como gap)
|
|
43
|
+
- [ ] Qualidade da prova verificada (teste real, não asserção vazia)
|
|
44
|
+
- [ ] Cada AC rastreada a teste Given-When-Then; órfãs registradas
|
|
45
|
+
- [ ] Veredito de suficiência escrito só na seção QA Results e roteado
|
|
46
|
+
|
|
47
|
+
## Falha / recuperação
|
|
48
|
+
|
|
49
|
+
- **Afirmação de "funciona" sem nenhuma evidência** → CONCERNS no mínimo; FAIL se for caminho crítico.
|
|
50
|
+
Devolvo pedindo a prova.
|
|
51
|
+
- **Teste existe mas é asserção vazia / não exercita o AC** → trato como sem prova; fix-request ao @dev.
|
|
52
|
+
- **AC marcada feita mas sem teste** → gap de rastreabilidade registrado no gate, severidade conforme
|
|
53
|
+
risco.
|
|
54
|
+
- **A evidência exige rodar o app/browser** → encadeio `*console-check` ou peço ao @dev o artefato;
|
|
55
|
+
não infiro o resultado.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-false-positive-detection
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Detecção de falso-positivo em correções
|
|
5
|
+
inputs: [story, diff, teste de regressão]
|
|
6
|
+
outputs: [veredito de autenticidade da correção, entrada na seção QA Results]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Detecção de falso-positivo em correções
|
|
12
|
+
|
|
13
|
+
**Objetivo:** verificar que um "bug corrigido" foi de fato corrigido na causa-raiz — com um teste que
|
|
14
|
+
reproduzia o bug original e agora guarda a porta — e não apenas mascarado no sintoma.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A story/fix declara um defeito como corrigido. Sem afirmação de correção, esta task não se aplica.
|
|
18
|
+
- Existe um `diff` da correção e (idealmente) o teste de regressão. Se o teste não existe, esse já é o
|
|
19
|
+
primeiro sinal de falso-positivo.
|
|
20
|
+
|
|
21
|
+
## Passos
|
|
22
|
+
|
|
23
|
+
1. **Reconstrua o bug original.** A partir da story/fix-request, identifique o sintoma, o input que o
|
|
24
|
+
dispara e o comportamento esperado. Se não dá para reconstruir, o defeito nunca foi entendido —
|
|
25
|
+
suspeito.
|
|
26
|
+
2. **Exija o teste que reproduz.** Confirme que existe um teste que **falharia** no código antigo e
|
|
27
|
+
**passa** no novo. Sem esse teste, a correção é hipótese, não fato → CONCERNS no mínimo.
|
|
28
|
+
3. **Verifique causa, não sintoma.** Leia o diff: a mudança ataca a raiz (validação, lógica, estado) ou
|
|
29
|
+
só silencia o efeito (try/catch vazio, guarda no ponto errado, valor mágico)? Mascaramento → FAIL.
|
|
30
|
+
4. **Cace o efeito colateral.** A correção quebra algum consumidor ou abre um caminho de erro novo?
|
|
31
|
+
Caminho feliz consertado mas borda quebrada continua sendo defeito.
|
|
32
|
+
5. **Confirme a regressão na suíte.** Rode os testes da área: o de regressão verde E os antigos
|
|
33
|
+
continuam verdes. Verde no novo + vermelho no antigo = correção que quebrou outra coisa.
|
|
34
|
+
6. **Emita o veredito** SOMENTE na seção "QA Results": correção autêntica (PASS), suspeita
|
|
35
|
+
(CONCERNS, com o que falta) ou falso-positivo (FAIL, com a evidência do mascaramento).
|
|
36
|
+
7. **Roteie.** FAIL/CONCERNS → `*create-fix-request` ao @dev, nomeando o teste de regressão ausente ou
|
|
37
|
+
a causa não atacada.
|
|
38
|
+
|
|
39
|
+
## Critério de pronto (DoD)
|
|
40
|
+
|
|
41
|
+
- [ ] Bug original reconstruído (sintoma + input + esperado)
|
|
42
|
+
- [ ] Teste de regressão confirmado: falha no antigo, passa no novo
|
|
43
|
+
- [ ] Diff ataca a causa-raiz, não o sintoma
|
|
44
|
+
- [ ] Suíte da área inteira verde (sem regressão colateral)
|
|
45
|
+
- [ ] Veredito escrito só na seção QA Results e roteado
|
|
46
|
+
|
|
47
|
+
## Falha / recuperação
|
|
48
|
+
|
|
49
|
+
- **Não existe teste que reproduza o bug** → CONCERNS/FAIL: devolvo ao @dev pedindo o teste de
|
|
50
|
+
regressão. Sem ele, não há prova de correção.
|
|
51
|
+
- **A correção mascara o sintoma** (catch vazio, flag, valor mágico) → FAIL com a linha apontada;
|
|
52
|
+
fix-request ao @dev.
|
|
53
|
+
- **A correção introduziu regressão em outro teste** → FAIL; aponto o teste quebrado e devolvo.
|
|
54
|
+
- **Não consigo reconstruir o bug a partir da story** → registro a lacuna e devolvo ao @sm/@po; não
|
|
55
|
+
invento o defeito que faltou descrever.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-fix-issues
|
|
3
|
+
agent: dev
|
|
4
|
+
title: Corrigir issues do QA_FIX_REQUEST.md (workflow de 8 fases)
|
|
5
|
+
inputs: [QA_FIX_REQUEST.md, story]
|
|
6
|
+
outputs: [código corrigido, testes, QA_FIX_RESPONSE.md, File List atualizada]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [yolo, interactive]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Corrigir issues do QA_FIX_REQUEST.md (workflow de 8 fases)
|
|
12
|
+
|
|
13
|
+
**Objetivo:** executar o ciclo estruturado de correção de um `QA_FIX_REQUEST.md` — da triagem à
|
|
14
|
+
resposta — fechando cada issue listada com correção testada e rastreável.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- Existe um `QA_FIX_REQUEST.md` com issues numeradas, cada uma com severidade e AC/local afetado.
|
|
18
|
+
Sem esse arquivo, **pare** — esta task opera sobre ele.
|
|
19
|
+
- A story de origem está acessível (para rastrear cada issue ao seu AC). Se faltar, devolvo ao @qa.
|
|
20
|
+
|
|
21
|
+
## Passos
|
|
22
|
+
|
|
23
|
+
1. **Fase 1 — Triagem.** Leio todas as issues do `QA_FIX_REQUEST.md`, classifico por severidade
|
|
24
|
+
(CRITICAL/HIGH/MEDIUM/LOW) e separo o que é minha lane (código/teste) do que é AC/escopo (devolvo
|
|
25
|
+
ao @sm/@po, não corrijo).
|
|
26
|
+
2. **Fase 2 — Plano de ataque.** Ordeno as issues: bloqueadores primeiro; agrupo as que tocam os
|
|
27
|
+
mesmos arquivos para evitar idas e vindas. Sem super-engenharia: o plano é uma lista, não um doc.
|
|
28
|
+
3. **Fase 3 — Reprodução.** Para cada issue, reproduzo o problema (teste que falha / passo que
|
|
29
|
+
quebra) antes de corrigir. Não corrijo o que não consigo reproduzir — peço evidência ao @qa.
|
|
30
|
+
4. **Fase 4 — Correção.** Aplico a correção mínima por issue, reusando o que já existe antes de criar.
|
|
31
|
+
5. **Fase 5 — Teste.** Escrevo/ajusto o teste que prova que a issue foi fechada (inclui o caso de
|
|
32
|
+
borda que a quebrou). Issue sem teste verde não está fechada.
|
|
33
|
+
6. **Fase 6 — Regressão.** Rodo lint + typecheck + toda a suíte. Corrigir uma issue não pode abrir
|
|
34
|
+
outra. Vermelho não fecha o ciclo.
|
|
35
|
+
7. **Fase 7 — Resposta.** Escrevo `QA_FIX_RESPONSE.md` mapeando cada issue → correção aplicada →
|
|
36
|
+
teste que a prova → arquivos tocados. Atualizo a File List da story.
|
|
37
|
+
8. **Fase 8 — Roteamento.** Commit local (conventional commit citando o id da story). **Não** dou
|
|
38
|
+
`git push` — delego ao @devops. Roteio o `QA_FIX_RESPONSE.md` de volta ao @qa para re-review.
|
|
39
|
+
|
|
40
|
+
## Critério de pronto (DoD)
|
|
41
|
+
|
|
42
|
+
- [ ] Toda issue da minha lane no `QA_FIX_REQUEST.md` foi reproduzida, corrigida e coberta por teste
|
|
43
|
+
- [ ] Issues de AC/escopo foram devolvidas ao @sm/@po, não "consertadas" por mim
|
|
44
|
+
- [ ] Regressão completa verde: lint limpo, typecheck 0, suíte passando
|
|
45
|
+
- [ ] `QA_FIX_RESPONSE.md` escrito com o mapa issue → fix → teste → arquivos
|
|
46
|
+
- [ ] File List atualizada; commit local feito, sem `git push` (delegado ao @devops)
|
|
47
|
+
|
|
48
|
+
## Falha / recuperação
|
|
49
|
+
|
|
50
|
+
- **Uma issue não reproduz** → não corrijo às cegas; peço ao @qa o passo/evidência de reprodução.
|
|
51
|
+
- **Uma issue é de AC/escopo, não de código** → devolvo ao @sm/@po; registro no `QA_FIX_RESPONSE.md`
|
|
52
|
+
como fora de escopo de correção de código.
|
|
53
|
+
- **A correção abre regressão** → paro, registro e resolvo antes de fechar o ciclo.
|
|
54
|
+
- **3 tentativas falhas na mesma issue** → HALT, marco a issue como bloqueada no `QA_FIX_RESPONSE.md`
|
|
55
|
+
e reporto; não empurro com gambiarra.
|
package/tasks/qa-gate.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-gate
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Emitir a decisão de quality gate
|
|
5
|
+
inputs: [story, achados do review]
|
|
6
|
+
outputs: [decisão PASS/CONCERNS/FAIL/WAIVED na seção "QA Results", roteamento]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Emitir a decisão de quality gate
|
|
12
|
+
|
|
13
|
+
**Objetivo:** consolidar os achados do review numa decisão de gate única e fundamentada —
|
|
14
|
+
PASS / CONCERNS / FAIL / WAIVED — rastreável a risco real, escrita só na seção "QA Results".
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- O review já produziu achados (risco, scan, segurança, NFR, rastreabilidade, evidência). Sem
|
|
18
|
+
achados, **pare**: gate sem análise é carimbo, não veredito.
|
|
19
|
+
- A story está em `Ready for Review` ou `InReview`. Não emito gate sobre story em `Draft`.
|
|
20
|
+
|
|
21
|
+
## Passos
|
|
22
|
+
|
|
23
|
+
1. **Reúno os achados** de cada eixo do review e classifico por severidade (CRITICAL/HIGH/MEDIUM/LOW),
|
|
24
|
+
cada um rastreado a uma AC, NFR ou CON. Achado sem rastro não entra na decisão.
|
|
25
|
+
2. **Aplico a régua de decisão:**
|
|
26
|
+
- **FAIL** — há CRITICAL/HIGH aberto, AC não atendida, ou ausência de evidência em ponto de risco.
|
|
27
|
+
- **CONCERNS** — sem bloqueador, mas há dívida registrada (MEDIUM/LOW, gap não-crítico) que o time
|
|
28
|
+
deve conhecer; progresso não é barrado por preferência estética.
|
|
29
|
+
- **PASS** — todas as ACs atendidas com teste verde, sem CRITICAL/HIGH, evidência presente.
|
|
30
|
+
- **WAIVED** — risco conhecido e explicitamente aceito pelo dono (@pm/@po), com justificativa
|
|
31
|
+
registrada. Eu não dou waiver sozinha — registro o aceite.
|
|
32
|
+
3. **Fundamento a decisão.** Para cada item que pesa no veredito, escrevo o porquê e o rastro à AC/
|
|
33
|
+
NFR/CON. Advisory, nunca arbitrário: bloqueio só com motivo rastreável.
|
|
34
|
+
4. **Escrevo a seção "QA Results"** da story com o veredito, os achados e a fundamentação. NÃO toco em
|
|
35
|
+
Status, ACs, Tasks, Dev Notes ou Change Log — alterar o contrato que julgo é conflito de interesse.
|
|
36
|
+
5. **Roteio.** FAIL/CONCERNS → fix-request (`qa-create-fix-request`) ao @dev. PASS e pronto pra subir
|
|
37
|
+
→ @devops. Eu nunca subo nada eu mesma.
|
|
38
|
+
|
|
39
|
+
## Critério de pronto (DoD)
|
|
40
|
+
|
|
41
|
+
- [ ] Cada achado rastreado a AC/NFR/CON e classificado por severidade
|
|
42
|
+
- [ ] Veredito único emitido pela régua (PASS/CONCERNS/FAIL/WAIVED)
|
|
43
|
+
- [ ] Fundamentação escrita para cada item que pesou na decisão
|
|
44
|
+
- [ ] Apenas a seção "QA Results" foi escrita
|
|
45
|
+
- [ ] WAIVED, se houver, registra aceite explícito do dono — não decisão minha
|
|
46
|
+
- [ ] Saída roteada (@dev ou @devops)
|
|
47
|
+
|
|
48
|
+
## Falha / recuperação
|
|
49
|
+
|
|
50
|
+
- **Achado sem rastro a AC/NFR/CON** → descarto do veredito; não invento critério avulso.
|
|
51
|
+
- **Pressão para PASS sem evidência** → recuso; CONCERNS no mínimo. Nunca aprovo no escuro.
|
|
52
|
+
- **Pedido de WAIVED sem dono identificado** → HALT até o aceite explícito do @pm/@po.
|
|
53
|
+
- **Veredito exige correção** → delego ao @dev via fix-request; não comito nem corrijo código.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-migration-validation
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Validação de migrations de schema
|
|
5
|
+
inputs: [story, arquivos de migration]
|
|
6
|
+
outputs: [veredito de segurança da migration, entrada na seção QA Results]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Validação de migrations de schema
|
|
12
|
+
|
|
13
|
+
**Objetivo:** assegurar que uma migration de schema é reversível, não-destrutiva por acidente e segura
|
|
14
|
+
para rodar em produção — antes que ela corrompa dado ou trave a aplicação.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A story toca o schema e existe pelo menos um arquivo de migration. Sem migration, esta task não se
|
|
18
|
+
aplica.
|
|
19
|
+
- Eu valido a segurança do scan; o desenho fino de DDL e otimização de query é do @data-engineer —
|
|
20
|
+
delego o que passar do meu escopo de gate.
|
|
21
|
+
|
|
22
|
+
## Passos
|
|
23
|
+
|
|
24
|
+
1. **Identifique o tipo de mudança.** Aditiva (coluna/tabela nova) é baixo risco; destrutiva (drop,
|
|
25
|
+
rename, mudança de tipo, NOT NULL em coluna populada) é alto risco e recebe mergulho profundo.
|
|
26
|
+
2. **Verifique a reversibilidade.** Existe `down`/rollback que desfaz a mudança sem perder dado? Drop
|
|
27
|
+
sem caminho de volta é FAIL salvo justificativa explícita na story.
|
|
28
|
+
3. **Cace destruição implícita.** `DROP COLUMN`, `TRUNCATE`, mudança de tipo que trunca, `NOT NULL`
|
|
29
|
+
sem default em tabela com linhas — cada um é potencial perda de dado. Marque com evidência.
|
|
30
|
+
4. **Avalie o impacto de lock/downtime.** A migration trava a tabela por quanto tempo? Em tabela grande,
|
|
31
|
+
`ALTER` síncrono pode derrubar a app. Sinalize para estratégia online se o risco apontar.
|
|
32
|
+
5. **Confirme ordem e idempotência.** A migration roda limpa em base vazia E em base existente? É
|
|
33
|
+
idempotente ou falha se rodar duas vezes? Numeração/timestamp em ordem correta.
|
|
34
|
+
6. **Rastreie ao contrato.** A mudança de schema corresponde a uma AC/spec? Schema inventado fora da
|
|
35
|
+
story viola No Invention → bloqueio.
|
|
36
|
+
7. **Emita o veredito** SOMENTE na seção "QA Results": tipo, reversibilidade, riscos destrutivos,
|
|
37
|
+
impacto de lock, e PASS/CONCERNS/FAIL com evidência.
|
|
38
|
+
8. **Roteie.** Risco destrutivo ou irreversível → `*create-fix-request` ao @dev e delego validação fina
|
|
39
|
+
ao @data-engineer. A subida (aplicar em prod) é sempre do @devops — eu nunca aplico migration.
|
|
40
|
+
|
|
41
|
+
## Critério de pronto (DoD)
|
|
42
|
+
|
|
43
|
+
- [ ] Tipo de mudança classificado (aditiva vs destrutiva)
|
|
44
|
+
- [ ] Reversibilidade verificada (rollback existe e funciona)
|
|
45
|
+
- [ ] Riscos destrutivos e de lock/downtime sinalizados com evidência
|
|
46
|
+
- [ ] Idempotência e ordem confirmadas
|
|
47
|
+
- [ ] Mudança rastreia a uma AC/spec
|
|
48
|
+
- [ ] Veredito escrito só na seção QA Results e roteado
|
|
49
|
+
|
|
50
|
+
## Falha / recuperação
|
|
51
|
+
|
|
52
|
+
- **Migration destrutiva sem rollback** → FAIL; fix-request ao @dev e validação fina ao
|
|
53
|
+
@data-engineer.
|
|
54
|
+
- **Risco de lock/downtime em tabela grande** → CONCERNS com recomendação de migration online; delego
|
|
55
|
+
a estratégia ao @data-engineer.
|
|
56
|
+
- **Schema não rastreia a nenhuma AC/spec** → bloqueio por No Invention; devolvo ao @sm/@po.
|
|
57
|
+
- **Preciso aplicar a migration para validar comportamento** → eu não aplico em prod; peço ambiente de
|
|
58
|
+
validação e delego a aplicação ao @devops.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-nfr-assess
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Validar requisitos não-funcionais da story
|
|
5
|
+
inputs: [story]
|
|
6
|
+
outputs: [avaliação de NFRs (perf, segurança, confiabilidade, manutenibilidade) com veredito por eixo]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Validar requisitos não-funcionais da story
|
|
12
|
+
|
|
13
|
+
**Objetivo:** verificar que a story atende os NFRs que importam para seu risco — performance,
|
|
14
|
+
segurança, confiabilidade, manutenibilidade — com evidência por eixo, não com afirmação.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A story existe e o risco já foi perfilado (`qa-risk-profile`), para calibrar profundidade.
|
|
18
|
+
- Existem NFRs/CONs rastreáveis (na story, na spec ou no padrão do projeto). Sem alvo, registro a
|
|
19
|
+
ausência como gap — não invento o número.
|
|
20
|
+
|
|
21
|
+
## Passos
|
|
22
|
+
|
|
23
|
+
1. **Seleciono os eixos relevantes** pelo perfil de risco. Caminho crítico exige perf e
|
|
24
|
+
confiabilidade; dado sensível exige segurança. Não avalio eixo irrelevante só para encher.
|
|
25
|
+
2. **Para cada eixo, defino o alvo** rastreável (ex.: latência p95 < X, sem secret em log, retry em
|
|
26
|
+
falha transitória). Alvo vem da story/spec/CON; se ausente, registro gap.
|
|
27
|
+
3. **Coleto evidência** contra o alvo: resultado de teste de carga, scan de segurança, log de falha
|
|
28
|
+
injetada, métrica. Evidência ou não aconteceu — afirmação de "é rápido" não vale.
|
|
29
|
+
4. **Emito veredito por eixo:** PASS (alvo atingido com evidência), CONCERNS (dívida sem bloqueio),
|
|
30
|
+
FAIL (alvo violado ou sem evidência em ponto de risco).
|
|
31
|
+
5. **Consolido** os vereditos como insumo para `qa-gate`, cada um rastreado ao NFR/CON correspondente.
|
|
32
|
+
|
|
33
|
+
## Critério de pronto (DoD)
|
|
34
|
+
|
|
35
|
+
- [ ] Eixos de NFR selecionados pelo perfil de risco, não por checklist cego
|
|
36
|
+
- [ ] Cada eixo tem alvo rastreável (story/spec/CON) ou gap registrado
|
|
37
|
+
- [ ] Cada veredito sustentado por evidência concreta
|
|
38
|
+
- [ ] Vereditos consolidados e rastreados para o gate
|
|
39
|
+
|
|
40
|
+
## Falha / recuperação
|
|
41
|
+
|
|
42
|
+
- **Eixo de risco sem alvo definido** → registro gap e levo ao gate como CONCERNS; não estipulo o
|
|
43
|
+
número eu mesma.
|
|
44
|
+
- **Sem evidência para um eixo crítico** → FAIL nesse eixo; não presumo conformidade.
|
|
45
|
+
- **Correção de NFR exige código/infra** → delego ao @dev (código) ou @devops (infra) via fix-request.
|