Editar um site por chat, sem estragá-lo
Pedir uma alteração em palavras simples é fácil de demonstrar e difícil de tornar segura. Como um pedido vira um patch numa definição validada, num rascunho.
"Deixe o cabeçalho mais escuro e ponha as avaliações acima dos preços."
Demonstrar isso é fácil. Torná-lo seguro é o trabalho de verdade, porque o pior cenário não é uma cor errada - é um modelo reescrever uma página que só devia ajustar e, pelo caminho, apagar em silêncio o horário de funcionamento.
O site é dado, não código
Aqui, um site é uma definição validada: páginas, seções, conteúdo, um design. O renderizador transforma isso em HTML e mais nada faz isso. Por isso, uma edição nunca mexe no markup - altera a definição, e a definição é verificada antes de ser salva.
Verificada quer dizer mais do que "foi lida sem erro". Regras entre campos pegam o que um esquema não consegue dizer: dois heros na mesma página, um artigo sem data, uma página aninhada num lugar que o router nunca serviria, uma tabela ligada a uma coleção que o site não declara. Tudo isso é recusado de imediato, em vez de ser publicado e descoberto mais tarde.
Uma edição é um patch
Ao modelo não se pede que devolva um site novo. Pede-se o menor patch que faça a alteração, sobre o site tal como está agora.
Essa única decisão elimina a maior parte do perigo:
- O conteúdo que a edição não menciona não pode mudar, porque não está na resposta.
- Uma alteração pequena custa uma resposta pequena, por isso as edições são rápidas e baratas.
- O patch fica salvo, e assim o histórico diz o que mudou, não apenas no que o site se tornou.
Nada é publicado até você disser
Cada edição vai parar a um rascunho. O editor mostra o rascunho; o site público continua a servir a última versão publicada até você publicar. Todas as versões são guardadas, por isso voltar atrás é um clique, não um pedido de desculpa.
Há mais uma verificação que vale a pena mencionar, porque pegou um bug real. Se o rascunho mudou enquanto uma edição demorada estava em curso - por exemplo, você fez uma alteração noutro aba -, o resultado é recusado em vez de mesclado:
"Another change was saved to this website while this edit was running. Please review the current draft and try again.
Perder uma edição é chato. Sobrescrever uma em silêncio é bem pior.
O que não vamos fazer
Não deixamos uma edição inventar factos. Uma edição que acrescenta um testemunho que ninguém escreveu, ou uma certificação que ninguém tem, não é uma funcionalidade - e a mesma regra que governa a geração governa a edição.
Também não fingimos que uma alteração aconteceu quando não aconteceu. Se um pedido não pode exprimir como alteração da definição, dizemos isso, em vez de produzir algo parecido e esperar que passe.