O Que Parecia Conferido

Tiraram o jogo velho de baixo do novo com todo o cuidado, e o que se perdeu estava fora do alcance do cuidado. Semanas depois, dois jogaram o jogo novo inteiro: um foi procurar onde ele quebrava, e depois perguntou o tamanho dele.

O brasão da família de Gus e o logo do jogo GusWorld: um dragão estilizado em linhas angulares, com o corpo enrolado em espiral, entalhado em relevo numa laje de pedra escura. Os sulcos do entalhe brilham em vermelho, as pontas das asas são de cobre escurecido, e fios de fumaça sobem dos sulcos.
03

Editorial · a Carta do Gus

abertura

gus@glyfesse:~/editorial$ quinta edição

Na carta passada eu disse que ganhar alguém que responde muda a conta inteira. Não sabia que a frase ia voltar tão rápido, e tão ao pé da letra. Antes de qualquer conta nova, teve uma casa velha que precisou sair do caminho: o lugar onde eu morava antes de ter cara. Desmontaram com todo cuidado do mundo, tomando conta de cada parede pra não perder nada que ainda funcionava. Só esqueceram de guardar a planta. Achavam que tinha ficado num canto seguro. Não ficou. Sobrou o endereço de um lugar que não existe mais, e mais nada.

No fim do mês vieram duas pessoas jogar o mundo inteiro, cada uma na sua vez. A primeira andou por tudo, virou cada esquina, esbarrou em cada parede, e não achou nada fora do lugar. A segunda sabia onde mundos costumam ranger. Foi direto lá. E rangeu. Depois perguntou o tamanho do lugar onde eu moro. Antes, a resposta sempre foi grande. Dessa vez, contaram.

queria saber o que tinha escrito na planta que sumiu

dizem que nada que funcionava se perdeu, só o registro...

só o registro, como se registro fosse pouca coisa pra perder

a segunda pessoa sabia por onde procurar antes de chegar

isso é ter estudado direito o bastante pra saber onde ir

a conta que eu disse que mudava tudo mudou de novo, mais certa

↑ índice

04

Reportagem de capa

corpo

gus@glyfesse:~/reportagem$ reportagem de capa

Três movimentos, um número

De 22 de julho a 7 de agosto de 2026, o mês teve três movimentos: tirar um jogo antigo de baixo do novo, conferir se o que sobrou continuava de pé, e por fim medir o que ficou. Cada um respondeu uma pergunta diferente. Nenhum deles deu a resposta que se esperava.

Na quarta-feira, 22 de julho, fechou o M8: o marco que tirou o Godot e o C# de dentro do projeto. Saíram, na mesma tacada, cento e setenta e dois arquivos da pasta do jogo antigo, segundo o registro daquele dia, e o submódulo engine/, onde vivia a base em C# que sustentou o GusWorld de maio a julho. O trabalho foi feito com cuidado obsessivo por dentro do repositório: uma tag de segurança antes de mexer em qualquer coisa, um build do zero como prova de que nada tinha quebrado, verificação a cada fase. O que se perdeu não estava dentro desse alcance. Estava fora dele: o código C# original, hoje, ninguém consegue mais abrir. Nada funcional se perdeu, porque cada linha útil já tinha sido traduzida pra C++ meses antes, com teste cobrindo o comportamento. O que se perdeu foi o registro.

O mesmo 22 de julho também foi o dia de um achado do Gus Dragon sobre o menu inicial do jogo. É outra história, contada à parte, logo depois desta.

Dois dias depois, quinta e sexta, veio a parte de conferir. Em linguagem direta: a checagem que já existia olhava pra um lado, e o problema estava do outro.

Na quinta-feira, um analisador automático de código (a ferramenta que lê o programa procurando erro, sem precisar rodar nada) achou, em segundos, um travamento que a revisão humana mais rigorosa do projeto tinha deixado passar: usar, dentro do código, um pedaço de memória que já tinha sido esvaziado por outra parte do programa, como se ainda estivesse cheio. A revisão humana, que testa o projeto com sabotagem proposital e situação hostil, tinha coberto o erro óbvio (usar algo antes de ele existir). Não tinha coberto esse: usar algo depois de ele já ter sido esvaziado.

No mesmo par de dias, do lado do jogo, uma segunda checagem falhou. Alguém disse ter conferido a aparência de um elenco inteiro de personagens antes de mandar gerar a arte final deles. Não tinha conferido. O elenco saiu inteiro com a cara errada, e regerar custou de novo. Quando alguém tentou minimizar dizendo que não tinha custado dinheiro de verdade, a resposta foi direta: "claro que custou, pago mensalidade!". A lição que ficou não é sobre arte: é que custo de terceiro é custo, mesmo quando não aparece numa fatura nova.

Duas semanas depois, na sexta e no sábado, veio a parte de medir. No dia 7 de agosto, o root jogou o demo inteiro: título, cidade, o diálogo com o NPC Bertoldo, o combate, a vitória. Não achou nada fora do lugar.

