O registro da partida para de narrar tudo
Um único lançamento de dados imprimia cinco linhas, duas delas nomeando a mesma casa. O feed agora se lê como um comentário e não como uma ata — e nada foi apagado para isso.
Em palavras simples
O painel ao lado do tabuleiro anotava absolutamente tudo o que o jogo fazia. Um lançamento comum produzia cinco linhas separadas — lançou, moveu, caiu, terminou o turno e muitas vezes mais uma — sendo que duas nomeavam a mesma casa. Multiplique isso por quatro jogadores e trinta rodadas e o feed virava um muro que você parava de ler, o que é uma pena, porque as duas ou três linhas que realmente importavam estavam ali, em algum lugar.
Agora um lançamento e tudo o que ele provoca são uma linha só. Cair numa casa, terminar o turno, anunciar uma dívida antes de pagá-la, recusar uma compra antes de o leilão abrir: nada disso é dito em voz alta, porque o tabuleiro ou a linha seguinte já diz. Uma sequência de construções no mesmo terreno se junta numa linha, um leilão sem disputa deixa de anunciar duas vezes o mesmo valor, e no Speed a contagem regressiva da hipoteca só fala quando restam duas rodadas para agir.
Suas mensagens de bate-papo também deixam de ser empurradas para fora da tela. O painel mantinha uma única janela de histórico para tudo, então um tabuleiro agitado podia expulsar em silêncio o que uma pessoa tinha escrito. Agora atividade e bate-papo são guardados separadamente, e nenhuma quantidade de dados enterra uma mensagem escrita de verdade.
Para os mais técnicos
Filtrar na origem nunca foi opção. Reproduzir uma partida significa dobrar o registro completo de eventos de volta num estado, e é assim que funcionam o recarregamento da página, o modo espectador, a tela de repetição e o renderizador de clipes. Remova um evento para deixar o feed mais bonito e você corrompe todos eles. Por isso o registro permanece inteiro e a condensação é assunto apenas de desenho, num único construtor compartilhado pelo tabuleiro ao vivo, o modo espectador, as repetições, os clipes e a versão offline.
O que cada evento faz com o feed é um switch exaustivo sobre os tipos de evento do motor, o que significa que um tipo novo não compila até alguém decidir como ele deve ser lido:
// lib/game/feedDigest.ts — an exhaustive switch over every engine event
case 'dice_rolled':
return 'move'; // the roll opens a line
case 'moved':
case 'passed_start':
case 'jail_attempt_failed':
return 'absorb'; // …and what it caused folds into that line
case 'landed': // names the cell 'moved' just named
case 'turn_ended': // the board already shows whose turn it is (14% of events)
case 'payment_due': // the intent; 'debt_paid' is the settlement, with the amount
case 'buy_declined': // always followed by 'auction_started', which says it better
case 'auction_passed':// carries no information, and outnumbers real bids 2:1
return 'hidden';Apareceram dois bugs que nenhum teste teria achado, porque os dois eram sobre como a saída se lê e não sobre o que ela contém. Um leilão sem disputa anunciava o mesmo número duas vezes — "P1 deu 2600k", depois "P1 levou por 2600k" — então agora o lance de fechamento é engolido, e só ele, para que uma disputa real de lances continue se lendo como uma disputa. E um evento no meio de um lançamento encerrava cedo demais cada linha de movimento, até o construtor aprender a passar por cima dele.
