16 — Template de `CLAUDE.md`
16 — Template de CLAUDE.md
Arquivo pronto para colar na raiz do projeto novo. Substitua tudo entre
{{ }}e apague o que não se aplicar. Inclui a seção de harness — ver 18 e 19.
Como manter
O CLAUDE.md é carregado automaticamente em toda sessão. Ele é índice, não enciclopédia: aponta
para os guias, não os duplica. Duplicar cria duas versões da verdade — é assim que um CLAUDE.md
diverge do código com o tempo (ver anti-padrões em
13).
Regra: se um fato pode mudar sem que ninguém lembre de atualizar o CLAUDE.md, ele não deveria estar
aqui — deveria estar num guia, referenciado daqui.
Template
# CLAUDE.md
Guia para o Claude Code (claude.ai/code) trabalhar neste repositório.
Projeto: **{{NOME_DO_PROJETO}}** — SPA React que fala com backend Curio via `@curio/client`.
Stack, arquitetura e convenções detalhadas vivem em `harness/guides/` — ver tabela abaixo.
---
## Comandos
```bash
npm run dev # ambiente dev + Vite (porta {{PORTA}})
npm run start:homolog # ambiente de homologação
npm run build # lint + tsc + build de produção
npm run lint # ESLint, zero warnings
npm run format # Prettier
npx tsc --noEmit # type-check completo
```
Node >= {{VERSAO_NODE}} (fixado em `.node-version`). Ative antes de qualquer comando — o `pre-commit`
valida e barra o commit se estiver errado.
**Não há suíte de testes.** A verificação é `lint` + `tsc` + `build` + teste manual da tela contra o
backend real. Não afirme que algo "passou nos testes".
---
## Guide Files
Toda a documentação de harness vive em `harness/`. `CLAUDE.md` e `init.sh` ficam na raiz — são os
pontos de entrada.
```
harness/
├── guides/ — referência técnica — versionado
├── _examples/
│ ├── state/ — feature_list.example.json, progress.example.md, session-handoff.example.md
│ ├── handoffs/ — handoff.example.md
│ └── user_preferences.example.md
├── <branch>/ — tudo que a branch produziu — VERSIONADO
│ ├── state/ — feature_list.json, progress.md, session-handoff.md
│ ├── plans/ — planos de implementação
│ ├── specs/ — specs de design
│ └── handoffs/ — handoffs de sessão
└── user_preferences.md — preferências do dev — ÚNICO ARQUIVO LOCAL (gitignored)
```
`<branch>` é o nome literal da branch atual (`git rev-parse --abbrev-ref HEAD`). **Só
`harness/user_preferences.md` é local.** Tudo dentro de `harness/<branch>/` é versionado — se
`harness/<branch>/state/` não existir ainda, **crie a pasta a partir de `_examples/`** (mecânico); não
invente conteúdo de `feature_list.json`/`progress.md`.
### Guias técnicos
- `harness/guides/commands.md` — build, run, ambientes, variáveis
- `harness/guides/architecture.md` — camadas do front, fluxo até o backend, autenticação
- `harness/guides/curio-framework-guide.md` — sessão, caso de uso, `useCurioMutation`, React Query
- `harness/guides/dev-environment.md` — Node/fnm, `.env`, acesso aos servidores
- `harness/guides/husky-git-hooks.md` — o que cada hook faz e como configurar
- `harness/guides/gitlab-access.md` — autenticação com a API do GitLab {{REMOVER_SE_NAO_USA}}
### Estado de features
- `harness/<branch>/plans/*.md` — planos task-by-task por feature
- `harness/<branch>/specs/*.md` — specs de design
- `harness/<branch>/handoffs/*.md` — handoffs por feature (versionado)
Quando existir plano/spec da feature ativa, ele tem precedência sobre o `feature_list.json` genérico
para o detalhe fino — mas atualize os dois ao final da sessão. Um plano/spec fica na branch onde
nasceu — não realoque se o trabalho continuar em outra branch depois.
### Sem histórico compartilhado entre branches
Não existe mais `global_feature_list.json`. Cada branch é autocontida — decisão deliberada em troca de
simplicidade (ver [18](18-HARNESS.md#reestruturação-2026-08-25-por-que-branch-primeiro)). Não recrie
esse arquivo.
---
## Harness — Estado, Verificação e Módulos
### Startup Workflow
Antes de escrever código:
1. Confirme o diretório com `pwd`.
2. Resolva a branch atual (`git rev-parse --abbrev-ref HEAD`). Se `harness/<branch>/state/` não
existir, crie a partir de `harness/_examples/` (scaffolding — não preencha conteúdo).
3. Leia `harness/user_preferences.md` (se existir).
4. Leia `harness/<branch>/state/feature_list.json` e `harness/<branch>/state/progress.md` (se existirem).
5. Revise commits recentes: `git log --oneline -5`.
6. Rode `./init.sh` (FAST por padrão; `FULL=1 ./init.sh` para a suíte completa).
Se o baseline já estiver quebrado, corrija antes de implementar feature nova.
### Interação com o usuário
Ao levantar decisões ou pontos em aberto, **faça uma pergunta por vez** e espere a resposta antes da
próxima. Não empacote várias perguntas numa lista só.
### Convenções de código
Comentários em código seguem estilo ultra-comprimido (telegráfico), não prosa. Comente **por quê**,
não **o quê**. Ver `harness/guides/` e a seção de convenções da documentação do projeto.
### Módulos (fonte de verdade)
| Módulo | Path | Doc | Verificação |
| ---------------- | ---------- | ----------------------------------------- | ---------------------------------------------------- |
| Frontend (React) | `{{PATH}}` | `harness/guides/curio-framework-guide.md` | `npm run lint` (rápido) / `npm run build` (completo) |
| Configuração | `config/` | `harness/guides/commands.md` | `npm run env:dev` gera `public/config.json` |
Antes de editar um módulo, leia o guia correspondente.
**Nunca editar à mão:** `public/config.json` — é gerado por `setEnvironment.js` a partir de
`config/{env}.json`. Toda mudança de configuração vai no arquivo de origem.
### Definition of Done
Uma tarefa só está concluída quando:
- o comportamento alvo foi implementado;
- `./init.sh` passa (ao menos FAST; FULL antes de considerar pronto para revisão);
- a tela foi **aberta no browser** e o fluxo verificado contra o backend real — sem suíte de testes,
esta é a única evidência funcional que existe;
- `harness/<branch>/state/feature_list.json` foi atualizado (`status` + `evidence`);
- `harness/<branch>/state/progress.md` foi atualizado ao fim da sessão.
Não marque como `passing` só porque o código foi escrito.
### Fim de sessão
1. Atualizar `harness/<branch>/state/feature_list.json` (status + evidência); se algo chegou a
`passing`, mover de `features` para `completed` no mesmo arquivo.
2. Atualizar `harness/<branch>/state/progress.md`.
3. Atualizar `harness/<branch>/state/session-handoff.md` com o resultado da verificação.
4. Commit descritivo com o repo em estado seguro — inclui `state/`, `plans/`, `specs/` e `handoffs/`
da branch, tudo versionado.
5. A próxima sessão deve conseguir rodar `./init.sh` imediatamente.
---
## Arquitetura — resumo
```
Componente → hook de caso de uso → useCurioMutation → UseCaseManager → @curio/client → Backend
```
- **Não é REST.** Casos de uso por id numérico, requests nomeados (`RM_SALVA_OBJETO`).
- **Erro é global.** `queryClient` captura e notifica; páginas não fazem `try/catch` para exibir erro.
- **Config em runtime.** `public/config.json` é lido por `fetch`, não embutido no bundle.
- **Propriedades do backend:** `_Prefixo` para primitivos, sem prefixo para objetos; nomes em português.
Detalhe completo em `harness/guides/curio-framework-guide.md`.
---
## Aliases
| Alias | Path |
| ------------- | ----------------- |
| `@` | `src/` |
| `@components` | `src/components/` |
| `@pages` | `src/pages/` |
| `@hooks` | `src/hooks/` |
| `@utils` | `src/utils/` |
| `@types` | `src/types/` |
| `@api` | `src/api/` |
| `@context` | `src/context/` |
| `@theme` | `src/theme/` |
Todo alias novo entra em `vite.config.ts` **e** `tsconfig.json`.
Se o projeto já tem um CLAUDE.md
Insira a seção de harness nele, não sobrescreva. Leia o arquivo inteiro antes, para não duplicar uma seção "Harness" criada numa tentativa anterior.
No Comments