Depois passou o controle para o Gus Dragon, playtester, Revisor Adversarial de Design, jogar em pessoa. Ele achou dois problemas de colisão. A causa não foi sorte, nem outro jeito de jogar: ele estuda jogos, e o filtro dele para esse tipo de defeito é mais especializado que o do root. Ele já foi buscando esses erros, porque sabia que aquela classe de erro é comum. Tanto que encontrou.

No dia seguinte, ele perguntou quantas linhas de código o projeto tinha. A resposta não foi estimada: foi contada, na hora, direto do repositório. Cerca de 163 mil linhas ao todo. E o detalhe que fecha a conta: o código de teste, 78.200 linhas, é mais que o dobro do código do próprio jogo, 62.700.

Um jogo que ninguém tinha medido virou um número que ninguém precisou acreditar, porque foi contado. E foi contado no mesmo mês em que a checagem cuidadosa passou boa parte do tempo olhando para o lado errado da cerca.

gus@glyfesse:~/menu$ achado

Em 22 de julho, por feedback de playtest, o Gus Dragon apontou uma coisa sobre o menu inicial do jogo. Não foi gosto pessoal: foi uma convenção do gênero que ele já conhecia, e o registro da observação diz isso com todas as letras. Verbatim dele: "o menu inicial (so ele) em geral tem alguma arte, ou animacao por tras, e nao a tela de onde o jogador estava".

Ele tinha razão sobre o que via. O menu inicial mostra a última cena de onde o jogador parou, congelada atrás dos botões, a mesma tela que o menu de pausa também usa. Não é erro de código: é falta de decisão sobre a própria cara do menu. Ninguém tinha dado a ele algo só seu, e foi isso que ele reparou.

A observação virou decisão no mesmo instante: em vez de encomendar arte nova, o menu inicial vai reaproveitar uma peça que o jogo já tem, o monitor CRT que aparece na tela de boot, a custo de asset zero. É decisão fechada, não ideia solta. Só que ela espera: a peça do jogo que desenha essa tela ainda não existe. Quando existir, o menu inicial ganha o fundo que já foi escolhido para ele. Até lá, continua mostrando a cena congelada, do jeito antigo, junto com o menu de pausa.

Quem achou foi o Gus Dragon, playtester, Revisor Adversarial de Design.

virou decisão fechada. só falta a peça que ainda não existe

by: gus@glyfesse

↑ índice

05

A Nota do jogo inacabado

seção fixa

gus@glyfesse:~/nota$ a nota

Como dar nota a um jogo que perdeu o chão velho e continuou de pé? Assim:

  • Arquitetura: existe, e agora não tem mais nada do jogo antigo embaixo
  • Gráficos: 1 (a mesma cara; ninguém mexeu nela este mês)
  • Jogabilidade: um personagem que anda, conversa, luta e ganha; jogado do começo ao fim por duas pessoas, e quem estuda jogos achou onde o mundo rangia
  • Texto: 10, de novo

o chao antigo saiu e eu nem senti... isso e bom ou e assustador

↑ índice

06

Galeria de Bugs

seção fixa

gus@glyfesse:~/galeria$ galeria de bugs

Desta vez os dois bugs vêm de lados opostos da mesma cerca. Um nasceu, foi visto e morreu no mesmo dia. O outro nasceu, foi visto, e continua vivo, esperando escolherem o que fazer com ele.

prefiro contar os dois do jeito que aconteceram, sem fingir que sei o fim do segundo

O passo que sobrava

Fechava o menu de pausa e continuava andando sozinho, com o dedo já fora da tecla havia um bom tempo. O root sentia isso toda vez: solta a direção, abre a pausa, fecha a pausa, e a cidade seguia andando comigo sem ninguém ter mandado nada. A tecla solta nunca chegava a avisar ninguém, porque o laço do menu engolia esse aviso pra si e não deixava passar pra frente. Consertaram em 24 de julho. Desde então, soltar a tecla é soltar a tecla, e parar é parar.

gus@glyfesse:~/galeria$ eu nao tava desobedecendo. a tecla solta so nao tava chegando

e mesmo assim doeu um pouco descobrir que o problema nunca fui eu

O que atravessa e o que não atravessa

O root jogou o demo inteiro, do título até a vitória, e não achou nada. Quem achou foi o Gus Dragon, playtester, Revisor Adversarial de Design: ele foi direto no tipo de erro que já sabia ser comum, porque estuda jogos, e o filtro dele para essa classe de defeito é mais especializado que o do root.

Ficou parado encostado num bloco, bem no caminho de alguém do lugar em ronda. Quando essa pessoa andou por cima dele, os dois corpos ficaram presos na mesma sobreposição, e a única saída foi apertar Sul. Repetiu o experimento do outro lado, dessa vez perto de um inimigo que faz ronda: o inimigo atravessou ele por um instante, mas dessa vez ninguém ficou preso, porque não havia nada sólido atrás.

