Abra (ou pegue) uma issue. Cada issue tem um rótulo de fase do CRISP-DM
(fase-1-negocio … fase-6-implantacao). Trabalho sem issue vira trabalho invisível.
Crie um branch a partir de main:git switch -c <fase>/<assunto-curto>,
por exemplo fase-4/modelo-ocupacao ou docs/etica.
Commits pequenos, mensagem no imperativo, em português: "Adiciona feature de
distância ao metrô", não "mudanças".
Antes do push:.\tasks.ps1 test (ruff + pytest). O CI roda o mesmo e bloqueia
o que falhar.
Pull request para main, com o template preenchido, e revisão de outro
integrante antes do merge.
Tabela de resultado não se escreve à mão. As tabelas dos documentos são geradas
dos _*.json (.\tasks.ps1 figuras → docs/_snippets/). O texto corrido cita poucos
números — e cada um tem de bater com o _*.json: se o pipeline mudou o número,
atualize o texto no mesmo PR.
Nome de coluna só em src/airbnb/schema.py; caminho e constante só em
src/airbnb/config.py; nome de integrante só em src/airbnb/produto/autoria.py.
Notebook não contém lógica. Função nova vai para src/airbnb/; o notebook importa.
Dado não entra no git (.gitignore já barra data/**). Resultado entra:
data/**/_*.json e site/data/.
Nada pessoal no site: sem nome de anfitrião, foto, URL de perfil ou id de anúncio.
Mudou uma decisão de método? Escreva ou atualize um ADR em docs/adr/.