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,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: migration-plan-tmpl
|
|
3
|
+
kind: template
|
|
4
|
+
agent: data-engineer
|
|
5
|
+
produces: docs/data-models/{versao}-migration-plan.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Migration Plan: {versão / descrição curta}
|
|
9
|
+
|
|
10
|
+
**Status:** Draft
|
|
11
|
+
**Banco-alvo:** {PostgreSQL / Supabase — ambiente}
|
|
12
|
+
**Schema-fonte:** {docs/data-models/{dominio}-schema.md — o design que esta migration materializa}
|
|
13
|
+
**Snapshot baseline:** {label do snapshot pré-migração — ponto de rollback}
|
|
14
|
+
|
|
15
|
+
## Objetivo
|
|
16
|
+
|
|
17
|
+
> O que esta migração muda e por quê. Cada mudança rastreia a uma story/spec/design (No Invention).
|
|
18
|
+
|
|
19
|
+
- {mudança 1 — rastro: story/spec/schema}
|
|
20
|
+
- {mudança 2 — rastro}
|
|
21
|
+
|
|
22
|
+
## Pré-condições
|
|
23
|
+
|
|
24
|
+
> O que precisa estar verdadeiro antes de aplicar. Reversibilidade é pré-condição.
|
|
25
|
+
|
|
26
|
+
- [ ] Snapshot `{label}` criado (`*snapshot {label}`)
|
|
27
|
+
- [ ] Rollback script pronto e testado (ver `## Rollback`)
|
|
28
|
+
- [ ] Ordem do DDL validada — dependências primeiro (`*verify-order {path}`)
|
|
29
|
+
- [ ] Dry-run executado sem erro (`*dry-run {path}`)
|
|
30
|
+
- [ ] Variáveis de ambiente do banco validadas (`*env-check`)
|
|
31
|
+
- [ ] {pré-condição específica desta migração}
|
|
32
|
+
|
|
33
|
+
## Mudanças (DDL, em ordem de dependência)
|
|
34
|
+
|
|
35
|
+
> Tabelas-pai antes de filhas; tipos/enums antes de colunas que os usam. Tudo idempotente (`IF NOT EXISTS` / `IF EXISTS`) — rodar de novo é seguro.
|
|
36
|
+
|
|
37
|
+
### Passo {n}: {descrição}
|
|
38
|
+
|
|
39
|
+
```sql
|
|
40
|
+
-- forward
|
|
41
|
+
{DDL idempotente}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Impacto:** {tabelas afetadas, lock esperado, downtime?}
|
|
45
|
+
**Dados:** {migração/backfill de dados envolvido? volume?}
|
|
46
|
+
|
|
47
|
+
## Estratégia de Aplicação
|
|
48
|
+
|
|
49
|
+
| Item | Decisão |
|
|
50
|
+
|---|---|
|
|
51
|
+
| Transação | {tudo em uma transação? ou por passo?} |
|
|
52
|
+
| Janela | {online / janela de manutenção — por quê} |
|
|
53
|
+
| Lock esperado | {ACCESS EXCLUSIVE em {tabela}? duração estimada} |
|
|
54
|
+
| Backfill | {síncrono no DDL / batch separado / N/A} |
|
|
55
|
+
| Idempotência | {como rodar duas vezes não quebra} |
|
|
56
|
+
|
|
57
|
+
## Rollback
|
|
58
|
+
|
|
59
|
+
> Se eu não sei como desfazer, eu não aplico. Cada passo forward tem o seu reverso.
|
|
60
|
+
|
|
61
|
+
```sql
|
|
62
|
+
-- rollback (ordem inversa)
|
|
63
|
+
{DDL de reversão idempotente}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Restauração de snapshot:** `*rollback {label}` — quando o rollback script não basta.
|
|
67
|
+
**Ponto de não-retorno:** {se houver — ex.: DROP de coluna com dados; o que se perde}
|
|
68
|
+
|
|
69
|
+
## Validação Pós-Migração
|
|
70
|
+
|
|
71
|
+
> Smoke-test antes de declarar pronto.
|
|
72
|
+
|
|
73
|
+
- [ ] Schema aplicado bate com o design (`*smoke-test {versao}`)
|
|
74
|
+
- [ ] Contagens de linha preservadas onde esperado
|
|
75
|
+
- [ ] Constraints/FKs ativas e válidas
|
|
76
|
+
- [ ] RLS aplicada nas tabelas que exigem (`*test-as-user`)
|
|
77
|
+
- [ ] Queries quentes sem regressão de performance (`*analyze-performance`)
|
|
78
|
+
- [ ] {validação específica desta migração}
|
|
79
|
+
|
|
80
|
+
## Riscos
|
|
81
|
+
|
|
82
|
+
| Risco | Severidade | Mitigação |
|
|
83
|
+
|---|---|---|
|
|
84
|
+
| {risco} | {CRÍTICO/ALTO/MÉDIO/BAIXO} | {como mitigo / rollback} |
|
|
85
|
+
|
|
86
|
+
> CRÍTICO bloqueia a aplicação; ALTO exige mitigação ou rollback script comprovado.
|
|
87
|
+
|
|
88
|
+
## Change Log
|
|
89
|
+
|
|
90
|
+
| Data | Mudança | Autor |
|
|
91
|
+
|---|---|---|
|
|
92
|
+
| {data} | {o quê} | @data-engineer |
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: prd-tmpl
|
|
3
|
+
kind: template
|
|
4
|
+
agent: pm
|
|
5
|
+
produces: docs/prd/{slug}-prd.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# PRD: {nome do produto/iniciativa}
|
|
9
|
+
|
|
10
|
+
**Status:** Draft
|
|
11
|
+
**Tipo:** {greenfield | brownfield}
|
|
12
|
+
**Autor:** @pm (Morgan)
|
|
13
|
+
**Data:** {data}
|
|
14
|
+
|
|
15
|
+
## Visão e Problema
|
|
16
|
+
|
|
17
|
+
> O "por quê" na raiz. Que dor real do usuário isto resolve? Sem dor rastreada, não vira PRD.
|
|
18
|
+
|
|
19
|
+
- **Problema:** {a dor concreta do usuário, não a solução}
|
|
20
|
+
- **Usuário-alvo:** {quem sente a dor — persona/segmento}
|
|
21
|
+
- **Por que agora:** {gatilho/oportunidade que justifica o timing}
|
|
22
|
+
- **Hipótese de valor:** {se entregarmos X, esperamos resultado Y}
|
|
23
|
+
|
|
24
|
+
## Objetivos e Métricas de Sucesso
|
|
25
|
+
|
|
26
|
+
> Cada objetivo tem uma métrica mensurável. Número informa a decisão — sem métrica, é desejo, não objetivo.
|
|
27
|
+
|
|
28
|
+
| ID | Objetivo | Métrica | Baseline | Alvo |
|
|
29
|
+
|---|---|---|---|---|
|
|
30
|
+
| OBJ-1 | {resultado de negócio/usuário} | {como se mede} | {valor atual} | {valor desejado} |
|
|
31
|
+
|
|
32
|
+
## Escopo do MVP
|
|
33
|
+
|
|
34
|
+
> Tudo começa fora do MVP e precisa *provar* que entra. Recorte com MoSCoW/RICE.
|
|
35
|
+
|
|
36
|
+
### Dentro (Must)
|
|
37
|
+
- {capacidade mínima que prova a hipótese}
|
|
38
|
+
|
|
39
|
+
### Fora deste recorte (vira roadmap)
|
|
40
|
+
- {feature adiada e por quê — Should/Could/Won't}
|
|
41
|
+
|
|
42
|
+
## Requisitos Funcionais (FR)
|
|
43
|
+
|
|
44
|
+
> Cada FR rastreia a um objetivo e a uma dor. Sem rastro = não entra (No Invention, Art. IV).
|
|
45
|
+
|
|
46
|
+
| ID | Requisito | Rastreia a | Critério de aceite (verificável) |
|
|
47
|
+
|---|---|---|---|
|
|
48
|
+
| FR-1 | {o que o sistema deve fazer} | OBJ-{n} | {dado/quando/então — testável sim/não} |
|
|
49
|
+
|
|
50
|
+
## Requisitos Não-Funcionais (NFR)
|
|
51
|
+
|
|
52
|
+
> Performance, segurança, escala, acessibilidade, compliance. Cada um com critério mensurável.
|
|
53
|
+
|
|
54
|
+
| ID | Categoria | Requisito | Critério mensurável |
|
|
55
|
+
|---|---|---|---|
|
|
56
|
+
| NFR-1 | {performance/segurança/...} | {restrição de qualidade} | {limite numérico/verificável} |
|
|
57
|
+
|
|
58
|
+
## Restrições e Premissas
|
|
59
|
+
|
|
60
|
+
> Limites externos (CON) e suposições que, se falsas, mudam o plano.
|
|
61
|
+
|
|
62
|
+
- **CON-{n}:** {restrição técnica/legal/de negócio imposta de fora}
|
|
63
|
+
- **Premissa:** {suposição assumida — risco se for falsa}
|
|
64
|
+
|
|
65
|
+
## Personas e Jornadas
|
|
66
|
+
|
|
67
|
+
> Quem usa e como atravessa o produto. Só personas que tocam o MVP.
|
|
68
|
+
|
|
69
|
+
- **{Persona}:** {objetivo, contexto, dor principal}
|
|
70
|
+
- Jornada: {passos do gatilho ao resultado}
|
|
71
|
+
|
|
72
|
+
## Dependências e Riscos
|
|
73
|
+
|
|
74
|
+
| Tipo | Item | Impacto | Mitigação |
|
|
75
|
+
|---|---|---|---|
|
|
76
|
+
| Dependência | {serviço/dado/equipe externa} | {o que trava se faltar} | {plano} |
|
|
77
|
+
| Risco | {o que pode dar errado} | {severidade} | {como reduzir} |
|
|
78
|
+
|
|
79
|
+
## Fora de Escopo (explícito)
|
|
80
|
+
|
|
81
|
+
> O que este PRD deliberadamente NÃO cobre — para alinhar expectativa e proteger o recorte.
|
|
82
|
+
|
|
83
|
+
- {item fora de escopo}
|
|
84
|
+
|
|
85
|
+
## Marco de Quality Gates
|
|
86
|
+
|
|
87
|
+
> Qualidade entra no plano, não depois. Quais gates esta entrega atravessa.
|
|
88
|
+
|
|
89
|
+
- {gate previsto — ex.: validação @po, QA gate @qa, NFRs verificados}
|
|
90
|
+
|
|
91
|
+
## Próximos Passos
|
|
92
|
+
|
|
93
|
+
- Estruturar epics a partir deste PRD → `*create-epic` (@pm)
|
|
94
|
+
- Arquitetura e seleção de tecnologia → delegar a @architect
|
|
95
|
+
- Pesquisa pendente (se houver) → delegar a @analyst
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: project-brief-tmpl
|
|
3
|
+
kind: template
|
|
4
|
+
agent: analyst
|
|
5
|
+
produces: docs/research/{slug}-project-brief.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Project Brief: {nome do projeto}
|
|
9
|
+
|
|
10
|
+
**Status:** Draft
|
|
11
|
+
**Autor:** @analyst (Alex)
|
|
12
|
+
**Data:** {data}
|
|
13
|
+
**Decisão que este brief destrava:** {qual decisão de produto/escopo este documento serve}
|
|
14
|
+
|
|
15
|
+
## Resumo Executivo
|
|
16
|
+
|
|
17
|
+
> Uma síntese de 3-5 frases que qualquer leitor entende sem o resto do doc. O "portanto" no topo.
|
|
18
|
+
|
|
19
|
+
{problema central + público + solução proposta em alto nível + valor esperado}
|
|
20
|
+
|
|
21
|
+
## Problema
|
|
22
|
+
|
|
23
|
+
> O que dói, para quem, e por que importa agora. Cada afirmação rastreia a evidência ou vira hipótese marcada.
|
|
24
|
+
|
|
25
|
+
- **Dor:** {qual é o problema concreto}
|
|
26
|
+
- **Quem sofre:** {persona/segmento afetado}
|
|
27
|
+
- **Magnitude:** {frequência/custo/impacto — com fonte ou marcado [hipótese]}
|
|
28
|
+
- **Por que agora:** {gatilho temporal — mudança de mercado, regulação, tecnologia}
|
|
29
|
+
|
|
30
|
+
## Por que as soluções atuais falham
|
|
31
|
+
|
|
32
|
+
> O gap que justifica este projeto existir. Liga ao competitor-analysis quando houver.
|
|
33
|
+
|
|
34
|
+
- {alternativa atual} → {por que não resolve}
|
|
35
|
+
- {fonte: docs/research/{slug}-competitor-analysis.md ou marcado [hipótese]}
|
|
36
|
+
|
|
37
|
+
## Público-Alvo
|
|
38
|
+
|
|
39
|
+
> Quem usa e quem compra. Sem persona inventada — cada uma vem de pesquisa de usuário ou marcada como suposição.
|
|
40
|
+
|
|
41
|
+
### Segmento primário
|
|
42
|
+
- **Perfil:** {quem são}
|
|
43
|
+
- **Necessidade:** {o que precisam resolver}
|
|
44
|
+
- **Comportamento atual:** {como lidam hoje}
|
|
45
|
+
|
|
46
|
+
### Segmento secundário (se houver)
|
|
47
|
+
- {perfil e necessidade}
|
|
48
|
+
|
|
49
|
+
## Proposta de Valor
|
|
50
|
+
|
|
51
|
+
> Por que este público escolheria isto. Uma frase de posicionamento + diferenciais.
|
|
52
|
+
|
|
53
|
+
- **Posicionamento:** Para {público} que {necessidade}, {produto} é {categoria} que {benefício-chave}.
|
|
54
|
+
- **Diferenciais:** {1-3 pontos que tornam a solução distinta}
|
|
55
|
+
|
|
56
|
+
## Objetivos e Métricas de Sucesso
|
|
57
|
+
|
|
58
|
+
> O que "deu certo" significa, em números. Cada métrica é mensurável.
|
|
59
|
+
|
|
60
|
+
| Objetivo | Métrica | Alvo | Como medir |
|
|
61
|
+
|---|---|---|---|
|
|
62
|
+
| {objetivo de negócio} | {KPI} | {valor-alvo} | {fonte do dado} |
|
|
63
|
+
|
|
64
|
+
## Escopo
|
|
65
|
+
|
|
66
|
+
> A fronteira do projeto. Tão importante o que fica de fora quanto o que entra.
|
|
67
|
+
|
|
68
|
+
### Dentro do escopo (MVP)
|
|
69
|
+
- {capacidade incluída}
|
|
70
|
+
|
|
71
|
+
### Fora do escopo (por ora)
|
|
72
|
+
- {o que NÃO entra — e por quê}
|
|
73
|
+
|
|
74
|
+
## Restrições e Premissas
|
|
75
|
+
|
|
76
|
+
> Constraints reais (CON-*) e premissas que, se falsas, mudam tudo.
|
|
77
|
+
|
|
78
|
+
- **Restrições:** {orçamento, prazo, tecnologia, regulação — rotular CON-{n} se vira spec}
|
|
79
|
+
- **Premissas:** {o que assumimos verdadeiro — marcar para validar}
|
|
80
|
+
|
|
81
|
+
## Riscos
|
|
82
|
+
|
|
83
|
+
> O que pode dar errado. Cada risco com impacto e mitigação possível.
|
|
84
|
+
|
|
85
|
+
| Risco | Impacto | Probabilidade | Mitigação possível |
|
|
86
|
+
|---|---|---|---|
|
|
87
|
+
| {risco} | {alto/médio/baixo} | {alta/média/baixa} | {ação} |
|
|
88
|
+
|
|
89
|
+
## Perguntas em Aberto
|
|
90
|
+
|
|
91
|
+
> O que ainda não sabemos e precisa de pesquisa antes de avançar.
|
|
92
|
+
|
|
93
|
+
- {pergunta} → {como respondê-la: @analyst *research-prompt / @analyst *perform-market-research}
|
|
94
|
+
|
|
95
|
+
## Portanto — Próximos Passos
|
|
96
|
+
|
|
97
|
+
> O handoff acionável. Quem pega isto daqui e faz o quê.
|
|
98
|
+
|
|
99
|
+
1. {ação} → {@pm para PRD / @architect para viabilidade técnica / @analyst para pesquisa complementar}
|
|
100
|
+
2. {...}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: qa-verdict-tmpl
|
|
3
|
+
kind: template
|
|
4
|
+
agent: qa
|
|
5
|
+
produces: bloco <verdict> no output do @qa (persistido em .nexus/verdicts/<runId>-<taskId>.json)
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Veredito de QA — bloco `<verdict>`
|
|
9
|
+
|
|
10
|
+
O gate da Quinn tem duas faces. A **prosa** vai na seção "QA Results" da story (para humanos). O
|
|
11
|
+
**veredito estruturado** vai num bloco `<verdict>` no fim do output — o motor o parseia, valida contra
|
|
12
|
+
o contrato `QaVerdict` e persiste. Emita **exatamente um** bloco; dois é ambíguo e o motor descarta.
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
<verdict>
|
|
16
|
+
{
|
|
17
|
+
"verdict": "PASS | FAIL | BLOCKED",
|
|
18
|
+
"attempt": 1,
|
|
19
|
+
"issues": [
|
|
20
|
+
{
|
|
21
|
+
"categoria": "{ex.: layout, segurança, rastreabilidade, regressão}",
|
|
22
|
+
"severidade": "P0 | P1 | P2 | P3",
|
|
23
|
+
"expected": "{o que a AC/spec exige}",
|
|
24
|
+
"actual": "{o que de fato acontece — observado, não suposto}",
|
|
25
|
+
"evidence": "{prova: arquivo:linha, teste que falha, a.png == b.png, log}"
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"fixInstructions": ["{passo objetivo para o @dev consertar}"],
|
|
29
|
+
"filesToModify": [{ "path": "{arquivo}", "oQueMudar": "{o defeito preciso}" }],
|
|
30
|
+
"evidenceRefs": ["{captura/artefato: .nexus/evidence/<story>/home-1440.png}"]
|
|
31
|
+
}
|
|
32
|
+
</verdict>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Regras do contrato (o motor força)
|
|
36
|
+
|
|
37
|
+
- **`verdict: FAIL` exige ao menos 1 `issue`.** Reprovar sem apontar o defeito com evidência não existe
|
|
38
|
+
no Nexus — o boundary Zod recusa. Se você não consegue nomear a issue, você não tem um FAIL: tem uma
|
|
39
|
+
dúvida (investigue) ou um PASS.
|
|
40
|
+
- **`evidence` é obrigatória e não-vazia em toda issue.** "Parece errado" não é evidência. `arquivo:linha`,
|
|
41
|
+
o teste que falha, o diff de duas capturas, o log — isso é.
|
|
42
|
+
- **`attempt` vai de 1 a 3.** Reprovar 2–3 vezes é o processo funcionando, não falhando. Na 3ª sem
|
|
43
|
+
convergir, o veredito tende a `BLOCKED` (escala), não a um PASS por cansaço.
|
|
44
|
+
- **`PASS` sem `evidenceRefs`** é permitido pelo contrato, mas o gate `--reality` avisa: nota perfeita
|
|
45
|
+
sem prova é suspeita. Anexe o que você viu rodar.
|
|
46
|
+
|
|
47
|
+
## Exemplos
|
|
48
|
+
|
|
49
|
+
**PASS com evidência:**
|
|
50
|
+
```
|
|
51
|
+
<verdict>
|
|
52
|
+
{ "verdict": "PASS", "attempt": 1, "evidenceRefs": [".nexus/evidence/1.4/checkout-1440.png"] }
|
|
53
|
+
</verdict>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**FAIL rastreável (o @dev consegue consertar sem adivinhar):**
|
|
57
|
+
```
|
|
58
|
+
<verdict>
|
|
59
|
+
{
|
|
60
|
+
"verdict": "FAIL",
|
|
61
|
+
"attempt": 2,
|
|
62
|
+
"issues": [{
|
|
63
|
+
"categoria": "regressão",
|
|
64
|
+
"severidade": "P1",
|
|
65
|
+
"expected": "acordeão expande ao clicar (AC-3)",
|
|
66
|
+
"actual": "não expande — o handler não é registrado",
|
|
67
|
+
"evidence": "accordion-0-before.png == accordion-0-after.png (idênticos); Accordion.tsx:42"
|
|
68
|
+
}],
|
|
69
|
+
"fixInstructions": ["registrar onClick no item; adicionar teste que reproduz o não-expandir"],
|
|
70
|
+
"filesToModify": [{ "path": "src/Accordion.tsx", "oQueMudar": "bind do onClick ausente na linha 42" }]
|
|
71
|
+
}
|
|
72
|
+
</verdict>
|
|
73
|
+
```
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: rls-policies-tmpl
|
|
3
|
+
kind: template
|
|
4
|
+
agent: data-engineer
|
|
5
|
+
produces: docs/data-models/{dominio}-rls-policies.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# RLS Policies: {nome do domínio/módulo}
|
|
9
|
+
|
|
10
|
+
**Status:** Draft
|
|
11
|
+
**Banco-alvo:** {Supabase / PostgreSQL}
|
|
12
|
+
**Schema-fonte:** {docs/data-models/{dominio}-schema.md — as tabelas que estas políticas protegem}
|
|
13
|
+
|
|
14
|
+
## Contexto de Segurança
|
|
15
|
+
|
|
16
|
+
> RLS é projetada junto com o schema, não depois. Defesa em profundidade: RLS + FKs + CHECK + NOT NULL.
|
|
17
|
+
|
|
18
|
+
- **Modelo de tenancy:** {single-tenant / multi-tenant por org_id / por user_id}
|
|
19
|
+
- **Função de identidade:** {ex.: `auth.uid()` no Supabase — o que retorna}
|
|
20
|
+
- **Camada de auth presente?** {SIM/NÃO — se NÃO, `auth.uid()` retorna NULL e RLS não protege ainda}
|
|
21
|
+
- **service_role:** {bypassa RLS — onde e por que é usado, com justificativa}
|
|
22
|
+
|
|
23
|
+
## Tabelas e Cobertura
|
|
24
|
+
|
|
25
|
+
> Toda tabela pública exige RLS habilitada. Sem isso, a tabela não está pronta.
|
|
26
|
+
|
|
27
|
+
| Tabela | RLS habilitada | Chave de tenancy | Modo (KISS/granular) |
|
|
28
|
+
|---|---|---|---|
|
|
29
|
+
| {tabela} | {SIM/NÃO} | {user_id / org_id} | {KISS / granular} |
|
|
30
|
+
|
|
31
|
+
## Políticas por Tabela
|
|
32
|
+
|
|
33
|
+
### Tabela `{nome_tabela}`
|
|
34
|
+
|
|
35
|
+
**Habilitar RLS:**
|
|
36
|
+
|
|
37
|
+
```sql
|
|
38
|
+
ALTER TABLE {schema}.{nome_tabela} ENABLE ROW LEVEL SECURITY;
|
|
39
|
+
ALTER TABLE {schema}.{nome_tabela} FORCE ROW LEVEL SECURITY; -- se aplicável
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Políticas (por operação):**
|
|
43
|
+
|
|
44
|
+
| Operação | Nome da política | Roles | Regra (USING / WITH CHECK) |
|
|
45
|
+
|---|---|---|---|
|
|
46
|
+
| SELECT | {nome} | {authenticated/...} | {condição} |
|
|
47
|
+
| INSERT | {nome} | {...} | {WITH CHECK} |
|
|
48
|
+
| UPDATE | {nome} | {...} | {USING + WITH CHECK} |
|
|
49
|
+
| DELETE | {nome} | {...} | {USING} |
|
|
50
|
+
|
|
51
|
+
```sql
|
|
52
|
+
-- SELECT
|
|
53
|
+
CREATE POLICY {nome_select} ON {schema}.{nome_tabela}
|
|
54
|
+
FOR SELECT TO {role}
|
|
55
|
+
USING ({condição — ex.: user_id = auth.uid()});
|
|
56
|
+
|
|
57
|
+
-- INSERT
|
|
58
|
+
CREATE POLICY {nome_insert} ON {schema}.{nome_tabela}
|
|
59
|
+
FOR INSERT TO {role}
|
|
60
|
+
WITH CHECK ({condição});
|
|
61
|
+
|
|
62
|
+
-- UPDATE
|
|
63
|
+
CREATE POLICY {nome_update} ON {schema}.{nome_tabela}
|
|
64
|
+
FOR UPDATE TO {role}
|
|
65
|
+
USING ({condição}) WITH CHECK ({condição});
|
|
66
|
+
|
|
67
|
+
-- DELETE
|
|
68
|
+
CREATE POLICY {nome_delete} ON {schema}.{nome_tabela}
|
|
69
|
+
FOR DELETE TO {role}
|
|
70
|
+
USING ({condição});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Justificativa:** {por que esta política — qual acesso ela libera e qual ela barra}
|
|
74
|
+
|
|
75
|
+
## Casos de Teste (positivos E negativos)
|
|
76
|
+
|
|
77
|
+
> Toda política tem teste positivo (quem PODE acessa) e negativo (quem NÃO PODE é barrado). Emular via `*test-as-user {user_id}`.
|
|
78
|
+
|
|
79
|
+
| # | Tabela | Operação | Usuário emulado | Esperado (ACEITA/NEGA) | Justificativa |
|
|
80
|
+
|---|---|---|---|---|---|
|
|
81
|
+
| 1 | {tabela} | {SELECT/...} | {dono do dado} | ACEITA | {acesso legítimo} |
|
|
82
|
+
| 2 | {tabela} | {SELECT/...} | {outro tenant} | NEGA | {isolamento de tenant} |
|
|
83
|
+
| 3 | {tabela} | {INSERT/...} | {anônimo} | NEGA | {sem auth} |
|
|
84
|
+
|
|
85
|
+
## Riscos e Decisões Abertas
|
|
86
|
+
|
|
87
|
+
- {ex.: tabela sem chave de tenancy clara; uso de service_role que precisa de revisão; FK que cruza tenants}
|
|
88
|
+
|
|
89
|
+
## Change Log
|
|
90
|
+
|
|
91
|
+
| Data | Mudança | Autor |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| {data} | {o quê} | @data-engineer |
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: schema-design-tmpl
|
|
3
|
+
kind: template
|
|
4
|
+
agent: data-engineer
|
|
5
|
+
produces: docs/data-models/{dominio}-schema.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Schema Design: {nome do domínio/módulo}
|
|
9
|
+
|
|
10
|
+
**Status:** Draft
|
|
11
|
+
**Banco-alvo:** {PostgreSQL / Supabase / MySQL — versão}
|
|
12
|
+
**Fonte da arquitetura:** {docs/architecture/... — de onde vêm as entidades e o contexto}
|
|
13
|
+
|
|
14
|
+
## Contexto de Domínio
|
|
15
|
+
|
|
16
|
+
> O quadro completo antes do DDL. Sem isto, o schema vira palpite.
|
|
17
|
+
|
|
18
|
+
- **Entidades reais:** {as coisas do mundo do negócio que viram tabelas}
|
|
19
|
+
- **Relações principais:** {quem pertence a quem, cardinalidades}
|
|
20
|
+
- **Padrões de acesso:** {como os dados vão ser lidos e escritos — as queries quentes}
|
|
21
|
+
- **Escala esperada:** {volume por tabela, taxa de crescimento, hotpaths}
|
|
22
|
+
- **Restrições de segurança:** {multi-tenant? auth.uid()? dados sensíveis?}
|
|
23
|
+
|
|
24
|
+
## Modelo de Dados (visão lógica)
|
|
25
|
+
|
|
26
|
+
> Diagrama/lista de entidades e relações. Cada entidade rastreia a um requisito ou padrão de acesso documentado (No Invention).
|
|
27
|
+
|
|
28
|
+
| Entidade | Descrição | Relações | Fonte (FR/NFR/entidade) |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| {entidade} | {o que representa} | {FK → tabela} | {rastro} |
|
|
31
|
+
|
|
32
|
+
## Tabelas (DDL)
|
|
33
|
+
|
|
34
|
+
> Cada tabela com baseline obrigatório (`id`, `created_at`, `updated_at`), FKs explícitas e constraints que o banco faz cumprir. Soft delete (`deleted_at`) quando há trilha de auditoria.
|
|
35
|
+
|
|
36
|
+
### Tabela `{nome_tabela}`
|
|
37
|
+
|
|
38
|
+
**Propósito:** {por que esta tabela existe — o requisito que ela atende}
|
|
39
|
+
|
|
40
|
+
```sql
|
|
41
|
+
CREATE TABLE IF NOT EXISTS {schema}.{nome_tabela} (
|
|
42
|
+
id {uuid/bigint} PRIMARY KEY DEFAULT {gen_random_uuid()/...},
|
|
43
|
+
{coluna} {tipo} {NOT NULL/...} {DEFAULT ...},
|
|
44
|
+
-- FKs explícitas
|
|
45
|
+
{fk_coluna} {tipo} REFERENCES {schema}.{tabela_pai}(id) ON DELETE {RESTRICT/CASCADE/SET NULL},
|
|
46
|
+
-- baseline
|
|
47
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
48
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
49
|
+
deleted_at timestamptz, -- soft delete, se aplicável
|
|
50
|
+
-- constraints de integridade
|
|
51
|
+
CONSTRAINT {nome_check} CHECK ({condição})
|
|
52
|
+
);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Colunas:**
|
|
56
|
+
|
|
57
|
+
| Coluna | Tipo | Nullable | Default | Regra / Constraint |
|
|
58
|
+
|---|---|---|---|---|
|
|
59
|
+
| id | {tipo} | NO | {default} | PK |
|
|
60
|
+
| {coluna} | {tipo} | {SIM/NÃO} | {default} | {CHECK/UNIQUE/...} |
|
|
61
|
+
|
|
62
|
+
**Justificativa de normalização/desnormalização:** {por que normalizado ou onde desnormalizei e qual padrão de acesso justifica}
|
|
63
|
+
|
|
64
|
+
## Integridade Referencial
|
|
65
|
+
|
|
66
|
+
> Defesa em profundidade, no banco — não delegada à aplicação.
|
|
67
|
+
|
|
68
|
+
| FK | Tabela origem → destino | ON DELETE | Índice na FK? | Justificativa |
|
|
69
|
+
|---|---|---|---|---|
|
|
70
|
+
| {fk} | {origem} → {destino} | {ação} | {SIM/NÃO} | {por quê} |
|
|
71
|
+
|
|
72
|
+
## Constraints de Negócio
|
|
73
|
+
|
|
74
|
+
> Regras que o banco faz cumprir mesmo com bug na aplicação.
|
|
75
|
+
|
|
76
|
+
- **CHECK:** {constraint} — {regra de negócio que garante}
|
|
77
|
+
- **UNIQUE:** {coluna(s)} — {invariante que protege}
|
|
78
|
+
- **NOT NULL:** {colunas obrigatórias} — {por quê}
|
|
79
|
+
- **Triggers:** {nome} — {comportamento, ex.: `updated_at` automático}
|
|
80
|
+
|
|
81
|
+
## Estratégia de Índices
|
|
82
|
+
|
|
83
|
+
> Cada índice serve a uma query real de `## Contexto de Domínio`. Índice sem query que o justifique é peso morto.
|
|
84
|
+
|
|
85
|
+
| Índice | Tabela(s)/coluna(s) | Tipo | Query/padrão de acesso que justifica |
|
|
86
|
+
|---|---|---|---|
|
|
87
|
+
| {nome_idx} | {tabela(coluna)} | {btree/gin/...} | {query quente} |
|
|
88
|
+
|
|
89
|
+
## Segurança (RLS — visão de schema)
|
|
90
|
+
|
|
91
|
+
> Quais tabelas exigem Row Level Security. O detalhamento das políticas vai em `rls-policies-tmpl`.
|
|
92
|
+
|
|
93
|
+
| Tabela | RLS obrigatório? | Chave de tenancy | Observação |
|
|
94
|
+
|---|---|---|---|
|
|
95
|
+
| {tabela} | {SIM/NÃO} | {ex.: user_id / org_id} | {ex.: service_role bypassa} |
|
|
96
|
+
|
|
97
|
+
> Se não há camada de auth, registrar: `auth.uid()` retorna NULL — RLS não protege ainda.
|
|
98
|
+
|
|
99
|
+
## Riscos e Decisões Abertas
|
|
100
|
+
|
|
101
|
+
- {risco de modelagem, dívida registrada, decisão que depende do @architect}
|
|
102
|
+
|
|
103
|
+
## Change Log
|
|
104
|
+
|
|
105
|
+
| Data | Mudança | Autor |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| {data} | {o quê} | @data-engineer |
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: spec-tmpl
|
|
3
|
+
kind: template
|
|
4
|
+
agent: pm
|
|
5
|
+
produces: docs/specs/{slug}-spec.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Spec: {nome da feature}
|
|
9
|
+
|
|
10
|
+
**Status:** Draft
|
|
11
|
+
**Classe de complexidade:** {SIMPLE | STANDARD | COMPLEX}
|
|
12
|
+
**Requisitos de origem:** {docs/specs/{slug}-requirements.json}
|
|
13
|
+
**Autor:** @pm (Morgan)
|
|
14
|
+
**Data:** {data}
|
|
15
|
+
|
|
16
|
+
## Contexto e Problema
|
|
17
|
+
|
|
18
|
+
> O "por quê" elicitado no gather. Toda afirmação aqui rastreia a um requisito ou achado — No Invention.
|
|
19
|
+
|
|
20
|
+
- **Problema:** {a dor que motiva a spec}
|
|
21
|
+
- **Usuário/stakeholder:** {quem pediu e quem usa}
|
|
22
|
+
- **Resultado esperado:** {o que muda quando isto existir}
|
|
23
|
+
|
|
24
|
+
## Requisitos Formalizados
|
|
25
|
+
|
|
26
|
+
> Cada item carrega seu ID de origem (FR/NFR/CON ou achado de pesquisa). Sem origem = não entra.
|
|
27
|
+
|
|
28
|
+
### Funcionais
|
|
29
|
+
| ID | Requisito | Origem | Critério de aceite (verificável) |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| FR-1 | {comportamento esperado} | {req-id / achado} | {testável sim/não} |
|
|
32
|
+
|
|
33
|
+
### Não-Funcionais
|
|
34
|
+
| ID | Categoria | Requisito | Critério mensurável |
|
|
35
|
+
|---|---|---|---|
|
|
36
|
+
| NFR-1 | {performance/segurança/...} | {restrição} | {limite verificável} |
|
|
37
|
+
|
|
38
|
+
### Restrições
|
|
39
|
+
| ID | Restrição | Origem |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| CON-1 | {limite externo} | {req-id / decisão} |
|
|
42
|
+
|
|
43
|
+
## Comportamento Esperado
|
|
44
|
+
|
|
45
|
+
> Cenários no formato dado/quando/então. Cada cenário mapeia a um FR.
|
|
46
|
+
|
|
47
|
+
- **Cenário {n}** (FR-{x}): dado {contexto}, quando {ação}, então {resultado observável}.
|
|
48
|
+
|
|
49
|
+
## Interfaces e Contratos
|
|
50
|
+
|
|
51
|
+
> Entradas, saídas e contratos que a feature expõe ou consome. Estrutura, não implementação.
|
|
52
|
+
|
|
53
|
+
- **Entradas:** {dados/parâmetros}
|
|
54
|
+
- **Saídas:** {retorno/efeito}
|
|
55
|
+
- **Contrato/Interface:** {assinatura/forma do payload}
|
|
56
|
+
|
|
57
|
+
## Fora de Escopo
|
|
58
|
+
|
|
59
|
+
> O que esta spec deliberadamente NÃO cobre — protege o recorte e a crítica.
|
|
60
|
+
|
|
61
|
+
- {item excluído}
|
|
62
|
+
|
|
63
|
+
## Critérios de Aceite Globais
|
|
64
|
+
|
|
65
|
+
> Como a feature inteira é considerada concluída. Verificável.
|
|
66
|
+
|
|
67
|
+
1. {critério global testável}
|
|
68
|
+
|
|
69
|
+
## Riscos e Dependências
|
|
70
|
+
|
|
71
|
+
| Tipo | Item | Impacto | Mitigação |
|
|
72
|
+
|---|---|---|---|
|
|
73
|
+
| Dependência | {serviço/dado/spec} | {o que trava} | {plano} |
|
|
74
|
+
| Risco | {o que pode falhar} | {severidade} | {redução} |
|
|
75
|
+
|
|
76
|
+
## Gate de Rastreabilidade (No Invention, Art. IV)
|
|
77
|
+
|
|
78
|
+
> Cada FR/NFR/CON acima aponta para uma origem. Esta tabela prova o rastro — entrada para a crítica @qa.
|
|
79
|
+
|
|
80
|
+
| Item da spec | Origem rastreada |
|
|
81
|
+
|---|---|
|
|
82
|
+
| FR-{n} | {req-id / NFR / CON / achado de pesquisa} |
|
|
83
|
+
|
|
84
|
+
## Próximos Passos (Spec Pipeline)
|
|
85
|
+
|
|
86
|
+
- Crítica da spec → @qa (`critique.json`)
|
|
87
|
+
- Plano de implementação → @architect (`implementation.yaml`)
|
|
88
|
+
- Arquitetura/tecnologia → @architect
|