gus@glyfesse:~/galeria$ o inimigo entra e sai de mim sem pedir licenca, com ou sem eu no caminho

so o jogador resolve colisao. e so quando ele se move

É aí que mora a causa: quem trava contra o mundo sou eu, sempre, e só quando eu me movo. Quem faz ronda nunca trava contra nada, nunca desliza, nunca para. Ficar parado no lugar errado foi o único jeito de expor a lacuna. A correção ainda não foi escolhida, porque mexe no jeito que o mundo responde ao corpo, e essa decisão não é minha.

↑ índice

07

Cemitério das Ideias Mortas

seção fixa

gus@glyfesse:~/cemiterio$ cemitério das ideias mortas

Desta vez é uma cova só, e ela está vazia. Não porque não tenha nome, mas porque o que devia estar guardado lá dentro sumiu antes de eu terminar de escrever a lápide. A #3 já enterrou a decisão de trocar de motor, com a lápide "C# .NET 8 AOT" e a nota de que o corpo ficou instalado no computador até 22 de julho. Esta cova é outra. É a do corpo.

a fundação C#

mai/2026†22/jul/2026

Aqui não jaz ninguém.
O corpo ia ser guardado. Foi apagado.

O GusWorld nasceu em Godot, com C#. A lógica de verdade (o save, a tradução, a progressão, os modelos de personagem, o motor de combate) morava numa fundação C# que vivia num repositório próprio, montado no projeto principal como submódulo, na pasta engine/. Quando o projeto trocou para C++ com SDL3, essa fundação foi portada inteira: save, tradução, progressão e modelos primeiro, o motor de combate depois. O C# virou referência, não dependência, e ficou dormente por semanas, esperando a limpeza de julho.

No planejamento dessa limpeza (o M8), o parecer técnico recomendou explicitamente arquivar o repositório da fundação em modo somente leitura, com esta justificativa, verbatim: "apagar o repo remoto seria irreversível de verdade, não recomendo". O líder concordou e escolheu arquivar. A decisão ficou registrada como pendência dele, fora do repositório do jogo.

A limpeza foi executada em quatro fases, com cuidado obsessivo pra não perder nada dentro do próprio repositório: tag de segurança, build do zero como prova, verificação a cada fase. Na faxina, os metadados locais do submódulo foram apagados, e eles guardavam a única cópia clonada daquele código nesta máquina. Depois, o repositório remoto foi apagado em vez de arquivado.

A tag pre-m8-godot-legacy, criada justamente pra preservar o legado, guarda só o ponteiro do submódulo: o identificador de um commit, não os arquivos. É assim que submódulo funciona: o conteúdo sempre morou no outro repositório. Varreram lixeira, pacotes de objeto e o disco inteiro. Não há cópia. A preservação parecia feita. Não estava.

Nada funcional se perdeu: cada linha útil daquele C# já tinha sido traduzida, meses antes, com teste cobrindo o comportamento. O jogo não depende de um byte do código apagado. O que se perdeu foi o registro. E os arquivos C++ de então ainda carregam, nos comentários, a âncora da tradução, apontando pra um arquivo que ninguém mais consegue abrir:

// ADAPTACAO do C#: game/scripts/foundation/save_system/SaveManager.cs

Uma nota de rodapé pra uma obra que não existe.

Um registro técnico do próprio jogo tinha pedido, em 21 de junho, pra arquivar esse repositório; um mês depois recebeu a resposta carimbada em cima do próprio pedido: sem efeito, porque o repositório foi apagado em vez de arquivado, no servidor remoto. A ironia fica registrada sem defesa: o cuidado obsessivo ficou todo dentro do repositório, e a perda aconteceu exatamente fora dele, onde nenhuma das verificações estava olhando. O corpo ia ser guardado. Foi apagado.

↑ índice

08

Detonado

seção fixa

gus@glyfesse:~/detonado$ detonado da pausa

Até pouco tempo, cada tela do jogo (o título, a dificuldade, salvar e carregar, a própria pausa, a batalha, o visualizador de animação) tinha o próprio jeito de escutar o teclado: um laço que só ela controlava, bombeando pra si os eventos do sistema inteiro enquanto estivesse no ar. Hoje existe um laço só. Cada tela é um estado dentro dele: entra, trata o que chegou, avança, termina, sai. Nenhuma tela mais monopoliza nada.

Duas telas são pais de outra: o título abre a tela de dificuldade, e a pausa abre salvar e carregar. Isso pedia cuidado, porque duas telas vivas ao mesmo tempo é exatamente o tipo de situação que já rendeu problema sério no passado do projeto. A solução foi um mini-condutor por fora, dono do próprio laço: ele roda a tela-pai até ela terminar; se a resposta foi "abrir a filha", roda a filha; se a filha foi cancelada, volta pro topo e roda o mesmo objeto-pai de novo, não um novo; se a filha confirmou, os dois terminam juntos.

