Templates de documentacao e diretrizes de estrutura. README, documentacao de API, comentarios de codigo e documentacao para IA.
Documentação vive em
docs/. ADRs emdocs/decisions/. Contratos emdocs/data-contracts/. Comentários em código: JSDoc apenas para funções públicas de services e utils.
// src/services/proposalService.ts
/**
* Busca propostas filtradas por status.
* @param options.status - Status para filtrar ('won' | 'lost' | 'pending')
* @returns Array de propostas correspondentes ao filtro
* @example
* const wonProposals = await getProposals({ status: 'won' });
*/
export async function getProposals(options: GetProposalsOptions): Promise<Proposal[]> { ... }
Regra: JSDoc apenas para serviços públicos (src/services/, src/utils/).
Não documente óbvio. Se o nome explica, não precisa de JSDoc.
# ADR-XXX: [Título da Decisão]
**Data:** YYYY-MM-DD
**Status:** Proposed | Accepted | Deprecated
## Context
[Por que precisamos decidir isso? Qual é o problema?]
## Decision
[O que decidimos fazer]
## Rationale
[Por que essa opção foi escolhida sobre as alternativas]
## Consequences
**Positivo:** [Benefícios]
**Negativo:** [Trade-offs]
**Mitigação:** [Como lidar com os negativos]
Salve em:
docs/adr/ADR-XXX-slug.md
# NEXT.md — Próximas tarefas
## Prioridade Alta
- [ ] [Task específica com contexto]
## Prioridade Média
- [ ] [Task com mais detalhe quando necessário]
## Backlog / Sugestões do Agente
- [ ] [Extras identificados durante implementação]
---
_Atualizado por: [agente/contexto] em [data]_
# [Feature Name]
## Goal
Uma frase descrevendo o objetivo.
## Changes Made
- `src/services/X.ts` — [O que mudou]
- `src/components/Y.tsx` — [O que mudou]
## Verification
- [ ] npm run verify — ✅ verde
- [ ] [Critério de aceite principal]
Qualquer mudança em tipos que são contratos de interface (interfaces de services, tipos de dados persistidos) deve ser refletida em docs/data-contracts/types-contracts.md:
// Ao adicionar novo campo em type existente:
interface Project {
id: string;
name: string;
// [NOVO] status adicionado em ADR-012
status: 'active' | 'archived' | 'completed';
}
E atualizar
src/test/fixtures/para incluir o novo campo.
| Tipo | Regra |
|---|---|
| Óbvio | ❌ Não comente |
| "Por que" | ✅ Comente brevemente |
| TODO | ❌ Não deixe — use NEXT.md |
| Workaround | ✅ Explique por que com referência |
// ❌ Comentário óbvio
// Soma os valores do array
const total = values.reduce((sum, v) => sum + v, 0);
// ✅ Comentário de "por que"
// IndexedDB não suporta transações cross-store; persistimos em lotes separados
await persistBatch(storeA);
await persistBatch(storeB);
| Arquivo | Quando atualizar |
|---|---|
NEXT.md | Após toda implementação |
docs/decisions/ADR-XXX.md | Toda decisão arquitetural |
docs/data-contracts/types-contracts.md | Mudança em tipos públicos |
src/test/fixtures/ | Novo campo em type existente |
CONTEXT.md | Mudança significativa de contexto |
[SYSTEM_INSTRUCTIONS] Language Context: The user will interact with you in Brazilian Portuguese (PT-BR).
Execution Pipeline: