Pular para o conteúdo principal

Versões e dourados

A mesma semente e o mesmo hoje só geram a mesma pessoa na mesma versão do motor. Esta página diz quando a pessoa pode mudar e como conferir que não mudou.

A política de versão​

Mudar a pessoa de uma semente é versão major. Na série 0.x, é a minor. Uma versão de correção (patch) nunca muda a pessoa.

Na prática, hoje: da 0.4.1 para outra 0.4.x, as pessoas ficam; numa 0.5.0, podem mudar.

Documentado

A política vem do README do @pilutech/botai-core. A prova indireta rodou: os dourados gravados pelo motor 0.2.0 continuam batendo com a 0.4.1, então a 0.3.0, a 0.4.0 e a 0.4.1 não mudaram nenhuma pessoa.

Fixe a versão exata​

PortaComo fixar
npxnpx -y @pilutech/botai-core@0.4.1 …
npmnpm install --save-dev --save-exact @pilutech/botai-core@0.4.1
imagemghcr.io/piluvitu/botai:0.4.1. Não existe tag de minor (:0.4), e a latest só aponta para a 0.4.1 hoje
binárioBOTAI_VERSAO=0.4.1 no install.sh, ou o release core-v0.4.1
fixturenpm install --save-dev --save-exact @pilutech/botai-playwright@0.1.0
extensãonão se aplica: a extensão sorteia cada pessoa

O fixture do Playwright 0.1.0 depende do core 0.4.0 exato. A pessoa é a mesma da 0.4.1; só o anexo botai-pessoa.json diz motor 0.4.0.

O campo motor​

O envelope diz qual versão gerou a pessoa, no campo motor; o SQL diz na 1ª linha. Para saber a versão da CLI que você tem:

botai --versao
0.4.1

Os dourados​

Os dourados são 12 arquivos guardados em packages/core/dourado/v1, no repositório, que travam a saída de sementes escolhidas. Eles só são regravados quando a pessoa muda, ou seja, numa versão major (na 0.x, minor). O indice.json, ao lado, diz as opções de cada um.

ArquivoO que trava
pessoa-semente-numero.jsonsemente numérica (42, hoje 2026-10-05)
pessoa-semente-texto.jsonsemente de texto (botai)
pessoa-semente-unicode.jsonsemente com acento e emoji
pessoa-uf.jsona opção uf (PI)
pessoa-dominio-email.jsona opção dominioEmail (example.com)
pessoa-29-de-fevereiro.jsonhoje em 29 de fevereiro (2028-02-29)
pessoas-lote.jsonum lote de 5 (semente lote, domínio example.com)
pessoas-lote.csvo mesmo lote em CSV
pessoas-lote.postgres.sqlo mesmo lote em SQL do Postgres
pessoas-lote.mysql.sqlo mesmo lote em SQL do MySQL
pessoas-lote.sqlite.sqlo mesmo lote em SQL do SQLite
pessoas-1000.jsonum lote de 1000 (semente mil-3), com 1,1 MB

Os dourados foram gravados pelo motor 0.2.0, e a pasta tem um commit só. Onde foram conferidos na 0.4.1:

OndeResultado
CLI local, binário darwin-arm64, HTTP do servidor local e HTTP da imagem12 de 12
Biblioteca e CLI24 de 24 comparações
Node, Bun e Deno12 de 12 em cada
Fixture do Playwright6 de pessoa única por navegador (18 no total)
Extensão (Vitest)4 de 4

Como comparar​

Duas diferenças são esperadas e não contam:

  • o campo motor, que muda a cada versão;
  • a 1ª linha do SQL (-- botai: …), que a CLI e o servidor escrevem e o dourado não tem.

Tirando as duas, a saída é igual ao dourado, byte a byte:

git clone --depth 1 https://github.com/PiluVitu/Botai.git
cd Botai/packages/core/dourado/v1

diff <(botai pessoa --semente 42 --hoje 2026-10-05 | grep -v '"motor"') \
<(grep -v '"motor"' pessoa-semente-numero.json) && echo "pessoa igual"

diff <(botai pessoas -n 5 --semente lote --hoje 2026-10-05 --dominio-email example.com \
--formato sql --dialeto postgres | tail -n +2) pessoas-lote.postgres.sql && echo "SQL igual"

diff <(botai pessoas -n 5 --semente lote --hoje 2026-10-05 --dominio-email example.com \
--formato csv) pessoas-lote.csv && echo "CSV igual"
pessoa igual
SQL igual
CSV igual

O tail -n +2 tira a 1ª linha do SQL gerado. O grep -v '"motor"' tira a linha do motor dos dois lados.