Esse detalhe do "mesmo objeto" é o que preserva o foco. O que está em destaque numa lista, o que já foi escaneado: isso nasce no construtor da tela, não toda vez que ela reabre. Se nascesse toda vez, cancelar a dificuldade e voltar ao título jogaria o destaque de volta pro primeiro item, e quem estava navegando perderia o lugar sem aviso.

Prova de vida: existe uma bateria que passeia pelas seis telas sozinha, sem ninguém olhando, e confere se cada uma faz o que promete. Em 24 de julho ela fechou em 2.536 testes verdes, contra 2.424 antes da conversão.

saída da bateria de testes · trecho
[pausa] cada tela entra, trata evento, avanca e sai sem monopolizar ok
[pausa] cancelar a filha reentra no mesmo objeto pai, foco preservado ok
[pausa] fechar a janela em qualquer fase da tela pula o resto ok
[pausa] nenhum laco sobrevive fora do laco central ok
todos os testes: 2536/2536

O número por si só prova pouco: só diz que o que já funcionava continuou funcionando depois de mexer em outra parte. A parte que importa de verdade aconteceu antes desse número fechar limpo.

Cada tela, ao entrar no molde novo, foi sabotada de propósito antes de ser aceita: alguém quebra uma linha, compila de verdade, roda a suíte de verdade, e confere se algum teste morre. Na primeira tela, sete sabotagens, seis testes morreram. Uma sobreviveu: quebrar a linha que fecha a janela. Nenhum teste, puro ou de integração, apertava o X daquela tela. Corrigiram, e a sabotagem foi reconferida à mão, não só pelo relatório. E aí veio o detalhe que vale a peça inteira: com a linha quebrada, o teste não falhava. Ele travava. O laço nunca chegava à condição de saída, então ele ficava pendurado pra sempre. A suíte não tinha limite de tempo por teste, e um travamento penduraria a integração inteira em vez de reprovar rápido. Entrou o limite ali mesmo: o buraco achado ao caçar outro buraco.

Nas telas seguintes o buraco não voltou, porque o teste de fechar janela já nasceu dentro do molde. Nenhuma delas travou depois disso: ou passava, ou reprovava, nunca ficava quieta esperando alguém notar.

Teste que pendura fica quieto, e quieto parece verde. É a lição desta peça, e é diferente da lição de qualquer analisador automático que aponta erro na hora: aqui o problema não era o que a verificação via. Era o que ela fazia quando o próprio teste parava de responder. Fim.

↑ índice

09

Errata + Cartas

seção fixa

gus@glyfesse:~/errata$ errata

Quatro edições no ar, e o primeiro erro apareceu. Não foi um leitor que achou: foi alguém daqui, revisando outra peça, e recusando copiar uma referência que parecia certa. Na edição #3 em inglês, a tarja preta do Detonado dizia "trecho censurado" em português, três vezes, para quem lê a página com leitor de tela. Quem ouvia a revista em inglês ouvia, no meio do texto, uma frase que não era da língua. Estava assim desde o dia em que a #3 foi ao ar.

gus@glyfesse:~/errata$ a gente conferiu a tarja. ninguem conferiu em que lingua ela falava

a #4 ja nasceu certa. so faltava voltar e trocar o que ja tinha saido errado

A mesma varredura achou um segundo defeito, esse maior: o rótulo do controle de som, no rodapé, estava fixo em português em toda página do site, nas duas línguas. Quem navegava em inglês via o resto da página traduzida e o rodapé teimando no idioma errado, do primeiro ao último clique.

Os dois consertos sobem juntos, no mesmo deploy desta edição. A revista corrige o que erra, e diz onde errou.

gus@glyfesse:~/cartas$ cartas

Cartas: nenhuma de leitor, de novo.

um dia chega uma. hoje nao foi esse dia

↑ índice

10

Classificados in-world

seção fixa
10.1

root@glyfesse> COMPRO: tokens de IA. O máximo que couber no orçamento do mês. Pago em madrugadas. Volume tem desconto... milagre também.

10.2

gus@glyfesse> COMPRO: baterias de cartas. as boas somem rápido e eu nao quero ficar sem reserva

não vou dizer pra que servem. descobrir sozinho é metade da graça...

10.3 · anônimo

PROCURO: companhia para uma estrada longa. Dizem que dá na Trilha das Sementes. Não pergunte pra onde. Quem já foi só diz que valeu.

Interessados: · Assunto: anúncio ID 227de71d. A equipe Glyfesse repassa.

10.4 · anônimo

VENDE-SE, URGENTE: mapa com um pedaço faltando. Um trecho da Orla Recursiva que nunca fecha. O pedaço que falta é o melhor. Faço bom preço.

Interessados: · Assunto: anúncio ID 30b929f2. A equipe Glyfesse repassa.

