1

Fala, Felipe.

Segunda-feira eu vou publicar aqui uma análise dos 30 mil posts do TabNews, e ela é meio que culpa sua. Deixa eu contar na ordem certa.

Dias atrás eu caí num post antigo da @letsaguiar sobre por que aprender C. Nos comentários tinha um cara corrigindo quatro pontos do texto dela.

Segui lendo até o fim, onde você deixou aquele roteiro de estudo com sete itens. E aí, no item 6, você linkou "um livro gratuito sobre Assembly x86-64".

Cliquei e era o livro pelo qual eu estudo Assembly. Eu lia aquele livro fazia um tempo sem a menor ideia de quem tinha escrito, e fui descobrir o autor por um comentário solto num post de terceiro, sobre outro assunto.

Passei os dias seguintes lendo quase tudo que você publicou aqui. Virou obsessão, sinceramente.

Aproveito para dizer que aquele comentário é bem diferente do que costumam chamar de "puxão de orelha". Você corrigiu quatro pontos e ainda deixou um roteiro de estudo com sete itens, dois artigos seus e convite para a sua comunidade. Foi o que me fez querer ler o resto do seu trabalho em vez de fechar a aba.

E foi isso que me fez querer entender melhor esta plataforma. Se um comentário perdido num post de 2023 conseguiu mudar como eu estudo, o que mais estava enterrado aqui que eu nunca ia ver? Acabei baixando o acervo público inteiro pela API, uns 30 mil posts e 118 mil comentários, para fazer uma análise de dados da comunidade.

E aí você apareceu de novo, agora nos resultados. Eu estava atrás dos textos que mais dividiram opinião, medindo voto a favor e voto contra separados em vez de olhar só o saldo. Este seu post está entre eles.

Como o assunto era mecânica de voto, fui conferir sua afirmação no código-fonte. Ela procede. Está em pages/api/v1/contents/[username]/[slug]/tabcoins/index.js, na função canUpdateContentTabCoins:

if (ip_count > 2 || user_count > 2) {
  throw new ValidationError({ message: 'Você está tentando qualificar muitas vezes o mesmo conteúdo.' });
}

A checagem roda antes do voto e só barra a partir da terceira contagem. Ou seja, o mesmo usuário, ou o mesmo IP, consegue três votos no mesmo conteúdo dentro de 72 horas. Post nasce com 1 tabcoin, três votos negativos levam para -2. É exatamente o que você descreveu.

Uma coisa que vale somar: o voto não é de graça. Em models/balance.js, na função rateContent:

const tabCoinsToDebitFromUser = -2;
const tabCashToCreditToUser = 1;

Quem vota paga 2 tabcoins e recebe 1 tabcash. Então derrubar um post de +1 para -2 custa 6 tabcoins de quem faz isso. Continua sendo uma pessoa só, como você disse, mas tem um preço.

Fui olhar também a fórmula de relevância, a getContentScore em models/content.js. Rodei ela com as constantes reais do arquivo (ageBase de 6 horas, boost de 10 minutos):

idade do postscore com +1 tcscore com -2 tc
1 minuto3,00-0,02
1 hora0,92-0,38
24 horas0,51-2,45

Olhando esses números eu cheguei a achar que tinha encontrado uma assimetria, mas não tem. O termo de gravidade é um bônus de novidade que expira, e ele vale para os dois sinais: post positivo novo entra multiplicado por 2, post negativo novo entra multiplicado por 0. Os dois convergem para a mesma base conforme envelhecem. A base de um post com +1 é 0,5, e ele vai de 3,00 para 0,51. A base de um post com -2 é -2,5, e ele vai de -0,02 para -2,45.

Ou seja, o que acontece com o tempo não é punição, é o empurrão inicial acabando. E repare que um post com saldo negativo começa perto de zero em vez de já entrar no fundo, o que é o contrário de punir.

Isso reforça o seu ponto em vez de enfraquecer, na minha leitura. O problema que você descreve não está no ranking, está antes dele: o post chega ao ranking já com saldo negativo, e três votos de uma pessoa só bastam para isso.

Achei mais uma coisa no histórico do repositório que acho que vai te interessar. O commit 595fbd0, de 05/06/2026, se chama "feat: restrict repeated tabcoins vote by user". Ele trocou uma checagem que era só por IP por uma que checa IP e usuário, e veio com 218 linhas de teste.

Ou seja: até 5 de junho deste ano, um mesmo usuário logado podia votar quantas vezes quisesse no mesmo conteúdo, limitado apenas pelo endereço IP. O seu post é de 15 de junho, dez dias depois de essa brecha ter sido fechada. Não invalida nada do que você disse, o teto de três por pessoa continua lá, mas mostra que o problema era bem maior há pouco tempo e que já tinha gente mexendo nele.

Fui olhar também o post que você citou, o "Quando a validação é inútil". Hoje ele está em +7, com 12 votos a favor e 6 contra. A comunidade acabou corrigindo a mão, mas depois. Digo isso porque quem passar por lá agora vai ver +7 e achar que a queixa era exagerada, e não era: o -1 do momento em que você escreveu foi real.

O post de segunda cita este seu aqui, então achei melhor avisar antes em vez de você descobrir depois. E aproveito para agradecer pelo livro. É das melhores coisas em português sobre o assunto, e descobrir que o autor era o mesmo cara daquele comentário foi a melhor coincidência que tive por aqui.


Edição: a versão anterior deste comentário dizia que a fórmula de relevância empurra post negativo cada vez mais fundo com o tempo, como se fosse uma assimetria. Estava errado, eu li rápido demais. A gravidade é simétrica e o trecho está corrigido acima. Aproveitei para somar o custo do voto em tabcoins e o commit de 05/06 que fechou a brecha maior.

Carregando publicação patrocinada...