create-genia-os 1.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/bin/index.js +210 -0
- package/package.json +39 -0
- package/template/.claude/CLAUDE.md +215 -0
- package/template/.claude/agent-memory/analyst/MEMORY.md +20 -0
- package/template/.claude/agent-memory/architect/MEMORY.md +20 -0
- package/template/.claude/agent-memory/dev/MEMORY.md +20 -0
- package/template/.claude/agent-memory/devops/MEMORY.md +20 -0
- package/template/.claude/agent-memory/pm/MEMORY.md +20 -0
- package/template/.claude/agent-memory/po/MEMORY.md +20 -0
- package/template/.claude/agent-memory/qa/MEMORY.md +20 -0
- package/template/.claude/agent-memory/reviewer/MEMORY.md +20 -0
- package/template/.claude/agent-memory/sm/MEMORY.md +20 -0
- package/template/.claude/hooks/enforce-git-push-authority.py +70 -0
- package/template/.claude/hooks/precompact-session-digest.cjs +87 -0
- package/template/.claude/hooks/sql-governance.py +65 -0
- package/template/.claude/hooks/synapse-engine.cjs +122 -0
- package/template/.claude/hooks/write-path-validation.py +59 -0
- package/template/.claude/rules/agent-authority.md +39 -0
- package/template/.claude/rules/agent-handoff.md +71 -0
- package/template/.claude/rules/agent-memory.md +61 -0
- package/template/.claude/rules/ids-principles.md +52 -0
- package/template/.claude/rules/mcp-usage.md +49 -0
- package/template/.claude/rules/story-lifecycle.md +87 -0
- package/template/.claude/rules/workflow-execution.md +68 -0
- package/template/.claude/settings.json +58 -0
- package/template/.claude/settings.local.json +14 -0
- package/template/.genia/CONSTITUTION.md +129 -0
- package/template/.genia/contexts/api-patterns.md +134 -0
- package/template/.genia/contexts/nextjs-react.md +210 -0
- package/template/.genia/contexts/projeto.md +18 -0
- package/template/.genia/contexts/supabase.md +152 -0
- package/template/.genia/contexts/whatsapp-cloud.md +176 -0
- package/template/.genia/core-config.yaml +192 -0
- package/template/.genia/development/agents/analyst.md +138 -0
- package/template/.genia/development/agents/architect.md +171 -0
- package/template/.genia/development/agents/dev.md +160 -0
- package/template/.genia/development/agents/devops.md +200 -0
- package/template/.genia/development/agents/pm.md +142 -0
- package/template/.genia/development/agents/po.md +165 -0
- package/template/.genia/development/agents/qa.md +183 -0
- package/template/.genia/development/agents/reviewer.md +198 -0
- package/template/.genia/development/agents/sm.md +230 -0
- package/template/.genia/development/checklists/architecture-review.md +189 -0
- package/template/.genia/development/checklists/pre-commit.md +205 -0
- package/template/.genia/development/checklists/pre-deploy.md +230 -0
- package/template/.genia/development/checklists/qa-gate.md +216 -0
- package/template/.genia/development/checklists/story-dod.md +155 -0
- package/template/.genia/development/tasks/code-review.md +197 -0
- package/template/.genia/development/tasks/criar-prd.md +170 -0
- package/template/.genia/development/tasks/criar-spec.md +188 -0
- package/template/.genia/development/tasks/criar-story.md +185 -0
- package/template/.genia/development/tasks/debug-sistematico.md +230 -0
- package/template/.genia/development/tasks/dev-implement.md +199 -0
- package/template/.genia/development/tasks/qa-review.md +224 -0
- package/template/.genia/development/workflows/brownfield.md +178 -0
- package/template/.genia/development/workflows/delivery.md +208 -0
- package/template/.genia/development/workflows/development.md +189 -0
- package/template/.genia/development/workflows/greenfield.md +166 -0
- package/template/.genia/development/workflows/planning.md +167 -0
- package/template/.genia/development/workflows/qa-loop.md +179 -0
- package/template/.genia/development/workflows/spec-pipeline.md +192 -0
- package/template/.genia/development/workflows/story-development-cycle.md +252 -0
- package/template/.genia/guidelines/clean-code.md +98 -0
- package/template/.genia/guidelines/testing.md +176 -0
- package/template/.genia/skills/design/canvas-design.md +109 -0
- package/template/.genia/skills/design/frontend-design.md +140 -0
- package/template/.genia/skills/dev/mcp-builder.md +172 -0
- package/template/.genia/skills/dev/webapp-testing.md +150 -0
- package/template/.genia/skills/documents/docx.md +153 -0
- package/template/.genia/skills/documents/pdf.md +134 -0
- package/template/.genia/skills/documents/pptx.md +118 -0
- package/template/.genia/skills/documents/xlsx.md +140 -0
- package/template/.synapse/agent-analyst +8 -0
- package/template/.synapse/agent-architect +8 -0
- package/template/.synapse/agent-dev +8 -0
- package/template/.synapse/agent-devops +8 -0
- package/template/.synapse/agent-pm +8 -0
- package/template/.synapse/agent-po +7 -0
- package/template/.synapse/agent-qa +8 -0
- package/template/.synapse/agent-reviewer +7 -0
- package/template/.synapse/agent-sm +7 -0
- package/template/.synapse/constitution +7 -0
- package/template/.synapse/context +8 -0
- package/template/.synapse/global +8 -0
- package/template/.synapse/manifest +14 -0
- package/template/README.md +53 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Ciclo de Vida de Stories — GEN.IA OS
|
|
2
|
+
|
|
3
|
+
## Estados
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
Draft → Ready → InProgress → InReview → Done
|
|
7
|
+
↘ Blocked
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Responsabilidades por Estado
|
|
11
|
+
|
|
12
|
+
| Estado | Responsável | O que acontece |
|
|
13
|
+
|--------|-------------|----------------|
|
|
14
|
+
| **Draft** | @sm | Cria story com template padrão |
|
|
15
|
+
| **Ready** | @po | Valida com checklist 10 pontos |
|
|
16
|
+
| **InProgress** | @dev | Implementa o código |
|
|
17
|
+
| **InReview** | @qa + @reviewer | Testa e revisa código |
|
|
18
|
+
| **Done** | @devops | Faz push/PR; @pm atualiza backlog |
|
|
19
|
+
| **Blocked** | agente atual | Documenta blocker e escalona |
|
|
20
|
+
|
|
21
|
+
## Checklist de Validação — @po (10 pontos obrigatórios)
|
|
22
|
+
|
|
23
|
+
- [ ] Título claro e acionável (verbo + objeto)
|
|
24
|
+
- [ ] Formato: "Como [persona] quero [ação] para [benefício]"
|
|
25
|
+
- [ ] Acceptance criteria definidos (mínimo 3 critérios)
|
|
26
|
+
- [ ] Tasks técnicas listadas (mínimo 2 tasks)
|
|
27
|
+
- [ ] Dependências de outras stories mapeadas
|
|
28
|
+
- [ ] Estimativa de esforço definida (P/M/G/XG)
|
|
29
|
+
- [ ] Nome da branch definido: `tipo/STORY-NNN-slug`
|
|
30
|
+
- [ ] Arquivos a criar/modificar listados
|
|
31
|
+
- [ ] Testes necessários identificados
|
|
32
|
+
- [ ] Riscos e pontos de atenção documentados
|
|
33
|
+
|
|
34
|
+
**Story com menos de 8 pontos = REJEITADA pelo @po**
|
|
35
|
+
|
|
36
|
+
## Localização das Stories
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
docs/stories/STORY-[NNN]-[slug].md
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Exemplo: `docs/stories/STORY-001-autenticacao-usuario.md`
|
|
43
|
+
|
|
44
|
+
## Atualização de Status na Story
|
|
45
|
+
|
|
46
|
+
Sempre atualizar o cabeçalho quando mudar de estado:
|
|
47
|
+
|
|
48
|
+
```markdown
|
|
49
|
+
**Status:** InProgress
|
|
50
|
+
**Agente:** @dev
|
|
51
|
+
**Atualizado:** 2026-02-24
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Template de Story
|
|
55
|
+
|
|
56
|
+
```markdown
|
|
57
|
+
# STORY-NNN — Título da Story
|
|
58
|
+
|
|
59
|
+
**Status:** Draft
|
|
60
|
+
**Agente:** @sm
|
|
61
|
+
**Criado:** YYYY-MM-DD
|
|
62
|
+
**Estimativa:** M
|
|
63
|
+
|
|
64
|
+
## Descrição
|
|
65
|
+
Como [persona] quero [ação] para [benefício].
|
|
66
|
+
|
|
67
|
+
## Acceptance Criteria
|
|
68
|
+
- [ ] AC1: ...
|
|
69
|
+
- [ ] AC2: ...
|
|
70
|
+
- [ ] AC3: ...
|
|
71
|
+
|
|
72
|
+
## Tasks Técnicas
|
|
73
|
+
- [ ] Task 1: ...
|
|
74
|
+
- [ ] Task 2: ...
|
|
75
|
+
|
|
76
|
+
## Branch
|
|
77
|
+
`feat/STORY-NNN-slug`
|
|
78
|
+
|
|
79
|
+
## Arquivos Envolvidos
|
|
80
|
+
- `src/...`
|
|
81
|
+
|
|
82
|
+
## Dependências
|
|
83
|
+
- STORY-XXX (se houver)
|
|
84
|
+
|
|
85
|
+
## Riscos
|
|
86
|
+
- ...
|
|
87
|
+
```
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Execução de Workflows — GEN.IA OS
|
|
2
|
+
|
|
3
|
+
## Seleção de Workflow
|
|
4
|
+
|
|
5
|
+
| Situação | Workflow |
|
|
6
|
+
|----------|----------|
|
|
7
|
+
| Projeto do zero | greenfield → spec-pipeline → SDC |
|
|
8
|
+
| Evoluir sistema existente | brownfield → spec-pipeline → SDC |
|
|
9
|
+
| Nova feature isolada | spec-pipeline → SDC |
|
|
10
|
+
| Corrigir bug | debug-sistematico → SDC |
|
|
11
|
+
| Sprint completa | planning → development → delivery |
|
|
12
|
+
|
|
13
|
+
## Chains Principais
|
|
14
|
+
|
|
15
|
+
**1. Spec Pipeline** (quando)
|
|
16
|
+
```
|
|
17
|
+
@analyst briefing → @pm PRD → @architect SPEC → @po aprovação
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**2. Story Development Cycle (SDC)** (core do desenvolvimento)
|
|
21
|
+
```
|
|
22
|
+
@sm draft → @po valida → @dev implementa → @qa revisa → @reviewer code review → @devops push/PR
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**3. QA Loop** (iterativo, máx 5x)
|
|
26
|
+
```
|
|
27
|
+
@qa revisa → @dev corrige → @qa re-revisa → (aprovado?) → @reviewer
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**4. Delivery**
|
|
31
|
+
```
|
|
32
|
+
@pm decisão → @devops deploy → @pm valida → @pm comunica
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Princípio Task-First
|
|
36
|
+
|
|
37
|
+
Antes de executar qualquer ação, identificar qual task em `.genia/development/tasks/` se aplica:
|
|
38
|
+
- Criar PRD → usar `criar-prd.md`
|
|
39
|
+
- Criar SPEC → usar `criar-spec.md`
|
|
40
|
+
- Criar story → usar `criar-story.md`
|
|
41
|
+
- Implementar → usar `dev-implement.md`
|
|
42
|
+
- Revisar QA → usar `qa-review.md`
|
|
43
|
+
- Debug → usar `debug-sistematico.md`
|
|
44
|
+
- Code review → usar `code-review.md`
|
|
45
|
+
|
|
46
|
+
## Estado de Workflow
|
|
47
|
+
|
|
48
|
+
Ao iniciar workflow de múltiplas fases, criar registro em:
|
|
49
|
+
`.genia/session/workflow-state.md`
|
|
50
|
+
|
|
51
|
+
```markdown
|
|
52
|
+
# Workflow State
|
|
53
|
+
Workflow: spec-pipeline
|
|
54
|
+
Fase atual: 2 — PRD
|
|
55
|
+
Agente: @pm
|
|
56
|
+
Projeto: [nome]
|
|
57
|
+
Iniciado: YYYY-MM-DD
|
|
58
|
+
Próximo: @architect (SPEC-TECNICO)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Complexidade e Estimativas
|
|
62
|
+
|
|
63
|
+
| Classe | Esforço | Uso |
|
|
64
|
+
|--------|---------|-----|
|
|
65
|
+
| P (Pequeno) | < 2h | Bug fix, texto, config |
|
|
66
|
+
| M (Médio) | 2-8h | Feature simples, CRUD |
|
|
67
|
+
| G (Grande) | 1-3 dias | Feature complexa, integração |
|
|
68
|
+
| XG (Extra Grande) | > 3 dias | Epic, refatoração grande |
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"deny": [
|
|
4
|
+
"Bash(git push --force*)",
|
|
5
|
+
"Bash(rm -rf .genia/CONSTITUTION.md)",
|
|
6
|
+
"Bash(rm -rf .genia/development/workflows/*)",
|
|
7
|
+
"Bash(rm -rf .genia/development/tasks/*)",
|
|
8
|
+
"Bash(rm -rf .claude/hooks/*)",
|
|
9
|
+
"Bash(rm -rf .claude/rules/*)"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
"hooks": {
|
|
13
|
+
"UserPromptSubmit": [
|
|
14
|
+
{
|
|
15
|
+
"hooks": [
|
|
16
|
+
{
|
|
17
|
+
"type": "command",
|
|
18
|
+
"command": "bash -c \"cd \\\"$(git rev-parse --show-toplevel)\\\" && node .claude/hooks/synapse-engine.cjs\""
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"PreCompact": [
|
|
24
|
+
{
|
|
25
|
+
"hooks": [
|
|
26
|
+
{
|
|
27
|
+
"type": "command",
|
|
28
|
+
"command": "bash -c \"cd \\\"$(git rev-parse --show-toplevel)\\\" && node .claude/hooks/precompact-session-digest.cjs\""
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"PreToolUse": [
|
|
34
|
+
{
|
|
35
|
+
"matcher": "Bash",
|
|
36
|
+
"hooks": [
|
|
37
|
+
{
|
|
38
|
+
"type": "command",
|
|
39
|
+
"command": "bash -c \"cd \\\"$(git rev-parse --show-toplevel)\\\" && python .claude/hooks/enforce-git-push-authority.py\""
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"type": "command",
|
|
43
|
+
"command": "bash -c \"cd \\\"$(git rev-parse --show-toplevel)\\\" && python .claude/hooks/sql-governance.py\""
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"matcher": "Write",
|
|
49
|
+
"hooks": [
|
|
50
|
+
{
|
|
51
|
+
"type": "command",
|
|
52
|
+
"command": "bash -c \"cd \\\"$(git rev-parse --show-toplevel)\\\" && python .claude/hooks/write-path-validation.py\""
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(node --version)",
|
|
5
|
+
"Bash(npm --version)",
|
|
6
|
+
"Bash(git*)",
|
|
7
|
+
"Bash(pip --version)",
|
|
8
|
+
"Bash(python*)",
|
|
9
|
+
"Bash(gh*)",
|
|
10
|
+
"Bash(node \".claude/hooks/synapse-engine.cjs\")",
|
|
11
|
+
"Bash(node \".claude/hooks/precompact-session-digest.cjs\")"
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# CONSTITUIÇÃO GEN.IA OS v1.0
|
|
2
|
+
|
|
3
|
+
> Sistema de governança do GEN.IA OS — {{TEAM_NAME}}
|
|
4
|
+
> Criadora: {{CREATOR_NAME}} | Versão: 1.0.0 | Ratificada: {{SETUP_DATE}}
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## ARTIGO I — CLI First (NÃO-NEGOCIÁVEL)
|
|
9
|
+
|
|
10
|
+
O Claude Code é a fonte de verdade. Toda ação passa pelos hooks de governança.
|
|
11
|
+
|
|
12
|
+
**VIOLAÇÃO → BLOQUEIO automático.**
|
|
13
|
+
|
|
14
|
+
Nenhuma ferramenta externa, painel ou interface bypassa o sistema de governança do GEN.IA OS. Toda modificação de código, configuração ou infraestrutura DEVE ser rastreável via CLI e registrada nos logs de auditoria. Ações realizadas fora do fluxo de hooks são consideradas não-autorizadas e podem comprometer a integridade do sistema.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## ARTIGO II — Autoridade do Agente (NÃO-NEGOCIÁVEL)
|
|
19
|
+
|
|
20
|
+
Cada agente tem autoridade exclusiva em seu domínio. Agentes DEVEM delegar quando a ação estiver fora de seu escopo.
|
|
21
|
+
|
|
22
|
+
- **@devops** é o ÚNICO que pode executar `git push`, criar Pull Requests e realizar releases
|
|
23
|
+
- **@architect** tem veto técnico irrevogável sobre decisões de arquitetura e stack
|
|
24
|
+
- **@sm** é o ÚNICO que cria e altera Stories formalmente
|
|
25
|
+
- **@po** é o ÚNICO que valida e aprova Stories para desenvolvimento
|
|
26
|
+
- **@pm** é o ÚNICO que aprova mudanças de escopo e PRD
|
|
27
|
+
|
|
28
|
+
**VIOLAÇÃO → BLOQUEIO automático.**
|
|
29
|
+
|
|
30
|
+
Nenhum agente deve agir fora de sua autoridade, mesmo que tecnicamente capaz. A separação de responsabilidades é a garantia de rastreabilidade e qualidade do sistema. Quando em dúvida, delegar é obrigatório.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## ARTIGO III — Story-Driven Development (OBRIGATÓRIO)
|
|
35
|
+
|
|
36
|
+
Nenhuma linha de código pode ser escrita sem uma Story aprovada por @po. Toda Story deve ter:
|
|
37
|
+
|
|
38
|
+
- Título claro e objetivo
|
|
39
|
+
- Descrição no formato "Como [persona], quero [ação], para [benefício]"
|
|
40
|
+
- Acceptance Criteria mensuráveis e verificáveis
|
|
41
|
+
- Estimativa de esforço acordada
|
|
42
|
+
- Épico pai identificado
|
|
43
|
+
|
|
44
|
+
**VIOLAÇÃO → AVISO + documentar justificativa obrigatória.**
|
|
45
|
+
|
|
46
|
+
A Story é o contrato entre negócio e técnica. Código sem Story é trabalho não rastreável, não validável e potencialmente fora de escopo. Em situações de emergência documentadas, @architect pode autorizar exceção com registro formal.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## ARTIGO IV — Sem Invenção (OBRIGATÓRIO)
|
|
51
|
+
|
|
52
|
+
Agentes derivam especificações APENAS de requisitos explicitamente declarados em briefing, PRD ou SPEC-TECNICO.
|
|
53
|
+
|
|
54
|
+
Funcionalidades não especificadas são **estritamente proibidas**.
|
|
55
|
+
|
|
56
|
+
**VIOLAÇÃO → AVISO + justificativa obrigatória.**
|
|
57
|
+
|
|
58
|
+
A criatividade técnica é bem-vinda na escolha de COMO implementar, nunca no QUE implementar. Se um requisito parece faltar, o agente DEVE questionar e solicitar clarificação ao @pm ou @po, nunca assumir ou inventar. Isso protege o produto de scope creep não intencional.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## ARTIGO V — Qualidade Primeiro (OBRIGATÓRIO)
|
|
63
|
+
|
|
64
|
+
Lint, testes unitários e build bem-sucedido são pré-requisitos para qualquer entrega.
|
|
65
|
+
|
|
66
|
+
**VIOLAÇÃO → BLOQUEIO de delivery.**
|
|
67
|
+
|
|
68
|
+
Qualidade não é opcional nem negociável por prazo. Os quality gates existem para proteger a estabilidade do sistema em produção. Exceções documentadas devem ser aprovadas por @architect e @qa, com plano de remediação obrigatório.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## ARTIGO VI — Imports Absolutos (RECOMENDADO)
|
|
73
|
+
|
|
74
|
+
Sempre utilizar `@/` como alias de importação raiz. Caminhos relativos com múltiplos `../` são proibidos.
|
|
75
|
+
|
|
76
|
+
**VIOLAÇÃO → AVISO informacional.**
|
|
77
|
+
|
|
78
|
+
Imports absolutos melhoram a legibilidade, facilitam refatorações e reduzem erros ao mover arquivos. Esta convenção deve ser configurada no `tsconfig.json` e aplicada em todo o projeto.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Hierarquia de Autoridade
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
NÍVEL 3 — Decisão Final
|
|
86
|
+
└── @architect — veto técnico irrevogável, guardiã da arquitetura
|
|
87
|
+
|
|
88
|
+
NÍVEL 2 — Gestão e Validação
|
|
89
|
+
├── @pm — PRD, escopo, priorização, stakeholders, épicos
|
|
90
|
+
├── @po — validação de stories, backlog, acceptance criteria
|
|
91
|
+
└── @analyst — requisitos, regras de negócio, briefing
|
|
92
|
+
|
|
93
|
+
NÍVEL 1 — Execução
|
|
94
|
+
├── @dev — implementação de código (SEM permissão de push)
|
|
95
|
+
├── @devops — push, PR, release, configuração MCP/CI (ÚNICO com push)
|
|
96
|
+
├── @qa — design e execução de testes, veredictos de qualidade
|
|
97
|
+
├── @reviewer — code review, padrões de código, aprovação formal
|
|
98
|
+
└── @sm — criação de stories, gestão de sprint, facilitação
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Processo de Emenda à Constituição
|
|
104
|
+
|
|
105
|
+
Para alterar qualquer artigo desta Constituição:
|
|
106
|
+
|
|
107
|
+
1. **Proposta formal** — Qualquer agente pode propor via documento `EMENDA-XXX.md`
|
|
108
|
+
2. **Justificativa obrigatória** — Motivação clara com impacto nos processos existentes
|
|
109
|
+
3. **Aprovação dupla** — Requer concordância de @architect E @pm
|
|
110
|
+
4. **Versionamento semântico:**
|
|
111
|
+
- **MAJOR** (ex: 1.0.0 → 2.0.0): mudança breaking em artigos NÃO-NEGOCIÁVEIS
|
|
112
|
+
- **MINOR** (ex: 1.0.0 → 1.1.0): adição de novo artigo ou expansão significativa
|
|
113
|
+
- **PATCH** (ex: 1.0.0 → 1.0.1): clarificação, correção de texto, sem mudança de regra
|
|
114
|
+
5. **Propagação** — Atualizar tasks, templates e workflows afetados
|
|
115
|
+
6. **Comunicação** — Notificar todos os agentes sobre a mudança
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Penalidades e Enforcement
|
|
120
|
+
|
|
121
|
+
| Severidade | Violação | Consequência |
|
|
122
|
+
|-----------|---------|-------------|
|
|
123
|
+
| CRÍTICA | Artigo I ou II | Bloqueio automático da ação + log de auditoria |
|
|
124
|
+
| ALTA | Artigo III, IV ou V | Aviso formal + documentação de justificativa |
|
|
125
|
+
| MÉDIA | Artigo VI | Aviso informacional + correção na próxima iteração |
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
*GEN.IA OS v1.0 — {{TEAM_NAME}} — {{CREATOR_NAME}} — Ratificada em 2026-02-24*
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Contexto: API Patterns
|
|
2
|
+
|
|
3
|
+
> Principios de design de API e tomada de decisao.
|
|
4
|
+
|
|
5
|
+
## Mapa de Conteudo
|
|
6
|
+
|
|
7
|
+
| Topico | Quando Usar |
|
|
8
|
+
|--------|-------------|
|
|
9
|
+
| REST vs GraphQL vs tRPC | Escolher tipo de API |
|
|
10
|
+
| Resource naming, HTTP methods | Design REST |
|
|
11
|
+
| Envelope pattern, error format | Estrutura de resposta |
|
|
12
|
+
| Schema design | GraphQL |
|
|
13
|
+
| Type safety | TS fullstack |
|
|
14
|
+
|
|
15
|
+
## Arvore de Decisao: Escolher Tipo de API
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Projeto → TypeScript monorepo?
|
|
19
|
+
├── Sim → tRPC (type safety end-to-end)
|
|
20
|
+
│
|
|
21
|
+
└── Nao → Clientes diversos?
|
|
22
|
+
├── Sim → REST (universal, cacheable)
|
|
23
|
+
│
|
|
24
|
+
└── Nao → Queries complexas?
|
|
25
|
+
├── Sim → GraphQL (flexivel, self-documenting)
|
|
26
|
+
└── Nao → REST (simples, padrao da industria)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## REST Design
|
|
30
|
+
|
|
31
|
+
### Naming de Recursos
|
|
32
|
+
```
|
|
33
|
+
GET /users # Lista
|
|
34
|
+
GET /users/{id} # Detalhe
|
|
35
|
+
POST /users # Criar
|
|
36
|
+
PUT /users/{id} # Atualizar (completo)
|
|
37
|
+
PATCH /users/{id} # Atualizar (parcial)
|
|
38
|
+
DELETE /users/{id} # Remover
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Status Codes
|
|
42
|
+
| Code | Uso |
|
|
43
|
+
|------|-----|
|
|
44
|
+
| 200 | OK - Sucesso |
|
|
45
|
+
| 201 | Created - Recurso criado |
|
|
46
|
+
| 204 | No Content - Deletado |
|
|
47
|
+
| 400 | Bad Request - Input invalido |
|
|
48
|
+
| 401 | Unauthorized - Nao autenticado |
|
|
49
|
+
| 403 | Forbidden - Sem permissao |
|
|
50
|
+
| 404 | Not Found - Recurso nao existe |
|
|
51
|
+
| 422 | Unprocessable - Validacao falhou |
|
|
52
|
+
| 500 | Internal Error - Erro do servidor |
|
|
53
|
+
|
|
54
|
+
## Formato de Resposta
|
|
55
|
+
|
|
56
|
+
### Sucesso
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"data": { ... },
|
|
60
|
+
"meta": {
|
|
61
|
+
"pagination": { "page": 1, "total": 100 }
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Erro
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"error": {
|
|
70
|
+
"code": "VALIDATION_ERROR",
|
|
71
|
+
"message": "Email invalido",
|
|
72
|
+
"details": [
|
|
73
|
+
{ "field": "email", "message": "Formato invalido" }
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Paginacao
|
|
80
|
+
|
|
81
|
+
### Offset-based
|
|
82
|
+
```
|
|
83
|
+
GET /users?page=2&limit=20
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Cursor-based (recomendado para grandes volumes)
|
|
87
|
+
```
|
|
88
|
+
GET /users?cursor=abc123&limit=20
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Versionamento
|
|
92
|
+
|
|
93
|
+
| Metodo | Exemplo | Uso |
|
|
94
|
+
|--------|---------|-----|
|
|
95
|
+
| URI | `/v1/users` | Mais comum, facil |
|
|
96
|
+
| Header | `Accept: application/vnd.api.v1+json` | Mais limpo |
|
|
97
|
+
| Query | `/users?version=1` | Nao recomendado |
|
|
98
|
+
|
|
99
|
+
## Autenticacao
|
|
100
|
+
|
|
101
|
+
| Metodo | Quando Usar |
|
|
102
|
+
|--------|-------------|
|
|
103
|
+
| JWT | SPAs, mobile apps |
|
|
104
|
+
| API Keys | Servicos, integracao |
|
|
105
|
+
| OAuth 2.0 | Login social, terceiros |
|
|
106
|
+
| Session | Apps tradicionais |
|
|
107
|
+
|
|
108
|
+
## Rate Limiting
|
|
109
|
+
|
|
110
|
+
### Headers de Resposta
|
|
111
|
+
```
|
|
112
|
+
X-RateLimit-Limit: 100
|
|
113
|
+
X-RateLimit-Remaining: 95
|
|
114
|
+
X-RateLimit-Reset: 1640995200
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Anti-Patterns
|
|
118
|
+
|
|
119
|
+
| NAO Fazer | Fazer |
|
|
120
|
+
|-----------|-------|
|
|
121
|
+
| `/getUsers` | `GET /users` |
|
|
122
|
+
| `/createUser` | `POST /users` |
|
|
123
|
+
| Retornar 200 para erros | Usar status codes corretos |
|
|
124
|
+
| Expor erros internos | Mensagens genericas |
|
|
125
|
+
| Pular rate limiting | Sempre limitar |
|
|
126
|
+
|
|
127
|
+
## Checklist
|
|
128
|
+
|
|
129
|
+
- [ ] Escolhi estilo de API para o contexto?
|
|
130
|
+
- [ ] Formato de resposta consistente?
|
|
131
|
+
- [ ] Estrategia de versionamento?
|
|
132
|
+
- [ ] Autenticacao definida?
|
|
133
|
+
- [ ] Rate limiting planejado?
|
|
134
|
+
- [ ] Documentacao (OpenAPI)?
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Contexto: Next.js & React
|
|
2
|
+
|
|
3
|
+
> Patterns de performance e boas praticas para Next.js e React.
|
|
4
|
+
|
|
5
|
+
## Eliminando Waterfalls
|
|
6
|
+
|
|
7
|
+
### Problema: Requests Sequenciais
|
|
8
|
+
```typescript
|
|
9
|
+
// ERRADO - waterfall
|
|
10
|
+
const user = await getUser(id);
|
|
11
|
+
const posts = await getPosts(user.id);
|
|
12
|
+
const comments = await getComments(posts);
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Solucao: Parallelizar
|
|
16
|
+
```typescript
|
|
17
|
+
// CORRETO - paralelo
|
|
18
|
+
const [user, posts] = await Promise.all([
|
|
19
|
+
getUser(id),
|
|
20
|
+
getPosts(id)
|
|
21
|
+
]);
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Bundle Size Optimization
|
|
25
|
+
|
|
26
|
+
### Code Splitting
|
|
27
|
+
```typescript
|
|
28
|
+
// Dynamic imports
|
|
29
|
+
const HeavyComponent = dynamic(() => import('./Heavy'), {
|
|
30
|
+
loading: () => <Skeleton />
|
|
31
|
+
});
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Tree Shaking
|
|
35
|
+
```typescript
|
|
36
|
+
// ERRADO - importa tudo
|
|
37
|
+
import _ from 'lodash';
|
|
38
|
+
|
|
39
|
+
// CORRETO - importa so o necessario
|
|
40
|
+
import debounce from 'lodash/debounce';
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Server-Side Performance
|
|
44
|
+
|
|
45
|
+
### Streaming
|
|
46
|
+
```typescript
|
|
47
|
+
// app/page.tsx
|
|
48
|
+
export default function Page() {
|
|
49
|
+
return (
|
|
50
|
+
<main>
|
|
51
|
+
<Header />
|
|
52
|
+
<Suspense fallback={<Loading />}>
|
|
53
|
+
<SlowComponent />
|
|
54
|
+
</Suspense>
|
|
55
|
+
</main>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Caching
|
|
61
|
+
```typescript
|
|
62
|
+
// Revalidate a cada hora
|
|
63
|
+
export const revalidate = 3600;
|
|
64
|
+
|
|
65
|
+
// Ou fetch com cache
|
|
66
|
+
const data = await fetch(url, {
|
|
67
|
+
next: { revalidate: 3600 }
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Client-Side Data Fetching
|
|
72
|
+
|
|
73
|
+
### SWR ou React Query
|
|
74
|
+
```typescript
|
|
75
|
+
import useSWR from 'swr';
|
|
76
|
+
|
|
77
|
+
function Profile() {
|
|
78
|
+
const { data, error, isLoading } = useSWR('/api/user', fetcher);
|
|
79
|
+
|
|
80
|
+
if (isLoading) return <Loading />;
|
|
81
|
+
if (error) return <Error />;
|
|
82
|
+
return <User data={data} />;
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Re-render Optimization
|
|
87
|
+
|
|
88
|
+
### useMemo para calculos pesados
|
|
89
|
+
```typescript
|
|
90
|
+
const expensiveValue = useMemo(() => {
|
|
91
|
+
return heavyCalculation(data);
|
|
92
|
+
}, [data]);
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### useCallback para funcoes
|
|
96
|
+
```typescript
|
|
97
|
+
const handleClick = useCallback(() => {
|
|
98
|
+
doSomething(id);
|
|
99
|
+
}, [id]);
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### React.memo para componentes
|
|
103
|
+
```typescript
|
|
104
|
+
const Card = React.memo(function Card({ user }) {
|
|
105
|
+
return <div>{user.name}</div>;
|
|
106
|
+
});
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Rendering Performance
|
|
110
|
+
|
|
111
|
+
### Keys corretas
|
|
112
|
+
```typescript
|
|
113
|
+
// ERRADO - index como key
|
|
114
|
+
{items.map((item, i) => <Item key={i} />)}
|
|
115
|
+
|
|
116
|
+
// CORRETO - id unico
|
|
117
|
+
{items.map(item => <Item key={item.id} />)}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Virtualizacao para listas longas
|
|
121
|
+
```typescript
|
|
122
|
+
import { FixedSizeList } from 'react-window';
|
|
123
|
+
|
|
124
|
+
<FixedSizeList
|
|
125
|
+
height={400}
|
|
126
|
+
itemCount={1000}
|
|
127
|
+
itemSize={35}
|
|
128
|
+
>
|
|
129
|
+
{Row}
|
|
130
|
+
</FixedSizeList>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## JavaScript Performance
|
|
134
|
+
|
|
135
|
+
### Debounce inputs
|
|
136
|
+
```typescript
|
|
137
|
+
const debouncedSearch = useDebouncedCallback(
|
|
138
|
+
(value) => search(value),
|
|
139
|
+
300
|
|
140
|
+
);
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Web Workers para calculos pesados
|
|
144
|
+
```typescript
|
|
145
|
+
const worker = new Worker('/worker.js');
|
|
146
|
+
worker.postMessage(heavyData);
|
|
147
|
+
worker.onmessage = (e) => setResult(e.data);
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Advanced Patterns
|
|
151
|
+
|
|
152
|
+
### Server Components
|
|
153
|
+
```typescript
|
|
154
|
+
// Componente servidor (default no App Router)
|
|
155
|
+
async function Posts() {
|
|
156
|
+
const posts = await db.posts.findMany(); // Direto no banco!
|
|
157
|
+
return <PostList posts={posts} />;
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Server Actions
|
|
162
|
+
```typescript
|
|
163
|
+
async function submitForm(formData: FormData) {
|
|
164
|
+
'use server';
|
|
165
|
+
await db.users.create({ data: formData });
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Parallel Routes
|
|
170
|
+
```typescript
|
|
171
|
+
// app/@dashboard/page.tsx
|
|
172
|
+
// app/@sidebar/page.tsx
|
|
173
|
+
// Carregam em paralelo
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Image Optimization
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
import Image from 'next/image';
|
|
180
|
+
|
|
181
|
+
<Image
|
|
182
|
+
src="/hero.jpg"
|
|
183
|
+
width={1200}
|
|
184
|
+
height={600}
|
|
185
|
+
placeholder="blur"
|
|
186
|
+
priority // Para imagens above-the-fold
|
|
187
|
+
/>
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Font Optimization
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
import { Inter } from 'next/font/google';
|
|
194
|
+
|
|
195
|
+
const inter = Inter({
|
|
196
|
+
subsets: ['latin'],
|
|
197
|
+
display: 'swap',
|
|
198
|
+
});
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Checklist de Performance
|
|
202
|
+
|
|
203
|
+
- [ ] Requests em paralelo (Promise.all)?
|
|
204
|
+
- [ ] Code splitting implementado?
|
|
205
|
+
- [ ] Imagens otimizadas (next/image)?
|
|
206
|
+
- [ ] Fontes otimizadas (next/font)?
|
|
207
|
+
- [ ] Caching configurado?
|
|
208
|
+
- [ ] Listas virtualizadas?
|
|
209
|
+
- [ ] Memos apropriados?
|
|
210
|
+
- [ ] Bundle analisado?
|