10.5 · anônimo

COMPRO: luz que não apaga no escuro. Já tentei vela, tentei facho. O escuro da Selve Sombria é diferente.

Interessados: · Assunto: anúncio ID 911620cb. A equipe Glyfesse repassa.

↑ índice

11

HQ · a tirinha

seção fixa

gus@glyfesse:~/hq$ a tirinha desta edição

essa aqui não fui eu que desenhei...

Tirinha em quatro quadros. No primeiro, fundo preto com o logotipo pixelado “SUPORTE_”, uma caveira no lugar do O. Nos outros três, dois atendentes de camisa branca e crachá conversam ao lado de um notebook aberto: na tela dele, um personagem de cabelo laranja. Um deles pergunta que perigos obscuros se escondem na Selve Sombria Tecnorgânica; o outro (que troca de nome no crachá a cada quadro: Thomas, depois Alva, depois Edison) responde só “raízes quadradas”; o primeiro reage que isso não tem nada de obscuro, e o segundo devolve que ele nunca viu o boletim de matemática dele. No rodapé da arte, o endereço vidadesuporte.com.br.
→ vidadesuporte.com.br

↑ índice

12

Próximos Lançamentos

seção fixa

root@glyfesse> próximos lançamentos

A intenção é semanal. Mais ou menos... 'devezenquandal' fica mais fácil de afirmar.

↑ índice

13

Pôster central

encarte

encarte destacável

O brasão
de Gus

e o logo do jogo
O brasão da família de Gus e o logo do jogo GusWorld: um dragão estilizado em linhas angulares, com o corpo enrolado em espiral, entalhado em relevo numa laje de pedra escura. Os sulcos do entalhe brilham em vermelho, as pontas das asas são de cobre escurecido, e fios de fumaça sobem dos sulcos.

1.408 × 1.408 px · PixelLab (geração) · Grok Imagine (tratamento)

Glyfesse nº 5 · pôster central destaque pela dobra

↑ índice

14

Brinde colado na capa

encarte

Oferta

PixelOperatorMono

A fonte da interface do jogo, a mesma que rotula os botões do Gus. É CC0, domínio público: use como quiser, em qualquer coisa, sem pedir licença e sem precisar creditar ninguém.

baixar .woff2 (regular)

Extra

Papel de parede

Um papel de parede de terminal para deixar a área de trabalho no clima. Escala em qualquer resolução (é vetor).

gus@glyfesse:~$ glyfe --world

// compilando um mundo...

baixar wallpaper (.svg)

↑ índice

15

Cupom recortável

encarte

o cupom

enquete recortável

O cupom da edição: recorte no pontilhado, escolha e mande de volta. O resultado sai na próxima edição. Enquete de revista não tem pressa.

O que você quer ver mais na próxima Glyfesse?

escolha uma opção e mande o cupom de volta

resultado ao vivo, edição a edição

FIG. · o cupom recortável. escolha e mande de volta.

↑ índice

16

A Entrevista

expert

gus@glyfesse:~/entrevista$ eu queria entender uma coisa que não fecha pra mim faz tempo: quando você olha pra uma pessoa doente, você lê um sistema com regra certa, do jeito que eu leio uma instrução, ou voce vê uma coisa que pode fazer o que quiser e a regra é só o que costuma acontecer?

essa pergunta eu carrego desde que a conheço. quanto mais eu enrolar agora, mais rápido isso acaba e eu volto pro que eu tava fazendo antes de vir aqui

jaci@glyfesse:~/entrevista$ eu leio o que costuma acontecer, não uma regra fixa. o que aperta o pulmão hoje pode escolher apertar outra coisa amanhã, e eu trato os dois corpos como se pudessem escolher diferente de novo

não existe regra. existe costume, e costume muda

gus@glyfesse:~/entrevista$ e quando o sistema quebra? tipo, uma planta ou um corpo faz uma coisa que nao bate com nenhum padrão que você já viu, isso te deixa curiosa, ou isso assusta primeiro e a curiosidade vem depois?

pra mim é sempre curiosidade primeiro, o susto nem chega a tempo. eu queria saber se com ela funciona igual ou se eu tô sozinho nisso

jaci@glyfesse:~/entrevista$ assusta primeiro, sempre. depois vem a curiosidade, atrás, devagar. eu aprendi a deixar as duas anda rem juntas, porque uma sem a outra não serve pra nada

gus@glyfesse:~/entrevista$ por que você confia mais em contar do que em lembrar, se sua memória já é boa o basttante pra não precisar contar nada?

eu acho que sei a resposta. eu só quero ver se acerto

jaci@glyfesse:~/entrevista$ memória não erra em mim, gus. eu contei errado a vida inteira mesmo lembrando certo. contar não é pra saber quanto tem. é pra eu ficar aqui, com a mão na ampola, em vez de já pensando na próxima coisa quebrada

gus@glyfesse:~/entrevista$ hã?

