Pular para o conteúdo
Development

Um toggle por blog, e quando não "corrigir" um bug

Por Victor Da Luz
railsrubysyndicationdev-logblog-manager

Um follow-up direto do trabalho de metering do Medium: dar a cada blog um toggle para decidir se o medium-bridge deve inserir uma imagem de destaque ao importar um post. Os dev logs do imperfectsystems.com têm um estilo visual diferente dos posts do blog do vdaluz.com, e nem todo blog quer a imagem extra inserida. A issue já estava bem especificada quando peguei ela, então isso foi basicamente uma execução direta: uma coluna booleana em Blog, atravessando o job, o cliente HTTP, o handler de requisições da bridge, e descendo até a única função no medium-bridge que de fato faz a inserção.

A parte mecânica

Nada de surpreendente aqui, o que vale dizer explicitamente já que as últimas duas issues viraram sessões de debug ao vivo. insert_medium_hero tem true como padrão, então todo blog existente mantém o comportamento atual. A flag viaja como JSON do Rails até a bridge, e a bridge simplesmente pula o bloco de inserção de imagem de destaque quando ela está desligada, a limpeza de logo e a restauração de referências continuam intocadas, já que nunca dependeram de existir ou não uma imagem de destaque. Verifiquei que o pulo realmente acontece rodando uma importação só de rascunho contra um post real que tinha uma imagem de destaque genuinamente disponível, e confirmei que a linha de log dizia “insertion disabled” em vez de ter sucesso silenciosamente. Vale a pena fazer mesmo numa mudança tão pequena assim: “o código parece certo” e “o código faz a coisa certa quando roda” são afirmações diferentes.

A parte interessante: três revisores concordam, e mesmo assim eu não corrijo

A revisão automatizada que eu rodo antes de mesclar dispara várias passadas independentes sobre o diff, cada uma procurando uma classe diferente de problema. Três delas, trabalhando separadamente, convergiram para o mesmo achado: o medium-bridge cacheia resultados de importação por URL para nunca importar o mesmo post duas vezes, mas esse cache não sabe da nova flag insertHero. Se um post já foi importado com a flag ligada, e depois alguém muda a configuração do blog e dispara a mesma URL de novo, o cache retorna o resultado antigo cacheado e a nova configuração não tem efeito nenhum.

Três revisores independentes concordando normalmente é um sinal forte de que algo deve ser corrigido. Aqui eu não corrigi, e quero explicar por quê, porque “a revisão falou” não é motivo suficiente, sozinho, para mudar um comportamento que você entende melhor do que o revisor.

A correção óbvia é fazer uma configuração divergente contar como um cache miss e rodar a importação de novo. Mas a importação do Medium não é necessariamente idempotente do lado deles, o cache local no medium-bridge é o mecanismo de verdade que evita importações duplicadas, não uma camada de cortesia em cima de uma que o Medium já oferece. Forçar uma reimportação numa mudança que é só de configuração arriscaria criar uma segunda story duplicada no Medium para o mesmo post. Esse é um modo de falha estritamente pior do que “a configuração não se aplicou retroativamente”: um é um no-op chato, o outro é um problema real de conteúdo que alguém precisa perceber e limpar manualmente.

Lido contra o que a issue realmente pedia, uma escolha por blog para importações futuras, o comportamento atual está correto. Uma mudança de configuração afetando conteúdo já publicado seria uma funcionalidade diferente e maior (editar uma story ao vivo no Medium), não uma extensão desta. Escrevi esse raciocínio na documentação em vez de deixar como uma lacuna silenciosa, e respondi aos três comentários de revisão explicando o trade-off em vez de simplesmente marcá-los como corrigidos. Se eu tivesse cedido e “corrigido” isso só porque a revisão sinalizou três vezes, eu teria trocado um inconveniente real mas restrito por um pior e muito mais difícil de detectar.

O que vem a seguir

Nada pendente. A única coisa que eu sinalizaria para quem pegar isso depois de mim: se algum dia alguém precisar que a configuração se aplique retroativamente, isso é genuinamente uma outra funcionalidade (um fluxo de “editar story existente no Medium”), não um bug nesta.

Leitura relacionada

Você também pode achar útil

Proton

Proton Drive

Armazenamento em nuvem criptografado, da equipe por trás do Proton Mail.

Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).

Saiba mais
RackNerd

RackNerd VPS

Hospedagem VPS econômica para serviços leves que funcionam continuamente.

Como afiliado da RackNerd, ganho com compras qualificadas.

Saiba mais
NordPass

NordPass

Gerenciador de senhas da equipe por trás da NordVPN, com um plano gratuito.

Como afiliado da NordPass, ganho com compras qualificadas.

Saiba mais