Como contribuir¶
Obrigado pelo interesse! Este guia descreve como o projeto é desenvolvido.
Regra número 1: nenhum dado pessoal ou credencial no repositório¶
Nunca versione — nem como exemplo, nem em testes, nem em issues/PRs:
client_id,client_secret, tokens de acesso;- certificados (
.crt,.pem), chaves privadas (.key),.pfx/.p12; - número de conta corrente, CPF/CNPJ, nomes ou respostas reais da API.
Testes usam apenas dados sintéticos: certificados gerados em tempo de execução (rcgen), credenciais fictícias e valores de exemplo da documentação pública. O .gitignore bloqueia os formatos de credencial e o CI roda o gitleaks sobre todo o histórico. Se algo vazar, siga o procedimento em SECURITY.md — é tratado como incidente grave e removido também do histórico.
Fluxo de trabalho¶
- Issue primeiro: todo trabalho parte de uma issue do backlog. Cada versão tem um épico (
[Épico] vX.Y.Z) com sub-issues; o plano está emdocs/roadmap.md. - Branch a partir da
main. - Commits no padrão Conventional Commits (
feat:,fix:,test:,docs:,chore:,ci:), em inglês, referenciando a issue (Refs #6). - Pull request com descrição do que muda, como foi testado e
Closes #Npara as issues concluídas. O CI precisa estar verde. - Release: cada versão do roadmap fecha com a atualização do
CHANGELOG.md, da versão noCargo.tomle uma tagvX.Y.Z, que dispara o workflow de release.
Verificações locais¶
Antes de abrir um PR, rode o mesmo que o CI:
$ cargo fmt --all --check
$ cargo clippy --workspace --all-targets --locked -- -D warnings
$ cargo test --workspace --locked
$ RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps --locked
$ cargo deny check # https://github.com/EmbarkStudios/cargo-deny
$ gitleaks git . --config .gitleaks.toml --redact # https://github.com/gitleaks/gitleaks
A versão mínima suportada do Rust (MSRV) é a declarada em rust-version no Cargo.toml (hoje, 1.88).
Testes¶
A garantia do código são os testes automatizados. Toda funcionalidade nova precisa de:
| Camada | Onde | O que cobre |
|---|---|---|
| Unitários | #[cfg(test)] junto ao código |
modelos, validações, formatação, configuração |
| Integração da biblioteca | crates/inter-pj/tests/client.rs |
requisições e respostas contra um servidor mock (wiremock) |
| mTLS real | crates/inter-pj/tests/mtls.rs |
handshake com servidor TLS local que exige certificado de cliente |
| Contrato | crates/inter-pj/tests/contract.rs |
endpoints, escopos e modelos contra spec/inter-empresas-openapi.json |
| E2E do binário | crates/inter-pj-cli/tests/cli.rs |
o executável inter-pj com ambiente isolado |
Ao implementar um endpoint novo:
- declare-o em
crates/inter-pj/src/endpoint.rs(método, caminho e escopos) e adicione-o aALL— o teste de contrato confere com a especificação; - modele a resposta seguindo os nomes da API (
#[serde(rename_all = "camelCase")]), com valores monetários emrust_decimal::Decimal; - escreva testes com o servidor mock para sucesso e para os erros relevantes;
- adicione o comando na CLI com testes E2E para texto, JSON e códigos de saída.
Testar manualmente no sandbox¶
Com uma integração de sandbox sua, configure um perfil local (fora do repositório) e rode a CLI normalmente. Nunca cole saídas reais em issues ou PRs sem antes remover dados identificáveis.
Documentação¶
O site de documentação é construído a partir de site/ e publicado pelo workflow pages.yml a cada mudança na main. As páginas escritas à mão ficam em site/conteudo/; o CHANGELOG, a arquitetura, o roadmap, esta página, a política de segurança, o README da biblioteca e a ajuda do próprio inter-pj viram páginas por meio do crate sitegen, e a cópia não é commitada.
- Quando uma mudança altera o que a CLI faz, atualize também as páginas de
site/conteudo/que falam disso. Os comandosinter-pj ...citados nelas são conferidos contra o binário: um comando que deixou de existir reprova o CI. - Para ver o site antes de abrir o PR:
cargo build -p inter-pj-cli,cargo run -p sitegene, dentro desite/,zensical serve(zensical build --stricté o que o CI roda). O passo a passo, e o motivo de cada escolha, estão emsite/conteudo/por-dentro/desenvolvimento.md. - Os exemplos e os dados das páginas seguem a regra número 1: só valores fictícios.
Estilo¶
- Código, comentários e rustdoc em inglês; textos para o usuário (mensagens, ajuda, documentação) em português.
unsafeé proibido;clippy::pedanticé habilitado para o workspace.- Erros da biblioteca são tipados (
thiserror); a CLI mapeia cada categoria para um código de saída documentado.