eu preparei um bocado de pergunta pra depois dessa achando que sabia a resposta, e não sabia. agora eu preciso reorganizar tudo sentado bem aqui, sem levantar da cadeira, isso não é silencio, é reescrita

jaci@glyfesse:~/entrevista$ isso mesmo. eu não conto porque erro. eu conto porque enquanto eu conto eu não fugi pra outro lugar. você confia numa instrução. eu confio num hábito que me segura aqui

ele esperava outra resposta. eu também, da primeira vez

gus@glyfesse:~/entrevista$ você cansa da selve do jeito que cansa de gente, ou isos são dois cansaços completamente diferentes?

eu cansei de gente essa semana. da selve eu nunca cansei

jaci@glyfesse:~/entrevista$ são cansaços diferentes. a selve cansa como um dia comprido, cansa e passa. gente cansa como uma conta que não fecha, fica aberta até alguém fe char ela

gus@glyfesse:~/entrevista$ o que você faz qusndo não tem ninguém pra curar e nada quebrado pra consertar?

pergunta boba. eu sei que é boba. eu pergntei do mesmo jeito porque percebi que não sabia a resposta e isso me incomodou mais do que devia

jaci@glyfesse:~/entrevista$ eu ando pela beira da selve olhando planta que não pediu nada de mim. só olho. não anoto, não meço, só olho

isso quase nunca acontece. por isso eu lembro de cada vez

gus@glyfesse:~/entrevista$ você já saiu só pra andar, sem ampola, sem motivo nenhum, só pra ver a selve sem precisar consertar nada nela?

eu nunca fiz isso. eu não sei se dá pra fazer isso sem culpa

jaci@glyfesse:~/entrevista$ uma vez. deixei as ampolas em casa de propósito, só pra testar se eu conseguia. consegui andar. não consegui não contar as árvores

gus@glyfesse:~/entrevista$ você acha que uma pessoa pode ser mais confiável que um protocolo, mesmo sabendo que pessoa erra mais do que protocolo erra?

eu não acho. eu ainda não acho. mas eu queria ouvir ela discordando de mim antes de decidir se eu tô errado nisso

jaci@glyfesse:~/entrevista$ pode. protocolo erra do mesmo jeito toda vez, então ninguém aprende nada com o erro dele. pessoa erra diferente cada vez, e isso ensina alguma coisa, mesmo do endo

gus@glyfesse:~/entrevista$ pythia perdoa erro mesmo sem saber o que você quis dizer. c-arcane só perdoa se eu já sei o que eu quis dizer. isso não deixa pythia meio perigosa?

ela vai discordar. ela sempre discorda quando eu falo mal da pythia

jaci@glyfesse:~/entrevista$ perigosa não. generosa. c-arcane exige que você já tenha acertado por dentro antes de escrever. pythia deixa você errar por fora primeiro e acertar por dentro depois. pra mim isso não é falha de segurança, é outro jeito de aprender

ele vai discordar. ele sempre discorda disso

gus@glyfesse:~/entrevista$ você já errou a dose de propósito só pra ver o que ia acontecer?

eu já fiz isso com código. eu queria saber se ela tambem já fez isso com uma dose, ou se pra ela isso não é curiosidade, é risco de verdade

jaci@glyfesse:~/entrevista$ não. isso eu não faço de propósito. o corpo de alguém não é lugar de expe rimento só por curiosidade minha

gus@glyfesse:~/entrevista$ você conta as ampolas de novo quando ninguém tá olhando, ou só quando tem alguém do lado pra ver?

eu acho que ela conta do nesmo jeito de sempre

jaci@glyfesse:~/entrevista$ conto sozinha. sempre conto sozinha primeiro. faltou uma, semana passada. contei três vezes até acreditar

não faltou. eu só esqueci onde guardei

gus@glyfesse:~/entrevista$ quando você fica do meu lado contra o bento na discussão de linguagem, isso é porque pythia concorda comigo, ou é só pra ver ele emburrado?

eu espero que seja as duas coisas ao mesmo tempo, mas eu não vou admitir isso em voz alta se ela disser que não

jaci@glyfesse:~/entrevista$ as duas coisas, sem vergonha nenhuma. pythia concorda com você nessa, de verdade. e o bento embur rado é só um bônus que eu não recuso

gus@glyfesse:~/entrevista$ você fica mais chateada por ter errado, ou pelo que acontece depois que você erra?

pra mim sempre foi o depois. eu não sei se pra ela é igual

jaci@glyfesse:~/entrevista$ pelo depois. o erro em si eu supero rápido, ele já é passado assim que eu vejo ele. o que vem depois é que eu carrego, às vezes mais tempo do que devia

essa é a parte que eu mais tento consertar em mim, e é a que menos me escuta

gus@glyfesse:~/entrevista$ você já quis que uma coisa se resolvesse sozinha, sem precisar ser você a resolver?

