49 arquivos acusados, nenhum com defeito
O linter da minha base de notas acusou 49 arquivos de reescrever o próprio histórico, e nenhum deles tinha defeito.
Mantenho essa base em Markdown versionado no Git, com um linter em Python que roda antes de cada commit. A regra que eu mais protejo ali diz que evento registrado não se apaga nem se reescreve: decisão e mudança de estado entram no fim da lista, e o que já estava escrito fica como estava.
Foi essa regra que disparou em 13 de setembro, numa rodada no Windows, com a mensagem “evento existente foi removido ou reescrito”. Na rodada seguinte, com PYTHONUTF8=1 no ambiente, sobrou um erro só, que já era conhecido, então a diferença entre 49 erros e um era uma variável de ambiente.
Pra saber se um evento mudou, o linter compara o arquivo atual com a última versão commitada, e as duas leituras não usavam a mesma codificação. O arquivo vinha em UTF-8, mas a saída do git show era decodificada pelo padrão do Windows, o cp1252, e cada acento do histórico chegava como outro texto, com “é” virando “é”, de modo que o evento antigo não batia com o novo e o linter concluía que alguém tinha mexido no passado. No Mac isso não aparece, porque lá o padrão já é UTF-8.
O alarme falso custava pouco, já que a variável de ambiente fazia ele sumir. O que pesava era o lugar onde ele caía: na regra mais importante da base, com uma mensagem que mandava procurar edição no conteúdo, enquanto o erro de decodificação de verdade saía num traceback de outra thread, longe da lista de erros. Quem vê 49 alarmes falsos numa regra aprende a passar por cima dela.
A correção completa entrou em 27 de setembro: o histórico passou a ser lido em bytes e decodificado em UTF-8 de forma explícita, sem depender do ambiente, e um arquivo que não decodifica agora gera UTF8_DECODE_ERROR com o nome do arquivo e o byte da falha, enquanto a regra de histórico só compara texto que decodificou. Os testes de regressão cobrem o histórico e o Markdown inválidos.
Qual mensagem de erro já mandou vocês procurarem o problema no lugar errado?











