Um toggle por blog, e quando não "corrigir" um bug
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
Reconciliando cross-posts do Medium que o blog-manager nunca tinha registrado
Um feed RSS que trava silenciosamente em 10 itens, um backfill com chave sintética e uma regra de precedência que só faz upgrade, e 76 de 78 títulos batendo sem nenhuma lógica difusa.
Uma correção de desvio de documentação que não foi tão chata quanto parecia
Três itens da auditoria que cada um virou outra coisa: uma alegação meio corrigida, uma recuperação de senha silenciosamente morta, e um e-mail de staging que apontaria para produção.
Um 500 escondido dentro das rotas isoladas de uma engine montada
O painel de jobs retornava um 500 em vez de uma página de login: helpers de rota sem qualificação resolvem contra a engine, não contra a aplicação. Uma linha, mais o gêmeo dormente dela.
Você também pode achar útil
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 maisRackNerd VPS
Hospedagem VPS econômica para serviços leves que funcionam continuamente.
Como afiliado da RackNerd, ganho com compras qualificadas.
Saiba maisNordPass
Gerenciador de senhas da equipe por trás da NordVPN, com um plano gratuito.
Como afiliado da NordPass, ganho com compras qualificadas.
Saiba mais