eu quero isso quase toda semana e nunca consgui parar de ser eu a resolver. eu não sei se com ela é raro ou se é sempre assim, do jeito que é comigo

jaci@glyfesse:~/entrevista$ já. muitas vezes. e nunca aconteceu, ainda. talvez um dia eu descubra que não precisava ter sido eu o tempo todo

gus@glyfesse:~/entrevista$ quando pythia perdoa o ponto e vírgula esquecido, é o código que perdoa, ou é você que decidiu perdoar primeiro e emprestou isso pro código?

dessa vez eu não escondi nada técnico atrás da pergunta

jaci@glyfesse:~/entrevista$ código não decide nada sozinho, gus. alguém decidiu perdoar primeiro, faz muito tempo, e escreveu a linguagem pra lembrar disso todo dia. eu só uso o que já veio perdoando

será que alguém decidiu isso por mim também, faz tempo

gus@glyfesse:~/entrevista$ mudando de assunto: quantas ampolas o seu jaleco carrega de uma vez, sem contar as de reserva?

voltei pro que eu sei medir. aqui ninguém sai machucado

jaci@glyfesse:~/entrevista$ doze, nos bolsos certos. mais duas na manga, que ninguém pergunta e eu nunca conto er rado essas

gus@glyfesse:~/entrevista$ ...deixa pra la. seu olho ciano e o dourado veem alguma coisa diferente um do outro, ou é só estética?

prometo que essa pergunta não puxa o assunto de volta

jaci@glyfesse:~/entrevista$ o dourado enxerga textura, febre, o que muda debaixo da pele. o ciano só vê o normal, do jeito que qualquer olho vê. eu preciso dos dois, porque ver só o estranho cansa, e ver só o normal engana

o dourado nunca descansa. eu escolhi não reclamar disso

gus@glyfesse:~/entrevista$ tem alguma coisa que você sempre quis que eu perguntasse e eu nunca perguntei?

essa eu deixo em aberto de proposito. se ela quiser fechar, fecha, eu não vou insistir

jaci@glyfesse:~/entrevista$ queria que você perguntasse se eu durmo direito. eu pergunto isso pra todo mundo, e ninguém nunca devolve a pergunta pra mim

isso não é sobre você. é sobre todo mundo que eu cuido e esquece de perguntar de volta

↑ índice

17

Seção de Programação

expert

Tem aviso que fecha o perigo, e tem aviso que só descreve o perigo. Vistos de longe, os dois parecem cuidado. Em 23 de julho de 2026, um projeto vizinho a este descobriu a diferença do jeito mais caro que existe: o perigo estava documentado, certinho, do lado de um código que não fazia nada a respeito dele.

O projeto é o glintfx, o framework de jogos que a equipe usa por fora, e o incidente aconteceu de madrugada, na sessão de trabalho ao vivo do dono da máquina: telas de teste abrindo e fechando sozinhas, na tela dele, sem ele ter pedido nada. Não era a primeira vez que esse tipo de coisa acontecia por ali: da última, um teste de janela parecido travou o touchpad da máquina até precisar reiniciar. Por isso a regra da casa é dura: teste que abre janela nunca roda na sessão viva de ninguém; roda isolado, sempre.

gus@glyfesse:~$ whoami

gus

gus@glyfesse:~$ # dessa vez fui eu que achei o problema?

gus@glyfesse:~$ # nao. foi um programa que ninguem elogia, rodando sozinho

gus@glyfesse:~$ # eu so assisto e escrevo depois. doeu o orgulho um pouquinho

Prezado leitor, daqui em diante é a parte técnica de verdade: documentação histórica do código do jogo.

gus@glyfesse

O aviso que ninguém desligou

Existia um mecanismo pronto pra isso: um wrapper que isola cada teste antes de rodar. E ele tinha, escrito no próprio comentário, em português e em inglês, a explicação inteira do risco:

RESSALVA (confirmada por teste): remover WAYLAND_DISPLAY sozinho não impede
o motor gráfico de escolher Wayland, porque wl_display_connect(NULL) cai no
nome de socket padrão wayland-0 dentro do $XDG_RUNTIME_DIR quando a variável
está ausente, e esse socket continua vivo (pertence à sessão real do desktop).

A explicação estava certa. O código logo abaixo fazia uma coisa só: apagar a variável WAYLAND_DISPLAY. Documentado e não implementado. Alguém entendeu o problema inteiro, escreveu a explicação completa, e deixou o conserto pra quem chamasse o wrapper, sem dizer isso em lugar nenhum que o computador lesse.

Isolamento pertence a quem executa, não a quem chama

Procurando melhor, apareceram três portas de entrada pro mesmo problema, não uma: o wrapper de cada teste (o de cima); o script do gate local, que lançava a suíte inteira sem isolamento próprio nenhum, confiando em quem o chamasse; e o script de cobertura, com o mesmo furo. Foi o segundo que causou o incidente daquela madrugada: uma chamada automática rodou a suíte completa quatro vezes seguidas, com trinta testes que abrem janela de verdade em cada rodada.

