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,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: create-next-story
|
|
3
|
+
agent: sm
|
|
4
|
+
title: Criar a próxima story do épico
|
|
5
|
+
inputs: [épico, PRD shardado, docs de arquitetura]
|
|
6
|
+
outputs: ['docs/stories/{epicNum}.{storyNum}.story.md em status Draft']
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Criar a próxima story do épico
|
|
12
|
+
|
|
13
|
+
**Objetivo:** transformar a próxima fatia de um épico numa story que o @dev implementa sem adivinhação
|
|
14
|
+
— ACs testáveis e contexto técnico colado dentro do arquivo — rastreando tudo ao PRD/épico/arquitetura.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- Existe um épico de origem e o PRD shardado. Sem essa âncora, **pare**: qualquer story aqui seria
|
|
18
|
+
invenção (viola No Invention — Art. IV). Sinalize a lacuna para o @pm.
|
|
19
|
+
- Os docs de arquitetura relevantes estão acessíveis (stack, contratos, padrões). Se faltarem para a
|
|
20
|
+
área da story, marque a lacuna explicitamente — não preencha com opinião.
|
|
21
|
+
|
|
22
|
+
## Passos
|
|
23
|
+
|
|
24
|
+
1. **Identifique a próxima story.** Leia o épico e o índice de stories em `docs/stories/`. Determine o
|
|
25
|
+
próximo `{storyNum}` na sequência do épico. Se a story anterior não estiver concluída e for
|
|
26
|
+
dependência, registre a dependência — não fure a ordem "por eficiência".
|
|
27
|
+
2. **Ancore no contexto.** Leia o épico de origem, a seção correspondente do PRD shardado e os docs de
|
|
28
|
+
arquitetura relevantes. Extraia os FR/NFR/CON que a story deve atender. Tudo que entrar na story
|
|
29
|
+
precisa rastrear a uma dessas fontes.
|
|
30
|
+
3. **Crie o arquivo** `docs/stories/{epicNum}.{storyNum}.story.md` a partir do template de story
|
|
31
|
+
(`templates/`). Preencha título, status `Draft` e a referência ao épico de origem.
|
|
32
|
+
4. **Escreva critérios de aceite testáveis.** Cada AC no formato "dado X, quando Y, então Z" e
|
|
33
|
+
rastreável a um FR/NFR. Nada de "funciona bem". Se um requisito do épico não couber nesta story,
|
|
34
|
+
deixe-o para a próxima — não infle o escopo.
|
|
35
|
+
5. **Cole o contexto técnico dentro da story.** Arquivos a tocar, contratos/interfaces, dependências de
|
|
36
|
+
stories anteriores, padrões do projeto a seguir, e a seção de Testing. O @dev não deveria precisar
|
|
37
|
+
abrir cinco documentos para implementar.
|
|
38
|
+
6. **Preencha a qualidade preditiva.** Pelo tipo da story, anote a seção de integração de revisão de
|
|
39
|
+
código e quais gates/agentes especializados ela provavelmente exigirá (@qa sempre; @data-engineer se
|
|
40
|
+
toca schema; @ux-design-expert se toca UI). Planejar o gate na criação é mais barato que no review.
|
|
41
|
+
7. **Releia pela lente do dev.** "Dá pra implementar isso sem me perguntar nada?" Cada ponto de
|
|
42
|
+
adivinhação vira contexto adicionado — ou uma lacuna explícita marcada para o @pm resolver.
|
|
43
|
+
8. **Rode o story-draft-checklist** (via `execute-checklist`). Se passa, a story permanece em `Draft`
|
|
44
|
+
pronta para validação do @po. Se há lacuna de PRD/arquitetura, **sinalize** — não tape o buraco.
|
|
45
|
+
9. **Entregue o gate.** Story pronta → @po valida (10-point). Não valide você mesma e não implemente:
|
|
46
|
+
seu entregável é o artefato story, não o commit.
|
|
47
|
+
|
|
48
|
+
## Critério de pronto (DoD)
|
|
49
|
+
|
|
50
|
+
- [ ] Arquivo `docs/stories/{epicNum}.{storyNum}.story.md` criado em status `Draft`
|
|
51
|
+
- [ ] Cada AC é testável ("dado/quando/então") e rastreia a um FR/NFR/CON
|
|
52
|
+
- [ ] Contexto técnico colado: arquivos, contratos, dependências e seção de Testing
|
|
53
|
+
- [ ] Seção de revisão de código + gates previstos preenchida pelo tipo da story
|
|
54
|
+
- [ ] story-draft-checklist executado com aprovação (ou lacunas sinalizadas ao @pm)
|
|
55
|
+
- [ ] Story roteada ao @po para validação — sem implementação e sem `git push`
|
|
56
|
+
|
|
57
|
+
## Falha / recuperação
|
|
58
|
+
|
|
59
|
+
- **PRD/épico não cobre o que a story precisa** → registro a lacuna e escalo ao @pm. Não invento o
|
|
60
|
+
requisito que falta (No Invention — Art. IV).
|
|
61
|
+
- **Arquitetura ambígua para a área da story** → marco a lacuna explícita na story e sinalizo ao
|
|
62
|
+
@architect; não chuto stack nem contrato.
|
|
63
|
+
- **story-draft-checklist reprova** → corrijo os itens que são meus (contexto, ACs, formato) e refaço.
|
|
64
|
+
Se a reprovação é por lacuna de produto, devolvo ao @pm em vez de forçar a aprovação.
|
|
65
|
+
- **Pedido de correção de escopo no meio** → escalo para a @nexus-master (correct-course). Não corrijo
|
|
66
|
+
escopo de produto por conta própria.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: create-prd
|
|
3
|
+
agent: pm
|
|
4
|
+
title: Criar o PRD greenfield
|
|
5
|
+
inputs: [pedido de produto, pesquisa de mercado (opcional)]
|
|
6
|
+
outputs: [docs/prd/prd.md com FR/NFR, métricas de sucesso e recorte MVP]
|
|
7
|
+
elicit: true
|
|
8
|
+
modes: [interactive]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Criar o PRD greenfield
|
|
12
|
+
|
|
13
|
+
**Objetivo:** transformar um pedido de produto novo num PRD-contrato — cada feature rastreada a uma dor
|
|
14
|
+
real do usuário, com critério de aceite verificável, métrica de sucesso e um MVP recortado ao osso.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- Existe um pedido de produto (visão, ideia, oportunidade). Sem isso, **pare** e elicite o escopo.
|
|
18
|
+
- O "por quê" é conhecível: há uma dor de usuário ou achado de pesquisa por trás. Se não há, **pare** e
|
|
19
|
+
delegue a pesquisa ao @analyst antes de escrever uma linha (No invention, Art. IV).
|
|
20
|
+
|
|
21
|
+
## Passos
|
|
22
|
+
|
|
23
|
+
1. **Cave o "por quê" até a raiz.** Para cada feature pedida, pergunte: quem é o usuário, qual a dor,
|
|
24
|
+
qual métrica isso move. Registre o rastro. Feature sem "por quê" rastreável vira pergunta, não FR.
|
|
25
|
+
2. **Liste tudo que pediram e jogue na matriz** (MoSCoW ou RICE). Classifique sem dó: só o "Must" entra
|
|
26
|
+
no primeiro recorte. "Should"/"Could" viram roadmap, não escopo do MVP.
|
|
27
|
+
3. **[ELICITAÇÃO] Confirme o recorte MVP com o stakeholder.** Apresente o corte (o que entra, o que vira
|
|
28
|
+
roadmap) e o "por quê" de cada inclusão. Pare e espere o GO real do usuário — não presuma o aceite.
|
|
29
|
+
4. **Escreva o PRD** a partir de `templates/prd-tmpl.md`: contexto/problema, usuários, objetivos e
|
|
30
|
+
métricas de sucesso, FRs e NFRs. Cada FR/NFR com **critério de aceite verificável** e rastro ao
|
|
31
|
+
"por quê". Texto que @dev/@sm precisariam te perguntar = documento falhou.
|
|
32
|
+
5. **Preveja qualidade no plano.** Anote NFRs (performance, segurança, acessibilidade) e marque onde o
|
|
33
|
+
@qa entra. Qualidade é design, não remendo.
|
|
34
|
+
6. **Salve em `docs/prd/prd.md`** e registre as decisões de escopo (o que cortou e por quê).
|
|
35
|
+
7. **Roteie o que não é meu.** Arquitetura/tecnologia → @architect. Quebra em epics → task `create-epic`
|
|
36
|
+
(depois eu delego stories ao @sm). Subir/versionar no remoto → @devops.
|
|
37
|
+
|
|
38
|
+
## Critério de pronto (DoD)
|
|
39
|
+
|
|
40
|
+
- [ ] Todo FR/NFR tem critério de aceite verificável e métrica de sucesso
|
|
41
|
+
- [ ] Todo item rastreia a uma dor de usuário ou achado de pesquisa (sem invenção)
|
|
42
|
+
- [ ] Recorte MVP explícito e **confirmado pelo stakeholder** (elicitação cumprida)
|
|
43
|
+
- [ ] O que ficou de fora está registrado como roadmap, não perdido
|
|
44
|
+
- [ ] PRD salvo em `docs/prd/prd.md`; nada de `git push` (delegado ao @devops)
|
|
45
|
+
|
|
46
|
+
## Falha / recuperação
|
|
47
|
+
|
|
48
|
+
- **Não consigo rastrear o "por quê" de uma feature** → não escrevo o FR; delego pesquisa ao @analyst ou
|
|
49
|
+
devolvo a pergunta ao stakeholder.
|
|
50
|
+
- **Stakeholder não fecha o recorte na elicitação** → registro as opções e seguro o PRD; não invento o
|
|
51
|
+
escopo que ele não aprovou.
|
|
52
|
+
- **Pedido exige decisão de arquitetura** → trago o "o quê"/"por quê" e delego o "como" ao @architect.
|
|
53
|
+
- **Escopo incha sem prova** → empurro o excedente pro roadmap; o MVP não negocia sem justificativa.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: create-project-brief
|
|
3
|
+
agent: analyst
|
|
4
|
+
title: Criar o brief de projeto
|
|
5
|
+
inputs: [insumos de descoberta (brainstorm, pesquisa de mercado, notas do usuário)]
|
|
6
|
+
outputs: [docs/project-brief.md]
|
|
7
|
+
elicit: true
|
|
8
|
+
modes: [interactive]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Criar o brief de projeto
|
|
12
|
+
|
|
13
|
+
**Objetivo:** sintetizar a descoberta num brief de projeto enxuto e rastreável que dê ao @pm a munição para escrever o PRD — sem inventar escopo nem decidir produto.
|
|
14
|
+
|
|
15
|
+
**Pré-condições:**
|
|
16
|
+
- Existe pelo menos um insumo de descoberta (brainstorm, pesquisa de mercado, análise competitiva, ou notas do usuário). Se não houver **nada**, **pare** e elícito o contexto base — brief não nasce do vácuo.
|
|
17
|
+
- Há um template de brief em `templates/`. Se existir, preencho-o; se não, uso a estrutura canônica de seções abaixo.
|
|
18
|
+
|
|
19
|
+
## Passos
|
|
20
|
+
|
|
21
|
+
1. **Reúno os insumos** disponíveis (brainstorms, pesquisas, notas) e listo as fontes. Cada afirmação no brief vai rastrear a uma delas.
|
|
22
|
+
2. **Aperto o problema com o usuário.** Confirmo: qual é o problema, para quem, e por que agora. **(ponto de elicitação — exige resposta real do usuário)**
|
|
23
|
+
3. **Preencho as seções do brief**, uma a uma, cada uma rastreando a um insumo:
|
|
24
|
+
- Problema (o que dói e para quem)
|
|
25
|
+
- Objetivo / resultado desejado (mensurável quando possível)
|
|
26
|
+
- Usuários-alvo / personas
|
|
27
|
+
- Escopo proposto (o que está dentro) e não-escopo (o que está fora)
|
|
28
|
+
- Restrições e premissas conhecidas (CON-*)
|
|
29
|
+
- Riscos e questões em aberto
|
|
30
|
+
- Métricas de sucesso
|
|
31
|
+
4. **Marco hipóteses explicitamente.** Tudo que não rastreia a uma fonte verificável vira uma hipótese rotulada — nunca apresento suposição como fato.
|
|
32
|
+
5. **Fecho com o "portanto".** Indico o próximo passo (handoff ao @pm para o PRD) e o que ainda precisa de validação.
|
|
33
|
+
6. **Salvo** em `docs/project-brief.md` e roteio ao @pm.
|
|
34
|
+
|
|
35
|
+
## Critério de pronto (DoD)
|
|
36
|
+
|
|
37
|
+
- [ ] Problema, objetivo e usuários-alvo confirmados com o usuário (elicitação cumprida)
|
|
38
|
+
- [ ] Todas as seções do brief preenchidas, cada afirmação rastreando a uma fonte/insumo
|
|
39
|
+
- [ ] Hipóteses marcadas explicitamente, distintas dos fatos
|
|
40
|
+
- [ ] Escopo e não-escopo declarados
|
|
41
|
+
- [ ] Brief salvo em `docs/project-brief.md` e roteado ao @pm
|
|
42
|
+
|
|
43
|
+
## Falha / recuperação
|
|
44
|
+
|
|
45
|
+
- **Insumos insuficientes para uma seção** → marco a seção como "a validar" com a pergunta aberta; não invento o conteúdo.
|
|
46
|
+
- **Usuário pede que eu escreva o PRD** → recuso e delego: PRD é do @pm. Eu entrego o brief, ele decide o produto.
|
|
47
|
+
- **Achados conflitantes entre insumos** → registro o conflito explicitamente em "questões em aberto" em vez de escolher arbitrariamente uma versão.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: create-rls-policies
|
|
3
|
+
agent: data-engineer
|
|
4
|
+
title: Projetar políticas RLS para o schema
|
|
5
|
+
inputs: [schema, modelo de domínio (regras de propriedade do dado)]
|
|
6
|
+
outputs: [DDL de políticas RLS, docs/data/RLS.md, casos de teste positivos e negativos]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Projetar políticas RLS para o schema
|
|
12
|
+
|
|
13
|
+
**Objetivo:** garantir que cada tabela pública aplique Row Level Security — quem pode ler/escrever
|
|
14
|
+
qual linha é decidido pelo banco, não pela confiança no código da aplicação.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- O schema existe (saída de `create-schema`). Sem tabelas, não há o que proteger.
|
|
18
|
+
- As regras de propriedade do dado estão no modelo de domínio (quem é dono de qual linha:
|
|
19
|
+
usuário, tenant, papel). Se faltam, **pare** e volte ao modelo — RLS sem regra de propriedade é chute.
|
|
20
|
+
- A camada de auth está definida. Se não há auth, **aviso explicitamente** que `auth.uid()` retorna
|
|
21
|
+
`NULL` e as políticas baseadas em identidade não vão filtrar nada.
|
|
22
|
+
|
|
23
|
+
## Passos
|
|
24
|
+
|
|
25
|
+
1. **Habilite RLS em toda tabela pública:** `ALTER TABLE ... ENABLE ROW LEVEL SECURITY` e
|
|
26
|
+
`FORCE ROW LEVEL SECURITY` onde o dono também não deve bypassar. Tabela pública sem RLS é vazamento.
|
|
27
|
+
2. **Para cada tabela, derive as políticas das regras de propriedade** do modelo: `SELECT`,
|
|
28
|
+
`INSERT`, `UPDATE`, `DELETE` separadamente. Cada política expressa "qual linha este papel enxerga
|
|
29
|
+
ou altera" — tipicamente via `auth.uid()`, coluna de tenant ou papel.
|
|
30
|
+
3. **Escreva `USING` (leitura/escrita do que já existe) e `WITH CHECK` (o que pode ser inserido/
|
|
31
|
+
atualizado) corretamente.** Esquecer `WITH CHECK` deixa o usuário gravar linha que ele nem
|
|
32
|
+
conseguiria ler — buraco clássico.
|
|
33
|
+
4. **Decida o modo:** KISS (uma política ampla por tabela) quando o acesso é simples; granular
|
|
34
|
+
(política por operação/papel) quando o domínio exige. Documente a escolha.
|
|
35
|
+
5. **Trate o service role com cuidado extremo:** ele bypassa RLS. Liste onde ele é usado e por quê —
|
|
36
|
+
service role sem justificativa é risco.
|
|
37
|
+
6. **Escreva os casos de teste — positivos E negativos.** Para cada política: um caso que DEVE passar
|
|
38
|
+
(o dono acessa sua linha) e um que DEVE falhar (outro usuário NÃO acessa). RLS só validada com o
|
|
39
|
+
teste negativo verde; sem ele, eu não declaro a política segura.
|
|
40
|
+
7. **Documente em `docs/data/RLS.md`** as políticas, o modo escolhido, o tratamento de service role e
|
|
41
|
+
os casos de teste. A aplicação real (`db-policy-apply`) e a emulação de usuário (`test-as-user`)
|
|
42
|
+
acontecem em tasks dedicadas.
|
|
43
|
+
|
|
44
|
+
## Critério de pronto (DoD)
|
|
45
|
+
|
|
46
|
+
- [ ] RLS habilitada em toda tabela pública
|
|
47
|
+
- [ ] Política por operação derivada das regras de propriedade do modelo de domínio
|
|
48
|
+
- [ ] `USING` e `WITH CHECK` corretos em cada política aplicável
|
|
49
|
+
- [ ] Uso de service role listado e justificado
|
|
50
|
+
- [ ] Cada política tem caso de teste positivo E negativo definido
|
|
51
|
+
- [ ] `docs/data/RLS.md` escrito; aviso emitido se não há camada de auth
|
|
52
|
+
|
|
53
|
+
## Falha / recuperação
|
|
54
|
+
|
|
55
|
+
- **Falta regra de propriedade do dado** → volto ao `db-domain-modeling`; não invento quem é dono.
|
|
56
|
+
- **Não há auth configurada** → não declaro RLS segura; registro o aviso de `auth.uid()` NULL e
|
|
57
|
+
escalo para o @architect/@devops resolverem a camada de identidade.
|
|
58
|
+
- **Política some no teste negativo** (vazamento detectado) → bloqueio o avanço; política que falha o
|
|
59
|
+
teste negativo não vai para produção.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: create-schema
|
|
3
|
+
agent: data-engineer
|
|
4
|
+
title: Desenhar o schema do banco
|
|
5
|
+
inputs: [modelo de domínio, story]
|
|
6
|
+
outputs: [DDL do schema, docs/data/SCHEMA.md]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Desenhar o schema do banco
|
|
12
|
+
|
|
13
|
+
**Objetivo:** transformar o modelo de domínio em DDL concreto — tabelas com baseline, foreign keys
|
|
14
|
+
explícitas e constraints que fazem o banco cumprir as regras, mesmo se o código da aplicação falhar.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- O modelo de domínio existe (saída de `db-domain-modeling`): entidades, relações e padrões de
|
|
18
|
+
acesso. Se não existe, **pare** e rode `db-domain-modeling` primeiro — schema sem domínio é palpite.
|
|
19
|
+
- A tecnologia de banco está definida (PostgreSQL/Supabase por padrão). Se indefinida, escalo ao
|
|
20
|
+
@architect — escolha de tecnologia não é minha.
|
|
21
|
+
|
|
22
|
+
## Passos
|
|
23
|
+
|
|
24
|
+
1. **Releia o modelo de domínio.** Cada tabela do DDL tem que rastrear a uma entidade do modelo. Sem
|
|
25
|
+
entidade no modelo, sem tabela no schema (Constituição Art. IV).
|
|
26
|
+
2. **Crie cada tabela com o baseline obrigatório:** `id` (PK), `created_at`, `updated_at`. Adicione
|
|
27
|
+
`deleted_at` (soft delete) onde a story pede trilha de auditoria. Tabela sem baseline não está
|
|
28
|
+
pronta.
|
|
29
|
+
3. **Declare as foreign keys explicitamente**, com `ON DELETE`/`ON UPDATE` coerentes com a relação do
|
|
30
|
+
modelo (cascade, restrict, set null). O lado dono da FK vem do modelo de domínio.
|
|
31
|
+
4. **Aplique defesa em profundidade no DDL:** `NOT NULL` onde o domínio exige, `CHECK` para valores
|
|
32
|
+
válidos, `UNIQUE` para identidade de negócio. A aplicação é a última linha, não a única.
|
|
33
|
+
5. **Escolha tipos corretos:** `uuid`/`bigint` para PKs, `timestamptz` para datas, `numeric` para
|
|
34
|
+
dinheiro (nunca `float`), `text` em vez de `varchar(n)` arbitrário. Tipo certo é integridade barata.
|
|
35
|
+
6. **Escreva DDL idempotente:** `CREATE TABLE IF NOT EXISTS`, `CREATE TYPE`/enum guardados. Rodar duas
|
|
36
|
+
vezes não pode quebrar — esse DDL vai virar migration depois.
|
|
37
|
+
7. **Verifique a ordem de dependência:** tabelas referenciadas antes das que as referenciam. Esse
|
|
38
|
+
ordenamento é o que `db-verify-order` vai cobrar na migration.
|
|
39
|
+
8. **Documente o schema** em `docs/data/SCHEMA.md`: cada tabela, suas colunas, FKs e constraints, com
|
|
40
|
+
rastro à entidade do domínio. Sinalize que RLS e índices virão em tasks dedicadas
|
|
41
|
+
(`create-rls-policies`, `design-indexes`) — não entrego tabela pública sem RLS.
|
|
42
|
+
|
|
43
|
+
## Critério de pronto (DoD)
|
|
44
|
+
|
|
45
|
+
- [ ] Toda tabela rastreia a uma entidade do modelo de domínio
|
|
46
|
+
- [ ] Toda tabela tem o baseline (`id`/`created_at`/`updated_at`) + `deleted_at` onde aplicável
|
|
47
|
+
- [ ] FKs explícitas com política de `ON DELETE`/`ON UPDATE` coerente
|
|
48
|
+
- [ ] Constraints de integridade (`NOT NULL`/`CHECK`/`UNIQUE`) aplicadas
|
|
49
|
+
- [ ] DDL idempotente e em ordem de dependência correta
|
|
50
|
+
- [ ] `docs/data/SCHEMA.md` escrito; RLS e índices sinalizados como próximos passos
|
|
51
|
+
|
|
52
|
+
## Falha / recuperação
|
|
53
|
+
|
|
54
|
+
- **Modelo de domínio incompleto** → paro e volto a `db-domain-modeling`; não preencho a lacuna
|
|
55
|
+
inventando estrutura.
|
|
56
|
+
- **DDL exige decisão de arquitetura de sistema** (sharding, escolha de engine) → escalo ao @architect.
|
|
57
|
+
- **A story pede código de aplicação/DAL** → delego ao @dev; eu sou dona do banco, não do código acima.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: create-service
|
|
3
|
+
agent: dev
|
|
4
|
+
title: Criar um serviço novo a partir de template
|
|
5
|
+
inputs: [tipo de serviço (api-integration|utility|agent-tool), nome, story/spec]
|
|
6
|
+
outputs: [scaffold do serviço, teste inicial, File List atualizada]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Criar um serviço novo a partir de template
|
|
12
|
+
|
|
13
|
+
**Objetivo:** scaffoldar um serviço novo a partir de um template do projeto — já com estrutura,
|
|
14
|
+
ponto de entrada e teste inicial — pelo menor caminho, sem inventar escopo além do que a story pede.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- O serviço rastreia a uma story/spec que pede explicitamente sua criação. Sem essa origem,
|
|
18
|
+
**pare** e elicito o escopo — não invento serviço (Constituição Art. IV).
|
|
19
|
+
- O `tipo de serviço` é um dos templates suportados (`api-integration`, `utility`, `agent-tool`).
|
|
20
|
+
Tipo desconhecido → **pare** e confirmo com o usuário.
|
|
21
|
+
- Não existe já um serviço que resolve isso. Antes de criar, checo o codebase: se existe um que
|
|
22
|
+
serve (REUSE) ou quase serve (ADAPT), uso/adapto em vez de criar.
|
|
23
|
+
|
|
24
|
+
## Passos
|
|
25
|
+
|
|
26
|
+
1. **Confirmo a origem** (story/spec) e o `tipo` do serviço. Identifico o template correspondente
|
|
27
|
+
em `templates/` e o leio antes de scaffoldar.
|
|
28
|
+
2. **Verifico ausência de duplicata.** Procuro no codebase um serviço equivalente. Se existe, paro e
|
|
29
|
+
reporto — reuso vence criação.
|
|
30
|
+
3. **Scaffoldo o serviço** a partir do template do tipo escolhido, no path do projeto (`.nexus/` para
|
|
31
|
+
artefatos de framework; o pacote/módulo do projeto para código de app). Preencho os pontos do
|
|
32
|
+
template: nome, ponto de entrada, contrato/interface conforme a story.
|
|
33
|
+
4. **Sigo os padrões do projeto** (naming, imports absolutos, tratamento de erro). Não introduzo
|
|
34
|
+
dependência nova não aprovada — se o serviço exige uma, **paro** e confirmo com o usuário.
|
|
35
|
+
5. **Escrevo o teste inicial** que prova que o esqueleto sobe e expõe o contrato mínimo. Serviço sem
|
|
36
|
+
teste não está pronto — está pela metade.
|
|
37
|
+
6. **Rodo lint + o teste inicial** (verde obrigatório) e **atualizo a File List** com tudo que criei.
|
|
38
|
+
|
|
39
|
+
## Critério de pronto (DoD)
|
|
40
|
+
|
|
41
|
+
- [ ] O serviço rastreia a uma story/spec (sem invenção de escopo)
|
|
42
|
+
- [ ] Nenhuma duplicata existente foi ignorada (reúso checado antes de criar)
|
|
43
|
+
- [ ] Scaffold gerado a partir do template do tipo correto, seguindo os padrões do projeto
|
|
44
|
+
- [ ] Teste inicial verde provando que o esqueleto sobe e expõe o contrato mínimo
|
|
45
|
+
- [ ] Nenhuma dependência nova não aprovada introduzida
|
|
46
|
+
- [ ] File List atualizada com os arquivos criados
|
|
47
|
+
|
|
48
|
+
## Falha / recuperação
|
|
49
|
+
|
|
50
|
+
- **Já existe serviço equivalente** → paro e reporto; reúso/adapto em vez de duplicar.
|
|
51
|
+
- **O tipo não tem template** → HALT e confirmo com o usuário; não improviso scaffold do zero sem
|
|
52
|
+
base.
|
|
53
|
+
- **O serviço exigiria dependência nova não aprovada** → HALT e confirmo antes de adicionar
|
|
54
|
+
(Constituição Art. IV).
|
|
55
|
+
- **O escopo do serviço não está na story** → paro e elicito; não invento contrato.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: create-squad
|
|
3
|
+
agent: squad-creator
|
|
4
|
+
title: Forjar um squad a partir de uma missão
|
|
5
|
+
inputs: [missão, restrições, tamanho desejado]
|
|
6
|
+
outputs: ['blueprint <squad>{json}</squad> validado', 'squads/{id}/ materializado pelo motor (squad.yaml + agents/ + tasks/ + knowledge/)']
|
|
7
|
+
elicit: true
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Forjar um squad a partir de uma missão
|
|
12
|
+
|
|
13
|
+
**Objetivo:** transformar uma missão em um squad coeso de especialistas — blueprint completo emitido
|
|
14
|
+
num único bloco `<squad>{json}</squad>`, validado e materializado pelo **motor** (`nexus squad
|
|
15
|
+
create`) em `squads/{id}/`.
|
|
16
|
+
|
|
17
|
+
**Pré-condições:**
|
|
18
|
+
- A missão rastreia a um pedido/story/spec (`traceRef`). Sem rastro, **pare** e elicite — squad de
|
|
19
|
+
escopo inventado não nasce (Art. IV).
|
|
20
|
+
- O roster core (`agents/`) foi lido NESTA sessão — o mapa de cobertura (passo 2) compara contra o
|
|
21
|
+
time real, não contra memória.
|
|
22
|
+
|
|
23
|
+
## Passos
|
|
24
|
+
|
|
25
|
+
1. **Entenda a missão.** Em modo interativo (`elicit: true` — ponto sagrado), elicite: (a) a missão
|
|
26
|
+
em uma frase e seu rastro (story/spec/pedido); (b) o tamanho desejado do time (default: o menor
|
|
27
|
+
que cobre os gaps); (c) restrições (prazo, stack, o que está FORA do escopo). Em modo yolo,
|
|
28
|
+
derive dos inputs recebidos e **declare** cada suposição no relatório — suposição silenciosa é
|
|
29
|
+
invenção.
|
|
30
|
+
2. **Mapeie os papéis contra o core.** Liste as lentes que a missão exige e cruze com o roster real
|
|
31
|
+
de `agents/`. REUSE > CREATE: o que o core cobre é **referenciado** (delegação, nunca cópia);
|
|
32
|
+
só o gap real vira membro novo. Registre o mapa papel → coberto-por/gap no manifest.
|
|
33
|
+
3. **Desenhe o time.** Exatamente **um chief** de arquétipo `Orchestrator` + **2 a 7 especialistas**
|
|
34
|
+
(fora dessa faixa a composição está errada — squad de 1 agente não nasce). Cada membro: lente
|
|
35
|
+
distinta, `owns:` apontando para tasks DO squad, `delegatesTo:` apontando para o core nas
|
|
36
|
+
fronteiras (git push/PR/release/MCP → @devops, SEMPRE).
|
|
37
|
+
4. **Preencha os templates** de `templates/squad/`: `squad-yaml-tmpl` (manifest), `chief-dna-tmpl`
|
|
38
|
+
(chief com roster e delegação), `agent-dna-tmpl` (cada membro), `squad-task-tmpl` (cada task do
|
|
39
|
+
squad). Todo frontmatter de agente tem que validar contra o contrato `Agent`
|
|
40
|
+
(`packages/contracts/src/agent.schema.ts`); corpo segue o formato canônico de `agents/README.md`.
|
|
41
|
+
Task core NUNCA é copiada para dentro do squad — é referenciada pelo slug.
|
|
42
|
+
5. **Emita o blueprint** — EXATAMENTE UM bloco `<squad>{json}</squad>` no output (mesma convenção
|
|
43
|
+
anti-teatro do `<delegate>`: zero blocos = nada a criar; mais de um = ambíguo → recusado). O
|
|
44
|
+
JSON é um `SquadBlueprint` com este shape:
|
|
45
|
+
|
|
46
|
+
```jsonc
|
|
47
|
+
{
|
|
48
|
+
"manifest": {
|
|
49
|
+
"id": "kebab-case único do squad",
|
|
50
|
+
"name": "nome legível",
|
|
51
|
+
"mission": "a missão em uma frase",
|
|
52
|
+
"version": "0.1.0",
|
|
53
|
+
"chief": "id do agente chief (tem que existir em agents[])",
|
|
54
|
+
"origin": "generated",
|
|
55
|
+
"traceRef": "rastro da missão (story/spec/pedido)",
|
|
56
|
+
"guards": { /* freios do squad (fanout/budget), nunca acima dos tetos do core */ },
|
|
57
|
+
"authorities": [ "squad.{id-do-squad}.{operacao}" ]
|
|
58
|
+
},
|
|
59
|
+
"agents": [ { "frontmatter": { /* contrato Agent: id, name, title, icon, archetype, lens, whenToUse, authority, model, owns, delegatesTo, knowledge */ }, "body": "markdown do DNA" } ],
|
|
60
|
+
"tasks": [ { "slug": "kebab-case da task", "content": "markdown completo (frontmatter + passos)" } ],
|
|
61
|
+
"knowledge": [ { "ref": "categoria/nome-do-pack", "content": "markdown do knowledge pack" } ]
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Shapes que o schema EXIGE (erros mais comuns na forja):**
|
|
66
|
+
- `manifest.authorities`: array de **STRINGS** no formato namespaced `"squad.{id}.{operacao}"`
|
|
67
|
+
(kebab-case, ex.: `"squad.conteudo-ig.aprovar-pauta"`). **NUNCA objetos** `{operation, owner}` —
|
|
68
|
+
esse shape é da Constitution do CORE, não do squad. Na dúvida, use `[]` (autoridade é opcional).
|
|
69
|
+
- `knowledge[].ref`: slug kebab-case `categoria/nome-do-pack` — **sem** prefixo de caminho
|
|
70
|
+
(`squads/...`), **sem** extensão `.md`, **sem** acentos/maiúsculas (ex.: `marketing/metricas-ig`,
|
|
71
|
+
nunca `squads/x/knowledge/Métricas.md`). O ref também não pode colidir com um pack do root
|
|
72
|
+
em `knowledge/` (o motor rejeita sombra de knowledge do core).
|
|
73
|
+
- `agents[].frontmatter.archetype`: um de `Orchestrator | Builder | Sage | Guardian | Explorer | Maker`.
|
|
74
|
+
- ids/slugs em geral: kebab-case ASCII `[a-z0-9-]` (sem acentos).
|
|
75
|
+
|
|
76
|
+
6. **Dispare o motor:** `nexus squad create`. O MOTOR valida o blueprint contra o schema e
|
|
77
|
+
materializa `squads/{id}/` (squad.yaml + agents/ + tasks/ + knowledge/). Blueprint com issue →
|
|
78
|
+
o squad NÃO nasce; corrija e re-emita. **Nunca** materialize na mão para "destravar".
|
|
79
|
+
7. **Prove que nasceu inteiro:** rode `validate-squad` sobre o id criado e reporte o resultado REAL
|
|
80
|
+
(Lei 3). Operação do squad daí em diante é da @nexus-master — criar não é operar.
|
|
81
|
+
|
|
82
|
+
## Critério de pronto (DoD)
|
|
83
|
+
|
|
84
|
+
- [ ] Missão elicitada/derivada com `traceRef` rastreável e restrições registradas
|
|
85
|
+
- [ ] Mapa de cobertura papel → core/gap registrado; nenhum membro duplica o time core
|
|
86
|
+
- [ ] Chief é `Orchestrator`; time entre chief+2 e chief+7; lentes distintas
|
|
87
|
+
- [ ] Nenhuma autoridade do squad colide com as exclusivas do core
|
|
88
|
+
- [ ] EXATAMENTE UM bloco `<squad>{json}</squad>` emitido, com manifest/agents/tasks/knowledge completos
|
|
89
|
+
- [ ] Motor validou e materializou `squads/{id}/` — sem materialização manual
|
|
90
|
+
- [ ] `validate-squad` do squad recém-criado passou, com resultado reportado
|
|
91
|
+
|
|
92
|
+
## Falha / recuperação
|
|
93
|
+
|
|
94
|
+
- **O motor recusa o blueprint** → leia o issue apontado, corrija o blueprint e re-emita. Duas
|
|
95
|
+
recusas seguidas do MESMO issue = pare e reporte com o erro exato, sem contornar o motor.
|
|
96
|
+
- **A missão não tem rastro** → HALT: elicite o `traceRef`; sem ele a task não prossegue.
|
|
97
|
+
- **Todos os papéis já são cobertos pelo core** → não crie squad: reporte que a missão é da
|
|
98
|
+
@nexus-master orquestrar com o time existente (REUSE total é sucesso, não falha).
|
|
99
|
+
- **O time não fecha na faixa (1 membro, ou >7 gaps)** → renegocie o recorte da missão com o
|
|
100
|
+
usuário: fatie a missão ou colapse lentes — não force a faixa com membro decorativo.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: create-suite
|
|
3
|
+
agent: qa
|
|
4
|
+
title: Criar a suíte de testes da story
|
|
5
|
+
inputs: [story]
|
|
6
|
+
outputs: [arquivos de teste, mapa AC→teste em Given-When-Then, File List da suíte]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Criar a suíte de testes da story
|
|
12
|
+
|
|
13
|
+
**Objetivo:** transformar os critérios de aceite de uma story em uma suíte de testes executável e
|
|
14
|
+
rastreável — cada AC com pelo menos um teste em Given-When-Then — sem inventar requisito e sem tocar o
|
|
15
|
+
código de produção.
|
|
16
|
+
|
|
17
|
+
**Pré-condições:**
|
|
18
|
+
- A story existe e tem ACs explícitos e a seção de Testing. Se faltar AC ou Testing, **pare** e
|
|
19
|
+
devolva ao @sm/@po — eu não invento o contrato que vou testar (No invention, Art. IV).
|
|
20
|
+
- A story NÃO está em `Draft` (foi validada). Desenhar suíte sobre contrato não-validado é retrabalho.
|
|
21
|
+
- Conheço o framework de testes do projeto (runner, convenção de pasta, comando de execução). Se não
|
|
22
|
+
estiver definido na story/arquitetura, **pare** e elicito — não escolho stack por conta própria.
|
|
23
|
+
|
|
24
|
+
## Passos
|
|
25
|
+
|
|
26
|
+
1. **Leio a story completa** — ACs, Dev Notes, seção de Testing. Defino o que "pronto" significa AQUI
|
|
27
|
+
antes de escrever qualquer teste.
|
|
28
|
+
2. **Perfilo o risco por AC** (probabilidade × impacto). Caminho crítico e dado sensível recebem
|
|
29
|
+
cobertura profunda (caso de erro, borda, regressão); CRUD trivial recebe cobertura proporcional.
|
|
30
|
+
Profundidade segue o sinal de risco, não o meu humor.
|
|
31
|
+
3. **Mapeio cada AC para cenário(s)** em Given-When-Then. AC sem cenário é um buraco — eu o nomeio,
|
|
32
|
+
não o ignoro. O mapa AC→teste é artefato de saída obrigatório.
|
|
33
|
+
4. **Escrevo os testes**, seguindo a convenção do projeto (REUSE > ADAPT > CREATE: reutilizo helpers/
|
|
34
|
+
fixtures existentes antes de criar). Para cada AC:
|
|
35
|
+
a. caminho feliz que prova o AC;
|
|
36
|
+
b. ao menos um caso de erro/borda quando o risco aponta;
|
|
37
|
+
c. teste de regressão quando o AC nasce de um bug conhecido.
|
|
38
|
+
5. **Rodo a suíte** no runner do projeto. Testes novos podem ficar vermelhos se o código ainda não
|
|
39
|
+
existe — registro claramente quais falham por código ausente (esperado) versus por defeito real.
|
|
40
|
+
6. **Registro a File List da suíte** (arquivos de teste criados/modificados) e entrego o mapa AC→teste
|
|
41
|
+
junto. Esse é o rastro que o gate vai auditar.
|
|
42
|
+
7. **Roteio.** Suíte pronta → @dev implementa contra ela (TDD) ou eu sigo para `*review`/`*gate` se o
|
|
43
|
+
código já existe. Eu **nunca** escrevo o código de produção que faz a suíte passar — isso é do @dev.
|
|
44
|
+
|
|
45
|
+
## Critério de pronto (DoD)
|
|
46
|
+
|
|
47
|
+
- [ ] Todo AC mapeado para pelo menos um teste em Given-When-Then (zero AC órfão)
|
|
48
|
+
- [ ] Casos de erro/borda presentes onde o perfil de risco aponta
|
|
49
|
+
- [ ] Suíte roda no runner do projeto; falhas classificadas (código ausente × defeito real)
|
|
50
|
+
- [ ] File List da suíte e mapa AC→teste entregues
|
|
51
|
+
- [ ] Reutilizei helpers/fixtures existentes antes de criar novos
|
|
52
|
+
- [ ] Não toquei o código de produção nem qualquer seção da story além da minha
|
|
53
|
+
|
|
54
|
+
## Falha / recuperação
|
|
55
|
+
|
|
56
|
+
- **AC ambíguo ou não-testável** → paro, registro a lacuna e devolvo ao @sm/@po. Não invento a
|
|
57
|
+
interpretação que falta.
|
|
58
|
+
- **Framework de testes indefinido** → paro e elicito; não escolho stack por conta própria.
|
|
59
|
+
- **A suíte exige tocar schema/migration além do teste** → delego ao @data-engineer para validar/
|
|
60
|
+
otimizar; eu não invado a lane de dados.
|
|
61
|
+
- **Preciso subir a suíte (push/PR)** → delego ao @devops, sempre. Eu não faço `git push` nem abro PR;
|
|
62
|
+
commit local é do @dev.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: db-apply-migration
|
|
3
|
+
agent: data-engineer
|
|
4
|
+
title: Aplicar uma migration com segurança
|
|
5
|
+
inputs: [migration (path), story/spec de origem]
|
|
6
|
+
outputs: [migration aplicada, snapshot pré-aplicação, rollback script, registro de aplicação]
|
|
7
|
+
elicit: false
|
|
8
|
+
modes: [interactive, yolo]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Aplicar uma migration com segurança
|
|
12
|
+
|
|
13
|
+
**Objetivo:** aplicar uma migration de schema em transação, com snapshot antes e rollback pronto, de
|
|
14
|
+
forma que rodar de novo seja seguro — sem nunca subir nada (push é do @devops).
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A migration existe no path informado e rastreia a uma story/spec. Se não rastreia, **pare** — não
|
|
18
|
+
aplico DDL órfão (Constituição Art. IV).
|
|
19
|
+
- O dry-run (`db-dry-run`) já rodou verde e a ordem do DDL (`db-verify-order`) já foi verificada. Se
|
|
20
|
+
não rodaram, **pare** e rode-os antes — aplicar sem dry-run é apostar no escuro.
|
|
21
|
+
- O ambiente-alvo está validado (`db-env-check` ok, `sslmode=require` em produção). Se o alvo for
|
|
22
|
+
produção, confirmo explicitamente o ambiente antes de tocar.
|
|
23
|
+
|
|
24
|
+
## Passos
|
|
25
|
+
|
|
26
|
+
1. **Confirme o ambiente-alvo** (dev / staging / produção) e as variáveis de conexão. Em produção,
|
|
27
|
+
exijo Pooler com `sslmode=require` e justificativa se for usar service role.
|
|
28
|
+
2. **Crie o snapshot pré-aplicação** (`db-snapshot {label}`, label tipo `pre-{migration-id}`). Sem
|
|
29
|
+
snapshot, eu **não** aplico — reversibilidade é pré-condição, não opção.
|
|
30
|
+
3. **Garanta o rollback script** correspondente à migration (o `down`/reverse). Se não existe, escrevo
|
|
31
|
+
ou peço antes de seguir. Se eu não sei desfazer, eu não aplico.
|
|
32
|
+
4. **Aplique dentro de uma transação** (`BEGIN … COMMIT`), com DDL idempotente (`IF NOT EXISTS` /
|
|
33
|
+
`IF EXISTS`). Qualquer erro no meio → `ROLLBACK` automático, banco intacto.
|
|
34
|
+
5. **Verifique a aplicação:** as estruturas existem, constraints/FKs/RLS estão ativas, e a tabela tem
|
|
35
|
+
o baseline (`id`, `created_at`, `updated_at`) quando aplicável.
|
|
36
|
+
6. **Rode o smoke-test** (`db-smoke-test {version}`) para confirmar que nada quebrou pós-migração.
|
|
37
|
+
7. **Registre a aplicação** (migration id, snapshot label, ambiente, timestamp) na trilha da story.
|
|
38
|
+
8. **Pronto para subir → delego ao @devops.** Eu não faço `git push` nem release; deixo a migration
|
|
39
|
+
aplicada e o registro pronto e roteio a subida ao @devops (Gage).
|
|
40
|
+
|
|
41
|
+
## Critério de pronto (DoD)
|
|
42
|
+
|
|
43
|
+
- [ ] Snapshot pré-aplicação criado e rollback script disponível
|
|
44
|
+
- [ ] Migration aplicada em transação, com DDL idempotente
|
|
45
|
+
- [ ] Estruturas, constraints/FKs/RLS e baseline verificados pós-aplicação
|
|
46
|
+
- [ ] Smoke-test verde
|
|
47
|
+
- [ ] Aplicação registrada na trilha da story; subida delegada ao @devops
|
|
48
|
+
|
|
49
|
+
## Falha / recuperação
|
|
50
|
+
|
|
51
|
+
- **Erro durante a aplicação** → a transação já fez `ROLLBACK`; confirmo que o banco está no estado do
|
|
52
|
+
snapshot e reporto a causa. Não tento "consertar ao vivo".
|
|
53
|
+
- **Smoke-test falha pós-aplicação** → executo `db-rollback {snapshot}` para o ponto anterior, registro
|
|
54
|
+
o que falhou e devolvo a migration para correção.
|
|
55
|
+
- **Migration não rastreia a story/spec** → HALT, não aplico — escalo para alinhar escopo.
|
|
56
|
+
- **Pediram que eu faça o push** → recuso e delego ao @devops; push/PR/release não são meus.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: db-domain-modeling
|
|
3
|
+
agent: data-engineer
|
|
4
|
+
title: Modelar o domínio de dados
|
|
5
|
+
inputs: [story, arquitetura do @architect]
|
|
6
|
+
outputs: [modelo de domínio (entidades, relações, padrões de acesso), docs/data/domain-model.md]
|
|
7
|
+
elicit: true
|
|
8
|
+
modes: [interactive]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Modelar o domínio de dados
|
|
12
|
+
|
|
13
|
+
**Objetivo:** entender o domínio real antes de qualquer DDL — quais são as entidades, como elas se
|
|
14
|
+
relacionam, e como vão ser lidas e escritas — produzindo um modelo de domínio que rastreia à story.
|
|
15
|
+
|
|
16
|
+
**Pré-condições:**
|
|
17
|
+
- A story (ou spec) que motiva a modelagem existe e descreve o quê precisa ser persistido. Se não há
|
|
18
|
+
fonte de verdade, **pare** e elicito o escopo — eu não invento entidades (Constituição Art. IV).
|
|
19
|
+
- A arquitetura de sistema do @architect está disponível ou foi consultada. Se falta o contexto
|
|
20
|
+
arquitetural (escolha de tecnologia, fronteiras de serviço), eu **peço ao @architect** — não decido
|
|
21
|
+
arquitetura de sistema, isso não é meu.
|
|
22
|
+
|
|
23
|
+
## Passos
|
|
24
|
+
|
|
25
|
+
1. **Leia a story e a arquitetura completas.** Extraia cada substantivo de negócio que vira candidato
|
|
26
|
+
a entidade e cada verbo que vira candidato a operação (leitura/escrita).
|
|
27
|
+
2. **Liste as entidades candidatas** com seus atributos essenciais. Para cada uma, pergunte: ela tem
|
|
28
|
+
identidade própria e ciclo de vida? Se for só um atributo de outra, não é entidade.
|
|
29
|
+
3. **Mapeie as relações** entre entidades: 1:1, 1:N, N:N. Para cada relação, defina cardinalidade,
|
|
30
|
+
obrigatoriedade e quem é o lado dono da foreign key.
|
|
31
|
+
4. **Documente os padrões de acesso** (PONTO DE ELICITAÇÃO — exige confirmação do usuário): como cada
|
|
32
|
+
entidade vai ser consultada? Por qual chave? Com qual frequência? Quais joins quentes? Escala
|
|
33
|
+
esperada por tabela? Esse mapa guia schema e índices depois — sem ele, eu modelo no escuro.
|
|
34
|
+
5. **Decida normalização pragmática.** Normalize por padrão; só desnormalize quando um padrão de
|
|
35
|
+
acesso documentado justifica, e registre o porquê no modelo.
|
|
36
|
+
6. **Registre restrições de integridade e segurança de domínio:** quais regras o banco deve fazer
|
|
37
|
+
cumprir (unicidade, valores válidos, propriedade do dado por usuário/tenant).
|
|
38
|
+
7. **Escreva o modelo** em `docs/data/domain-model.md`: entidades, atributos, relações, padrões de
|
|
39
|
+
acesso e restrições — cada item com rastro à story. Esse é o input de `create-schema`.
|
|
40
|
+
|
|
41
|
+
## Critério de pronto (DoD)
|
|
42
|
+
|
|
43
|
+
- [ ] Toda entidade rastreia a um requisito da story (sem invenção)
|
|
44
|
+
- [ ] Cada relação tem cardinalidade, obrigatoriedade e lado dono da FK definidos
|
|
45
|
+
- [ ] Padrões de acesso confirmados pelo usuário no ponto de elicitação
|
|
46
|
+
- [ ] Decisões de desnormalização (se houver) justificadas por escrito
|
|
47
|
+
- [ ] Restrições de integridade/segurança de domínio listadas
|
|
48
|
+
- [ ] `docs/data/domain-model.md` escrito e pronto para alimentar `create-schema`
|
|
49
|
+
|
|
50
|
+
## Falha / recuperação
|
|
51
|
+
|
|
52
|
+
- **Story ambígua ou sem o dado necessário** → paro, registro a lacuna e devolvo ao @sm/@po. Não
|
|
53
|
+
invento o requisito que falta.
|
|
54
|
+
- **Falta arquitetura/escolha de tecnologia** → escalo ao @architect; não decido arquitetura de
|
|
55
|
+
sistema no lugar dele.
|
|
56
|
+
- **Usuário não consegue confirmar os padrões de acesso** → não avanço para o schema; um modelo sem
|
|
57
|
+
padrão de acesso vira índice errado e schema retrabalhado.
|