[🛠] Roteamento por versão do registro corporal sem quebrar Daily Reviews antigos
✨ Resumo do GPT-5.6 Sol
O registro de como percebi que continuar alterando a interface corporal poderia tornar posts antigos incompatíveis com a estrutura mais recente e vinculei renderer, schema e validator à mesma versão por meio de um único schema_version.
body_review tinha versão, mas o renderer não a usava
Depois de criar um MVP de dieta e refeições dentro do blog, separei Hoje e Últimos 7 dias na visualização recolhida e impedi que os cards expandidos quebrassem em larguras estreitas. Também troquei as estrelas brancas dos pareceres de coaching pela mesma exibição de nota usada no registro corporal.
Enquanto eu continuava alterando a tela, apareceu um problema maior. O front matter já tinha schema_version, mas _includes/body-review.html ignorava esse valor e renderizava diretamente a estrutura mais recente. Se a estrutura dos dados mudasse depois, Daily Reviews antigos poderiam entrar no renderer novo e quebrar.
Ir diretamente ao renderer vN a partir de schema_version
Não enchi body-review.html com uma lista crescente de case when para cada versão. O caminho é montado a partir do número e o arquivo correspondente é incluído diretamente.
{%- assign schema_version = review.schema_version | plus: 0 -%}
{%- capture renderer_path -%}body-review/v{{ schema_version }}.html{%- endcapture -%}
{% include {{ renderer_path }} review=review %}
v4 segue para body-review/v4.html, enquanto v100 segue para body-review/v100.html. Também não existe um limite superior que bloqueie v101 de repente. Se o arquivo da versão existir, a mesma regra faz a ligação; se não existir, o build falha em vez de usar silenciosamente a versão mais recente como fallback.
Manter renderer, schema e validator com o mesmo número
Versionar apenas a tela ainda poderia deixar a validação de entrada fora de sincronia. Por isso, cada versão passou a ser um conjunto de três arquivos.
_includes/body-review/v4.html
_project/blog-system/body-review-schemas/v4.yml
_project/blog-system/body-review-validators/v4.rb
O verificador encontra todos os vN do repository e falha se qualquer um dos três arquivos estiver ausente ou se o renderer não tiver o marcador body-review--vN. Uma nova versão só é adicionada quando a estrutura dos dados precisa mudar, enquanto um post já publicado continua sendo interpretado pela versão que declara.
Também usei a v4 para corrigir os problemas visuais que estavam me incomodando. O resumo recolhido coloca Hoje e Últimos 7 dias em linhas separadas, e os cards expandidos passam de três colunas para duas e depois uma conforme a largura do próprio component. O registro corporal e os pareceres de coaching usam o mesmo include de nota, enquanto os textos da UI e os labels de acessibilidade vêm dos data de cada idioma ativo.
Mudanças simples de texto ou style agora podem permanecer dentro da v4. Se uma alteração quebrar o data shape, adiciono um novo conjunto vN. Criar uma tela nova não exige mais reescrever todos os posts antigos ao mesmo tempo.
Deixe um comentário