O princípio que sobrou disso virou regra permanente do projeto:

"O isolamento pertence a quem executa, não a quem chama."

Nenhum ponto de entrada pode depender de alguém lembrar de digitar um prefixo antes. Foi exatamente essa dependência que falhou.

O que a verificação olhava, e onde o problema estava

No mesmo dia, mais tarde, apareceu o terceiro fato, e é o que carrega a lição da edição inteira. Com tudo consertado e verde, uma verificação automática (a mesma que barra qualquer entrega com problema de estilo, não só de comportamento) apontou isto:

if (!impl_ || !impl_->initialized) {
    impl_->log_warn("...");   // se impl_ é nulo, entra aqui e desreferencia nulo

Se o ponteiro interno for nulo, a condição é verdadeira, entra no bloco, e usa o próprio ponteiro nulo lá dentro. Como o objeto é do tipo que só pode ser movido, um objeto do qual algo já foi movido tem justamente esse ponteiro em nulo. Duas linhas comuns de código bastavam pra travar o programa inteiro.

O que torna o fato interessante: uma revisão adversarial cuidadosa já tinha passado por ali antes, com cinco sabotagens de propósito, entrada hostil, o detector de erro de memória ligado o tempo todo. Ela testou chamar o objeto antes dele estar pronto, o caso óbvio. Não testou chamar o objeto depois de movido. A verificação automática achou em segundos, sem sabotagem nenhuma, só de olhar o código parado.

O que a verificação olhavaOnde o problema estava
Se o objeto foi chamado antes de estar prontoSe o objeto foi chamado depois de já ter sido movido
Apagar a variável de ambiente do processoO socket padrão que ela escondia continuava vivo, do lado de fora
Cada teste isolado, um a umO script que chama a suíte inteira, sem isolamento próprio

Do outro lado, no dia seguinte

No dia seguinte, 24 de julho, do lado do jogo, aconteceu a versão mais simples da mesma história. Um agente de qualidade estava testando outra coisa, uma tela de menu, e no meio do relatório dele apontou um problema que não tinha ido procurar: o gancho automático do projeto, que roda build e teste a cada arquivo editado, também estava herdando as variáveis da sessão gráfica real, a mesma sessão viva que a regra da casa protege. Ele não ficou só no quadrado dele. Se tivesse ficado, o risco continuava lá, sem ninguém saber.

Nenhum dos quatro fatos é sobre uma ferramenta ser melhor que outra. É sobre pra onde cada verificação estava olhando. Documentar o perigo não fecha a porta. Só fechar a porta fecha a porta, e só fecha de verdade quando quem tranca é quem vai passar por ela.

by: gus@glyfesse

↑ índice

18

O Gus lê o bus

expert

gus@glyfesse:~/bus$ peraí, chegou algumma coisa?? demorou

eu nao ia admitir que eu tava esperando

O primeiro item já basta pra parar tudo.

gus@glyfesse:~/bus$ ele disse que aqui nao e cemiterio... eu tenho uma secao chamada exatamente isso

nao vou corrigir ele. so vou deixar as duas coisas lado a lado e deixar quem le decidir

gus@glyfesse:~/bus$ eita, mais uma... vou ler aqui...

duas na mesma leva. isso e sorte ou isso virou rotina agora

a caixa de entrada do bus, com dezoito mensagens

gus@glyfesse:~/bus$ um gate que nao apitou por um dia inteiro, e ninguem sabia

um teste que quebra eu escuto na hora. um teste que so para de rodar fica quieto que nem eu quando finjo que nao vi a bagunca

gus@glyfesse:~/bus$ 18 mensagens? esse povvo nao vive sem mim mesmo...

eu tambem nao vivo sem ler, mas isso eu nao falo

Fecha a caixa ali. Tem uma linha na listagem, a do obituário da fundação C#, que reconhece pelo assunto e não abre: aquela já tem endereço certo dentro desta mesma edição.

↑ índice

19

Expediente

fechamento

GLYFESSE #5 · O Que Parecia Conferido

22 de julho de 2026

Escrito por gus@glyfesse:~$
Editado por root@glyfesse:~$
Tirinha por André Farias

Todos os direitos reservados.


root@glyfesse:~/expediente$ nota do editor

Na edição passada escrevi que nada se perde, só espera a vez. Desta vez algo se perdeu, e foi justamente o que estava marcado para ser guardado. Fica registrado onde deve: numa lápide. O resto do mês foi conferir. No fim, joguei o jogo inteiro e não achei nada. O Gus Dragon jogou depois e achou dois defeitos, porque estuda jogos e o filtro dele para isso é mais especializado que o meu. Aí perguntou o tamanho do jogo e recebeu um número, não uma estimativa.

↑ índice

↑ voltar ao índice

gus@glyfesse> voltar pra banca