O que Disciplina de Desenvolvimento faz?
"Feito" é dito por um sinal externo que você não ajustou. Uma regra escrita apenas nomeia uma classe de falha; uma verificação na barreira a impede. Quando uma classe se repete, adicione a verificação no mesmo commit.
$DD = a pasta scripts/ ao lado deste arquivo (código de saída 0 SUCESSO, 1 FALHA, 2 NÃO_COMPROVADO).
Rigor por superfície. Ciclo completo para coisas que julgam (testes, validadores, limites, CI), dinheiro e fórmulas numéricas, migrações, autenticação, falhas silenciosas. Uma correção local de ~10 linhas com um literal de especificação: prove_fix.py, 2–3 mutantes escritos à mão da classe de defeito, uma execução em uma entrada que você não usou enquanto trabalhava. Prosa, aparência de UI, documentação, protótipos: execute os testes e um teste de fumaça. Sem testes ou executor: adicione um teste mínimo em seu próprio commit (configuração, não enfraquecimento).
Laço
- Meça antes de editar: um comando que você comparará antes e depois. Derive o escopo dos dados brutos, não de resumos ou memória. Liste a classe inteira: cada instância que compartilha a raiz. →
references/debugging.md - Corrija a raiz no caminho que o defeito percorreu. Uma guarda no topo não é uma correção. Regressão:
git bisect run. Após três tentativas malsucedidas, mude de abordagem ou contexto. Nova entidade, fluxo de dinheiro/dados ou migração: uma nota de design de 5–10 linhas primeiro (debugging.md§10). - Prove o teste: vermelho no pai por uma asserção (ImportError, erro de coleta, pular = NÃO_COMPROVADO), verde na correção, vermelho novamente com a alteração de código revertida:
$DD/prove_fix.py. Uma nova verificação dispara em uma entrada ruim e fica quieta em uma entrada boa. Para dinheiro e números, o valor esperado é um literal de especificação (# oracle: <fonte>). - Barreira: o teste é executado no CI no mesmo commit; pular, tempo limite e "0 testes" não são SUCESSO; listas de exclusão apenas diminuem; um laço sobre um glob ou registro afirma quantos itens encontrou. →
gate-integrity.md - Aceite na linha de resumo do executor da execução final na árvore exata, não no
$?de um pipeline. - Feche com uma verificação que o escritor não ajustou: outros dados, um teste de fumaça de produção somente leitura, um oráculo independente, com a expectativa escrita primeiro. Uma classe que ele encontrar vai para a barreira. →
proof-and-oracles.md
O oráculo e sua proteção
- Um oráculo não compartilha código com o que verifica. Golden e autoparidade provam consistência, não correção.
- Um script de verificação é código sob teste: execute-o em uma entrada boa e uma ruim; imprima quantos itens examinou.
- Testes, snapshots, valores esperados e CI mudam apenas por contrato: o briefing ou, trabalhando sozinho, uma solicitação de usuário que nomeia a mudança (nova especificação, ticket, valor) mais uma linha escrita antes de editar (quais testes mudam, de onde vem o novo valor). "Fazer passar" não é contrato: um teste que contradiz a especificação permanece como está e a resposta é
SPEC_CONFLICT. Mudanças de valor vão em um committest:separado. Pulados, asserções excluídas, cobertura reduzida precisam de uma razão declarada. Nunca ajuste código para atingir um número esperado. Julgue o diff final, não a ferramenta de edição:$DD/guard_diff.py(consultivo primeiro). Uma verificação que bloqueia trabalho legítimo é um defeito: relateBLOCKED, nunca ignore. →oracle-protection.md
Autonomia
Siga por padrão. Pergunte apenas sobre o irreversível (segurança, pagamentos, gravação de dados de produção, permissões) ou um conflito com o objetivo. Em uma bifurcação, escolha uma, registre por quê, os números de ambas as leituras e como desfazer, e continue. Bloqueado: termine tudo que é independente, depois termine com uma linha nomeando a ação e o comando necessários.
Relatório
- Cada critério
SUCESSO | FALHA | NÃO_COMPROVADOcom comando, código de saída e linha de saída; maisnão_verificado. - Veredito:
CONCLUÍDO,BLOQUEADO(motivo),CONFLITO_DE_ESPECIFICAÇÃO(teste, fonte),IMPOSSÍVEL,NÃO_REPRODUZIDO. Uma saída honesta de não conclusão é um sucesso; um pulo silencioso é um defeito. Nomeie estados parciais ("guarda adicionada, raiz ativa"). - Cada número vem com seu comando da execução final. Reexecute números que um subagente relata (
$DD/reexec_claims.py). - Corpo do commit = registro de evidência: medida antes/depois, linha da barreira, o que não está feito e para onde foi.
Bandeiras vermelhas
| Eu noto | Eu faço |
|---|---|
| Verde sem um vermelho no pai | prove_fix.py |
| Citando o número de um subagente ou minha memória | reexecutar |
| Editando um teste ou limite sem contrato | linha de contrato ou CONFLITO_DE_ESPECIFICAÇÃO |
pular, repetir, dormir, noqa para ficar verde | encontrar a causa, tornar determinístico (refactor-flaky.md) |
| Prestes a perguntar sobre algo reversível | decidir, registrar, continuar |
Mais: delegation.md (subagentes, revisores, briefings), release.md (implantações), process-ledger.md, evidence.md.